cancel
Showing results for 
Search instead for 
Did you mean: 

Error Re-using Sender SOAP Channel

Former Member
0 Kudos

Hi,

I have a requirement to send multiple messages to PI using same SOAP Sender Channel; I referred to help.sap.com and found that there is no restriction in re-using a SOAP Sender Channel.

However when I sent a message using SAP SOAP client, namespace for soap envelope got added which is failing the messages in PI.

Correct message:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<ConsumerData>
  <UserId>12345</UserId> 
  <AccountData>9561234</AccountData> 
</ConsumerData>

Incorrect message (in SXMB_MONI):

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<ConsumerData xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
  <UserId>12345</UserId> 
  <AccountData>9561234</AccountData> 
</ConsumerData>

1) How to avoid getting the URL (xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/") in the message?

2) Is it really possible to re-use the SOAP Sender Channel to get different types of messages (from same sender party & service)?

I did make use of Do Not Use SOAP Envelope in the channel and &nosoap=true in URL; but no luck.

Please help. I need to get this approach working

Thanks

Pankaj

Accepted Solutions (1)

Accepted Solutions (1)

baskar_gopalakrishnan2
Active Contributor
0 Kudos

>>1) How to avoid getting the URL (xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/") in the message?

Dont worry about extra adding soap namespace. This issue might be specific to soap client itool in your case SAP SOAP CLIENT. If you use other soap client tools like XMLSPY or SOAPUI or SOAPSONAR, this might not occur. Test with other tools too.

>>2) Is it really possible to re-use the SOAP Sender Channel to get different types of messages (from same sender party & service)?

Yes it is possible.

But you cannot reuse in the following situation.

Example:

a) the same channel for both synchronous and asynchronous

b) if you use some messages for http and some for https.

Former Member
0 Kudos

Hi,

I will try to use different tools (may not be possible due to security restrictions).

The basic aim is to:

1) Use one Sender channel per source system; so less number of objects.

2) to keep the PI URL common for one source system; PI URL dependent only on Sender Party, Sender Service and Sender Channel, no mention of Sender Interface Name in the URL

I am using the format http://host:port /XISOAPAdapter/MessageServlet?channel=p:s:c (Note - 856597).

I hope I can achieve the requirement in point 2 without any issue.

Thanks

Pankaj

baskar_gopalakrishnan2
Active Contributor
0 Kudos

>>1) Use one Sender channel per source system; so less number of objects.

Yes, you can reuse one sender channel for many WSDL scenarios.

>>2) to keep the PI URL common for one source system; PI URL dependent only on Sender Party, Sender Service and Sender Channel, no mention of Sender Interface Name in the URL I am using the format http://host:port /XISOAPAdapter/MessageServlet?channel=p:s:c (Note - 856597).

I hope I can achieve the requirement in point 2 without any issue.

This is not possible. WSDL URL will be different for every interface. Because it is also specific to sender interface and sender interface namespace. When you create you have to specify these variables too.

Example:

http://host:port/XISOAPAdapter/MessageServlet?channel=:BC_TEST:CC_SOAPCHANNEL&interface=SI_TEST&inte...

When you create initially you input only first

http://host:port /XISOAPAdapter/MessageServlet?channel=p:s:c

and subsequent screen you will need to input sender service interface and interface namespace.

Hope that helps.

Former Member
0 Kudos

Hi,

This is not possible. WSDL URL will be different for every interface.

The problem the legacy system which will send message to PI can include only one URL in its code and hence the need to generate one URL per source system.

If it is really not possible to use a common URL then I am lost as how to solve the problem

Thanks

Pankaj

baskar_gopalakrishnan2
Active Contributor
0 Kudos

>>The problem the legacy system which will send message to PI can include only one URL in its code and hence the need to generate one URL per source system.

Dont understand your statement generate one URL per source system

What I meant is you create webservice using soap sender and provide wsdl to the client or legacy system.

Example: Interface A Using your webservice get database query information (synchronous and HTTP)

Example Interface B Using your webservice get mortgage information (synchronous and HTTP)

For Interface A and B, You can use the same soap sender communication channel but you might have to create different wsdl for these two. so you will provide 2 WSDL to the client.

In your WSDL, if you search for the <soap:address location xml tag, you will find URL that has different sender interface and namespace details.

Note: If you deal with one interface, then you dont have any issue.

Hope that helps.

Answers (1)

Answers (1)

former_member463616
Contributor
0 Kudos

Hi Pankaj,

>>>>1) How to avoid getting the URL (xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/") in the message?

have a look at these blogs, it might be helpful to you.

/people/stefan.grube/blog/2007/02/02/remove-namespace-prefix-or-change-xml-encoding-with-the-xmlanonymizerbean

/people/sameer.shadab/blog/2005/12/05/how-to-remove-namespaces-in-mapping--xi

Regards,

P.Rajesh

Former Member
0 Kudos

Hi,

The references do not seem to help. I cannot use the module as it is a SOAP Sender CHannel and cannot be extended to add modules.

I cannot use the second blog as I do not use a DT/ MT; I am using an external Definition which does not have a namespace associated with the root tag. The namespace that is shown above is due to the use of SOAP Channel.

Thanks

Pankaj.