cancel
Showing results for 
Search instead for 
Did you mean: 

Problem reading SOAP request with Headers and "Do not use SOAP Envelope"

Former Member
0 Kudos

Hi there,

I have setup an integration scenario in which I receive a SOAP envelope with headers and a payload that can be of any message type. Then with XSLT I filter SOAP header and body apart from each other.The headers have to extracted and used to call an intermediate service during runtime.

I have created my own SOAP envelope (containing Header and Body) data and message types in the Integration Repository and selected the option "Do not use SOAP envelope" in the Sender SOAP Communication Channel.

However, until now I haven't manage to get the headers aout of the SOAP request using an XSLT mapping. When I check the payload in SXMB_MONI I cannot see the payload. The message enters the Integration Engine and is routed to the correct Integration Process in ccBPM but after 1 minute I get a Timeout error from the process engine...

The strange thing is that when I post the same SOAP request directly to the integration engine (using the [url] URL http://sappidev1:8021/sap/xi/engine?type=entry&version=3.0&Sender.Service=Sender&Interface=theNamesp... [url]) , I dont get any timeout and all receivers are reached. I can then see the payload without the envelope surrounding it, but again no SOAP headers detected.

Can someone provide me some ideas or tips where to further look for possible solutions for this problem? I just want to receive my SOAP headers and do whatever I need to do with them.

Many thanks!

SOAP WSDL I am using to call this service:


<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="MIOS_CANONICAL_SOAP" targetNamespace="urn:com:pi:poc:logging" xmlns:p2="http://schemas.xmlsoap.org/soap/envelope/" xmlns:p1="urn:com:pi:poc:logging" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
	<wsdl:types>
		<xsd:schema targetNamespace="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
			<xsd:element name="Body" type="Body"/>
			<xsd:element name="Header" type="Header"/>
			<xsd:element name="Envelope" type="Envelope"/>
			<xsd:complexType name="Body">
				<xsd:sequence>
					<xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
				</xsd:sequence>
				<xsd:anyAttribute namespace="##any" processContents="lax" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
					<xsd:annotation>
						<xsd:documentation>Prose in the spec does not specify that attributes are allowed on the Body element</xsd:documentation>
					</xsd:annotation>
				</xsd:anyAttribute>
			</xsd:complexType>
			<xsd:complexType name="Header">
				<xsd:sequence>
					<xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
				</xsd:sequence>
				<xsd:anyAttribute namespace="##other" processContents="lax" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
			</xsd:complexType>
			<xsd:complexType name="Envelope">
				<xsd:sequence>
					<xsd:element ref="Header" minOccurs="0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
					<xsd:element ref="Body"/>
				</xsd:sequence>
				<xsd:anyAttribute namespace="##other" processContents="lax" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
			</xsd:complexType>
		</xsd:schema>
	</wsdl:types>
	<wsdl:message name="p2.Envelope">
		<wsdl:part name="Envelope" element="p2:Envelope" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/>
	</wsdl:message>
	<wsdl:portType name="MIOS_CANONICAL_SOAP">
		<wsdl:operation name="MIOS_CANONICAL_SOAP">
			<wsdl:input message="p1:p2.Envelope"/>
			<wsdl:output message="p1:p2.Envelope"/>
		</wsdl:operation>
	</wsdl:portType>
	<wsdl:binding name="MIOS_CANONICAL_SOAPBinding" type="p1:MIOS_CANONICAL_SOAP" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
		<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
		<wsdl:operation name="MIOS_CANONICAL_SOAP">
			<soap:operation soapAction="http://sap.com/xi/WebService/soap1.1" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
			<wsdl:input>
				<soap:body use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>
	<wsdl:service name="MIOS_CANONICAL_SOAPService">
		<wsdl:port name="MIOS_CANONICAL_SOAPPort" binding="p1:MIOS_CANONICAL_SOAPBinding" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
			<soap:address location="http://sappidev1:8021/sap/xi/engine?type=entry&version=3.0&Sender.Service=Sender&Interface=theNamespace^outbound_interface" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"/>
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>

Accepted Solutions (0)

Answers (3)

Answers (3)

Former Member
0 Kudos

Hi folks,

The solution to the above stated problem;

In order to get access to the SOAP headers you have to select the option "DO not use SOAP envelope" in the SOAP comm. channel configuration + set the "nosoap=true" parameter in the request URL to SAP PI.

Thanks

Former Member
0 Kudos

Since I have defined my own SOAP envelope data type and have selected the option "Do not Use SOAP Envelope" , I would expect to see the complete SOAP envelope (Header + Body) as payload in SXMB_MONI. Now I only see the body part and the rest is not there. Please correct me If I am missing something.

Any other ideas?

Thanks/

prateek
Active Contributor
0 Kudos

+have selected the option "Do not Use SOAP Envelope" , I would expect to see the complete SOAP envelope (Header + Body) as payload in SXMB_MONI.+

When you use this option, the envelop is Not seen in XI payload. If you want to create a SOAP envelop, then do that in mapping. Creation of datatype elemens won't help in creatins actual SOAP envelop.

Regards,

Prateek

prateek
Active Contributor
0 Kudos

The strange thing is that when I post the same SOAP request directly to the integration engine

If certain things are working with this option, you should use this only. Even the wsdl you have generated was through this url only.

payload without the envelope surrounding it, but again no SOAP headers detected.

You have use "Do not use soap envelop" and you are unable to see the envelop. So what else is the problem?

Regards,

Prateek