cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

SOAP: call failed: java.io.IOException: Cant parse the document; HTTP 200 OK

wu_feng2
Explorer
0 Likes
12,713

Hello Experts,

I’m working on PI dual stack 7.30 , and have a scenaio RFC( ECC ) -> PI -> SOAP.(3rd).

Either in synchronized or asynchronize mode, the SOAP Receiver channel got an error:

SOAP: call failed: java.io.IOException: Cant parse the document; HTTP 200 OK.

The logs as below:

However, 3rd checked that the message had been received and got no error.

I have check that, 3rd response with text/utf-8 format message.

Then ,I tried to use Soap UI tool to call the soap service directly, everything is OK.

Even , I used the provided WSDL to generate client proxy in ECC to test the SOAP service, and with ABAP developers' help to call the service, and all is working fine.

The message by soap ui directly sent look like as below:

So, how could I overcome this error?

Please give me some advice.

Thanks in advance.

View Entire Topic
dilipkkp2412
Contributor
0 Likes

Hi Wu Feng,

By looking in to your request payloads

[1] I got the reason of soap-fault message saying invalid namespace [when option unchecked "Do Not use soap Envelope"], that is,

  • its due to namespace given in element "DeviceCategoryInput" of your sxmb_moni request input
  • and here at this time no soap envelope is present in your payload
  • To follow this suggested config (which is also in our live sys), you need to do below:
  • In Soap-Receiver Comm Channel:
  • check 'Do Not use soap Envelope' (here assuming, in request payload, soap envelope is already attached)
  • and apply transformation of content type using module parameters given in very initial reply
  • Soap-Request format
<soapenv:Envelope
	xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
	xmlns:tem="http://tempuri.org/"
	xmlns:a="http://www.w3.org/2005/08/addressing">
	<soap:Header>
		<a:Action soap:mustUnderstand="1">http://tempuri.org/DeviceCategoryInput</a:Action>
	</soap:Header>
	<soapenv:Body>
		<tem:DeviceCategoryInput>
			<DeviceCategorys>
				<!--1 or more repetitions:-->
				<DeviceCategory>
					<CLASS>P001</CLASS>
					<KSCHL>test</KSCHL>
					<P_CLASS>H01</P_CLASS>
					<P_KSCHL>Furnace</P_KSCHL>
					<STATU>Approved</STATU>
					<ADATU>20180522</ADATU>
					<VDATU>20180522</VDATU>
				</DeviceCategory>
			</DeviceCategorys>
		</tem:DeviceCategoryInput>
	</soapenv:Body>
</soapenv:Envelope>

[2] With option "un-check", its good that, you have confirmation of soap-request receipts at 3rd party end is been sent successfully.

  • Its very true that, you have parsing issue in response side,
  • but one point here to note, is, even that response message is not entering in soap-channels during response
  • and no clue, what went wrong.
  • some how, from 3rd party, can you get, what response they are sending, or you can attach soap-response from soap-ui tool.

Meanwhile, can you try config type [1] all suggested steps in PI ? Here too may come same error while response receipts.

Thanks & Regards,

Dilip

dilipkkp2412
Contributor
0 Likes

Hi,

I got soap-response from log, no need to re-attach.

Mean while, please try type [1] config, if possible.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:DeviceCategoryInputResponse xmlns:ns2="http://tempuri.org/"><out>S</out></ns2:DeviceCategoryInputResponse></soap:Body></soap:Envelope>
dilipkkp2412
Contributor
0 Likes

Hi Wu Feng,

When working with "uncheck" option for "Do Not use soap Envelope", in response mapping, do you have logic to extract element "DeviceCategoryInputResponse" soap-envelope response ?

You need that too, this can be tried out in both config types, can be achieved using XSLT.

dilipkkp2412
Contributor
0 Likes

Hi,

In your config, in Receiver Agreement, please do like below, and trigger payload.

This stops any validation checks

wu_feng2
Explorer
0 Likes

Hi Dilip,

I'm not familiar with XSLT MAPPING.

If generating the Soap-Request format, do I need to change the target message type?

And the Mapping code like below?

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="XML" indent="YES" />
    <xsl:template match="/">
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                          xmlns:tem="http://tempuri.org/" 
                          xmlns:a="http://www.w3.org/2005/08/addressing">
            <soap:Header>
                <a:Action soap:mustUnderstand="1">http://tempuri.org/DeviceCategoryInput</a:Action>
            </soap:Header>
            <soapenv:Body>
                <tem:DeviceCategoryInput>
                    <DeviceCategorys>
                        <xsl:for-each select="Z_PM_MASTERDATA_SBFLTX_SEND/IT_CLAS_ATTRIBS/item">
                            <DeviceCategory>
                                <xsl:variable name="CLASS" select="CLASS" />
                                <xsl:variable name="KSCHL" select="KSCHL" />
                                <xsl:variable name="P_CLASS" select="P_CLASS" />
                                <xsl:variable name="P_KSCHL" select="P_KSCHL" />
                                <xsl:variable name="STATU" select="STATU" />
                                <xsl:variable name="ADATU" select="ADATU" />
                                <xsl:variable name="VDATU" select="VDATU" />
                            </DeviceCategory>
                        </xsl:for-each>
                    </DeviceCategorys>
                </tem:DeviceCategoryInput>
            </soapenv:Body>
        </soapenv:Envelope>
    </xsl:template>
</xsl:stylesheet>


dilipkkp2412
Contributor
0 Likes

Hi,

One more observation, in soap-ui's response payload, there is no header present.

As per wsdl too, your response payload should be like below, please ask 3rd part team for this.

<soap:Envelope
	xmlns:a="http://www.w3.org/2005/08/addressing"
	xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header>
		<a:Action s:mustUnderstand="1">http://tempuri.org/DeviceCategoryInput</a:Action>
	</soap:Header>
	<soap:Body>
		<ns2:DeviceCategoryInputResponse
			xmlns:ns2="http://tempuri.org/">
			<out>S</out>
		</ns2:DeviceCategoryInputResponse>
	</soap:Body>
</soap:Envelope>

At our side too, when my service works with soap-action, it returns that info in header of soap-response.