cancel
Showing results for 
Search instead for 
Did you mean: 

Payload of SOAP-Message cannot be read

udo_martens
Active Contributor
0 Kudos

Hi,

I'm sending an easy message to the XI 3.0 soap-adapter:

<?xml version="1.0" encoding="UTF-8"?>

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">

<SOAP:Header/>

<SOAP:Body>

<plain>test</plain>

</SOAP:Body>

</SOAP:Envelope>

Unfortunately I get always the error:

<SAP:Code area="MAPPING">CANNOT_READ_PAYLOAD</SAP:Code>

Thank you for reading und help,

Udo

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

HI Udo,

I believe your issue might be that the payload does not have a header structure:

<?xml version="1.0" encoding="UTF-8"?>

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">

<SOAP:Header/>

<SOAP:Body>

<start>

<plain>test</plain>

</start>

</SOAP:Body>

</SOAP:Envelope>

I believe SAP does not like data on the first TAG.

Cheers

Stefan

udo_martens
Active Contributor
0 Kudos

Hi Stefan,

sorry, that didn't solve the problem. I tested several SOAP messages - without success.

Regards, Udo

Former Member
0 Kudos

Hi Udo,

do you go from Client to XI to R/3 via SOAP?

If so did you have the IB generate the WSDL for you?

I used XMLSPY to consume my webservice and the only this is that SAP proposes the wrong TargetURL and you have to put that into the IB Web Service wizard.

Make sure to have a default Namespace in the IB SOAP Adapter communication channel.

That worked for me no other problems. We are on XI 3.0 SP10.

Cheers

Stefan

udo_martens
Active Contributor
0 Kudos

Hi Stefan,

Yes, I go from Client to XI to R/3 via SOAP.

I don't know how the wsdl can solve my problem.

I use wfetch to send the message. I sent to

http://host:port/XISOAPAdapter/MessageServlet?channel=

:service:channel

as described in sap bibliothek.

Without the right namespace in the channel the receiver determination runs to an error but it works fine.

We are on XI 3.0 SP 9.

The error message coming from XI back to wfetch:

[code]<?xml version='1.0'?>\r\n

<!-- see the documentation -->\r\n

<SOAP:Envelope xmlns:SOAP='http://schemas.xmlsoap.org/soap/envelope/'>\r\n

<SOAP:Body>\r\n

<SOAP:Fault>\r\n

<faultcode>SOAP:Server</faultcode>\r\n

<faultstring>failed to call the adapter engine</faultstring>\r\n

<detail>\r\n

<s:SystemError xmlns:s='http://sap.com/xi/WebService/xi2.0'>\r\n

<context>XIAdapter</context>\r\n

<code>DeliveryException</code>\r\n

<text><![CDATA[\r\n

com.sap.aii.af.mp.module.ModuleException\r\n

\tat com.sap.aii.af.mp.soap.ejb.XISOAPAdapterBean.process(XISOAPAdapterBean.java:697)\r\n

\tat com.sap.aii.af.mp.module.ModuleLocalLocalObjectImpl3.process(ModuleLocalLocalObjectImpl3.java:103)\r\n

\tat com.sap.aii.af.mp.ejb.ModuleProcessorBean.process(ModuleProcessorBean.java:221)\r\n

\tat com.sap.aii.af.mp.processor.ModuleProcessorLocalLocalObjectImpl0.process(ModuleProcessorLocalLocalObjectImpl0.java:103)\r\n

\tat com.sap.aii.af.mp.soap.web.MessageServlet.doPost(MessageServlet.java:513)\r\n

\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:760)\r\n

\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:853)\r\n

\tat com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:385)\r\n

\tat com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:263)\r\n

\tat com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:339)\r\n

\tat com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:317)\r\n

\tat com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:810)\r\n

\tat com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:238)\r\n

\tat com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)\r\n

\tat com.sap.engine.services.httpserver.server.Processor.request(Processor.java:147)\r\n

\tat com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:37)\r\n

\tat com.sap.engine.core.cluster.impl6.session.UnorderedChannel$MessageRunner.run(UnorderedChannel.java:71)\r\n

\tat com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)\r\n

\tat java.security.AccessController.doPrivileged(Native Method)\r\n

\tat com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:94)\r\n

\tat com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:162)\r\n

Caused by: com.sap.aii.messaging.srt.BubbleException: failed to call the adapter engine [null "null"]; nested exception used by: com.sap.aii.af.ra.ms.api.DeliveryException: XIServer:CANNOT_READ_PAYLOAD:\r\n

\tat com.sap.aii.af.mp.soap.ejb.AFCallerApplication.perform(AFCallerApplication.java:122)\r\n

\tat com.sap.aii.messaging.srt.ApplicationBubble.onMessage(ApplicationBubble.java:29)\r\n

\tat com.sap.aii.messaging.srt.ExtensionBubble.onMessage(ExtensionBubble.java:56)\r\n

\tat com.sap.aii.af.mp.soap.ejb.XISOAPAdapterBean.process(XISOAPAdapterBean.java:576)\r\n

\t... 20 more\r\n

Caused by: com.sap.aii.af.ra.ms.api.DeliveryException: XIServer:CANNOT_READ_PAYLOAD:\r\n

\tat com.sap.aii.adapter.xi.ms.XIEventHandler.onTransmit(XIEventHandler.java:366)\r\n

\tat com.sap.aii.af.ra.ms.impl.core.queue.CallConsumer.onMessage(CallConsumer.java:123)\r\n

\tat com.sap.aii.af.ra.ms.impl.core.queue.Queue.run(Queue.java:419)\r\n

\tat com.sap.engine.frame.core.thread.Task.run(Task.java:60)\r\n

\tat com.sap.engine.core.thread.impl5.SingleThread.execute(SingleThread.java:73)\r\n

\tat com.sap.engine.core.thread.impl5.SingleThread.run(SingleThread.java:145)\r\n

]]></text>\r\n

</s:SystemError>\r\n

</detail>\r\n

</SOAP:Fault>\r\n

</SOAP:Body>\r\n

</SOAP:Envelope>\r\n

[/code]

Regards (and thanks for your help), Udo

Former Member
0 Kudos

Hi Udo,

I don't know wfetch but I used XMLSPY for the SOAP Client from SAP which you can find on SDN.

The WSDL out of the IB is read by XMLSPY and it produces an instance of the payload that helps a lot to put should be send to XI. I assume the message makes it to XI and you can see the error in SXMB_MONI. When you are in SXMB_MONI what does the payload look like on the first step, e.g. did you enable the full logging in SXMB_ADM?

Further the request should show up in the Runtime Workbench on the message adapter tab and there you can see the payload too.

My only issue with XI using SOAP is that I forgot to put the default namespace in the configuration and to put the right URL in the wizard. After that it send the request to XI (use basic authorization on the client) and XI sends it to the sender channel per the URL. Based on the configuration it will find the receiver etc.

Well if you want to send me your WSDL so that I can see it in XMLSPY please send it to sressing@gcssr.de

Cheers

Stefan

Former Member
0 Kudos

Stefan:

(Referring to

Re: Payload of SOAP-Message cannot be read

Posted: Apr 8, 2005 7:22 AM

)

As we are facing a similar issue:

Was this issue resolved, and if so what was the problem.

Was it related to the setup/configuration of the adpater or mistakes in the configuratin of the message exchange in XI (integration builder configuration)?

Thanks,

Marc

Former Member
0 Kudos

HI Marc,

you have to ask Udo if SAP came back with a solution as it worked on my XI system but not on his.

Cheers

Stefan

Former Member
0 Kudos

Hi Udo,

We're faced with the same challenge that you had. Were you able to resolve your problem. If so, can you please shed some light.

One other question, when creating the wsdl(Define Web Service) in the Integration Directory, the url that is used, it that the url of the XI web service or the url of the client? I've used the url of the xi web service.

Kind regards

Nazlie

Former Member
0 Kudos

Hi Stefan,

When creating / define the web service(wsdl) in the integration directory, what url is required. Is it the url of the client or the xi web service. Using the ix web service url, the client connot establish a connection to xi web service.

Please assist.

Kind regards

Nazlie

Former Member
0 Kudos

Hi Nazlie,

Normally the URL should look like this:

http://yourserver:4445/myservice/ws

The port number is configured in the XI engine, if you are not sure about the value of the port ask your XI administrator. myservice/ws is configured in the SOAP adapter, where you can change these values in whatever you want.

You also need to configure the XI Web Service listener on the SOAP adapter itself.

Cheers,

Roberto

Former Member
0 Kudos

Hi,

when you offer a web service, e.g. your customer wants to call your web service, this is when you generate the WSDL in the ID and then it is the URL of the Intergration Server. When you call a webservice then you just configure the SOAP Receiver and use the URL which is in the WSDL from your webservice provider.

Cheers

Stefan

Former Member
0 Kudos

Thx Stefan,

The customer needs to call our web service. On generating the WSDL, I used the URL of the intergration Server but it's still not working. Should I not use the URL of the SOAP Adapter?

Thx for your assistance.

Regards

Nazlie

Former Member
0 Kudos

Thx Stefan,

The customer needs to call our web service. On generating the WSDL, I used the URL of the intergration Server. Using XMLSPy, I've made a request to our XI web service. I've included the header tags as you've explained above but the following error message still occurs:

In Pop-up window:

HTTP error: could not POST file ‘/sap/xi/engine?type=entry&version=3.0&Sender.Service=TELKOM_EAI&Interface=http%3A%2F%2Ftelkom.co.za%2FSOAP_EAI_XI%5EAirlineDetails_Out’ on server ‘sap-test’(500)

Result of request:

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">

<SOAP:Header>

</SOAP:Header>

<SOAP:Body>

<SOAP:Fault xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">

<faultcode>SOAP:Client</faultcode>

<faultstring>Error during parsing of SOAP header</faultstring>

<faultactor>http://sap.com/xi/XI/Message/30</faultactor>

<detail>

<SAP:Error xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">

<SAP:Category>XIProtocol</SAP:Category>

<SAP:Code area="PARSER">ITEM_MISSING</SAP:Code>

<SAP:P1>Header</SAP:P1>

<SAP:P2/>

<SAP:P3/>

<SAP:P4/>

<SAP:AdditionalText/>

<SAP:ApplicationFaultMessage namespace=""/>

<SAP:Stack>XML tag Header missing in SOAP message header (SAP XI Extension)

</SAP:Stack>

</SAP:Error>

</detail>

</SOAP:Fault>

</SOAP:Body>

</SOAP:Envelope>

If it's ok then I'll forward the wsdl to your email address sressing@gcssr.de as above. Your assistance is highly appreciated.

Kind regards

Nazlie

Message was edited by: Nazlie Behardien

Former Member
0 Kudos

Hi,

I replied to your e-mail after looking at the WSDL. You have the ABAP Port in the WSDL instead of the JAVA Port as the SOAP Adapter sits in the AF.

Please take a look at my example in the E-Mail.

If it does not work please send me the new error code.

Thanks

Stefan