cancel
Showing results for 
Search instead for 
Did you mean: 

XI3 SOAP sender and Receiver

Former Member
0 Kudos

Hi

I am stuck with a connecting to scenarios using SOAP channel. In short there is one business scenario that based on some conditions must start other scenarios (each one built around one business process). I am trying to send asynchronous SOAP message within the same XI and treat it as a External XI system to start another Business Scenario (using XI adapter does not work as the system discovers the message as being in a loop).

Everything would be fine if there would be 1 target scenarios but I have 1:n. For asyncronous transport I have defined different Message Interfaces to be used for on each case. So XI should determine the right business process based on the message interface that uses the communication channel.

So I have configured a SOAP sender and a receiver channel. As I understood from SOAP adapter FAQ I checked "Use Encoded Headers" and "Use Query String" for both - sender and receiver channel. And ofcourse receiver channel is pointed to http://:/XISOAPAdapter/MessageServlet?channel=:{system name}:{receiver channel name} but when I start the initiating scenario the asyncronous message is sent of but nobody is catching it.

In RWB Message monitoring / adapter engine I found the the message receives an exeception:

SOAP: response message contains an error XIServer/UNKNOWN/ModuleUnknownException - 
com.sap.aii.af.mp.module.ModuleException: either no channelID 
specified or no channel found for the specified party, service, and channel name, 
MessageServlet(Version $Id: //tc/aii/30_REL/src/_adapters
/_soap/java/com/sap/aii/af/mp/soap/web/MessageServlet.java#15 $) at 
com.sap.aii.af.mp.soap.web.MessageServlet.doPost(MessageServlet.java:427) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at 
com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl....
runServlet(HttpHandlerImpl.java:401) at 
com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl....
handleRequest(HttpHandlerImpl.java:266) at 
com.sap.engine.services.httpserver.server.RequestAnalizer....
startServlet(RequestAnalizer.java:387) at 
com.sap.engine.services.httpserver.server.RequestAnalizer....
startServlet(RequestAnalizer.java:365) at 
com.sap.engine.services.httpserver.server.RequestAnalizer....
invokeWebContainer(RequestAnalizer.java:944) at 
com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:266) at 
com.sap.engine.services.httpserver.server.Client.handle(Client.java:95) at 
com.sap.engine.services.httpserver.server.Processor.request(Processor.java:160) at 
com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener....
process(ApplicationSessionMessageListener.java:33) at 
com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41) at 
com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37) at 
java.security.AccessController.doPrivileged(Native Method) at 
com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100) at 
com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)

Any ideas... how to make XI to send SOAP messages so that the same XI system would be able to pick them up?

Or what have I done wrong?

Best wishes,

Heiko

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi,

are you using the SOAP sender comm channel in Best Effort mode - use it in Exactly Once mode.......

moreover the error shows that you have not configured your reciver SOAP comm channel in ID for your reciver interface to get the SOAP response in your scneario in XI.............so configure your recever SOAP comm channel in ID.

Regards,

Rajeev Gupta

Edited by: RAJEEV GUPTA on Feb 10, 2009 12:35 PM

Former Member
0 Kudos

Hi

Sender channel is "Exactly Once" as this is theway to tell system to treat it asynchronously.

AFAIK the receiver channel is configured... or what dows it mean "to configure smth" ?

There is a receiver agreement with the following parameters:

Sender Service: the process name that sends the message

Receiver Service: XID (the system name)

Receiver Interface /namespace: md_update_request_tam (the interface name and namespace that is sent)

Receiver Communication Channel: xi_std_soap_receiver

The last mentioned channel is configured to send the request to URL http://:/XISOAPAdapter/MessageServlet?channel=:XID:xi_std_soap_sender

When I open the mentioned URL in my browser I receive the following answer:

Message Servlet is in Status OK
Status information:
Servlet com.sap.aii.af.mp.soap.web.MessageServlet (Version $Id: //tc/aii/30_REL/src/_adapters/_soap/java/com/sap/aii/af/mp/soap/web/MessageServlet.java#15 $) bound to /MessageServlet
Classname ModuleProcessor: null
Lookupname for localModuleProcessorLookupName: localejbs/ModuleProcessorBean
Lookupname for remoteModuleProcessorLookupName: null
ModuleProcessorClass not instantiated
ModuleProcessorLocal is Instance of com.sap.aii.af.mp.processor.ModuleProcessorLocalLocalObjectImpl0_0
ModuleProcessorRemote not instantiated 

So I am quite confused as in theory everything should work...

Former Member
0 Kudos

Hi,

i think you are trying to send a SOAP msg from your reciver SOAP comm channnel to your XI system only using the WSDL of your sender SOAP adapter - this can only work if the response msg struc is same as source msg struc and if it is so, then again the response of this msg will trigger source msg and it will go in a loop - SO this solution will not work anyway............

So you will have to redesign your solution.........my suggestion you have to do 1:n mapping, get your source msg by sender SOAP adapter.........in msg mapping do 1:n mapping and then in enhanced recever detemination send it to multiple recevirer if required...............then if you are sending the msgs to r/3 via proxy, get their response and send it to source SOAP application via recever SOAP adapter.

Regards,

Rajeev Gupta

Former Member
0 Kudos

Hi Thanks for reply.

I must correct you. If I have two scenarios... and they both have an XI application component defined as an external system, then it is possible to send SOAP messages from one scenario to another. I have done it and it works fine if I have multiple source scenarios and on target scenario. It works fine as the default interface is set in the communication channel to the one... but now I want that based on the message interface XIs SOAP client could behave as XI SOAP server is expecting clients to behave.

If I send MsgInterface 'abc' to CC x and CCs default interface is 'def', I would expect that system would behave as it is receiving interface 'abc'

This is my goal... but maybe I am stuck with something else...

Thanks for any input...

Answers (2)

Answers (2)

former_member200962
Active Contributor
0 Kudos

hi,

What is the format that u are using for the sender URL....The error message you are getting either because the names that you have mentioned in the sender URL are wrong or the URl format itslef is wrong.....if the format is the one that you have mentioned in the first post then it is not the desired format.

Use the following format to create the URL to send the request:

http://<servernameORserverIPaddress>:<portNumber>/XISOAPAdapter/MessageServlet?channel=:<senderservice>:<snederCCname>&version=3.0&Sender.Service=<senderservice>&Interface=<IRnamespace>%5E<senderMI>

Replace

&

with

& amp;

(no space inbetween the two words) in the above URL.

How to configure SOAP communication channels (sender and receiver) so that two XI instances could communicate and (more important) use different message interfaces on the same channel?

While creating a Receiver communication channel there is no need to specify the interface name and hence it can be used in different scenarios....however a sender communication needs the sender interface to be specified (as in SAP XI.....not in SAP PI).....so a sender channel can be used in different scenarios but with only the same interface.....

Regards,

Abhishek

Edited by: abhishek salvi on Feb 17, 2009 2:50 PM

Former Member
0 Kudos

Hi

Maybe if I rephrase the problem, someone could help me.

How to configure SOAP communication channels (sender and receiver) so that two XI instances could communicate and (more important) use different message interfaces on the same channel?

Any suggestions?

Heiko