on 11-05-2012 6:27 PM
Hi
We have a SOA based synchronous scenario from ECC to PI 7.11 to WSDL service. We are having issues trying to push data from ECC to WSDL service. Whenever we push data from ECC via PI, the receiver PI SOAP channel has the following error
XIAdapter/PARSING/ADAPTER.SOAP_EXCEPTION - soap fault: Must Understand check failed for header http://sap.com/xi/XI/Message/30 : ReliableMessaging
When we test the WSDL using SOAP UI as well, we get the same error. But in SOAP UI, when we modify mustUnderstand="0" instead of 1, the scenario works. Our company believes everything with PI is working good but the third party is not willing to make modifications to their WSDL to make the scenario work.
So we are planning to make the modifications in SAP PI itself. Can any one please let me know how to modify mustUnderstand to 0 instead of 1 in the following
<SAP:Main versionMajor="003" versionMinor="000" SOAP:mustUnderstand="1" wsu:Id="wsuid-main-92ABE13F5C59AB7FE10000000A1551F7" xmlns:SAP="http://sap.com/xi/XI/Message/30"
xmlns:wsu="http://www.docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<SAP:MessageClass>ApplicationMessage</SAP:MessageClass>
<SAP:ProcessingMode>synchronous</SAP:ProcessingMode>
<SAP:MessageId>99E7B830-FD99-11E1-99F1-E41F1350922B</SAP:MessageId>
<SAP:TimeSent>2012-09-13T11:53:15Z</SAP:TimeSent>
<SAP:Sender>
<SAP:Service>BS_Sender</SAP:Service>
</SAP:Sender>
<SAP:Interface namespace="http://somecompany.com">ServiceInterface</SAP:Interface>
</SAP:Main>
<SAP:ReliableMessaging SOAP:mustUnderstand="1" xmlns:SAP="http://sap.com/xi/XI/Message/30">
<SAP:QualityOfService>BestEffort</SAP:QualityOfService>
</SAP:ReliableMessaging>
<SAP:System SOAP:mustUnderstand="1" xmlns:SAP="http://sap.com/xi/XI/Message/30">
<SAP:Record namespace="http://www.sap.com/webas/712/soap/features/runtime/metering/" name="CallingType">SA</SAP:Record>
</SAP:System>
<SAP:HopList SOAP:mustUnderstand="1" xmlns:SAP="http://sap.com/xi/XI/Message/30">
<SAP:Hop timeStamp="2012-09-13T11:53:15Z" wasRead="false">
<SAP:Engine type="AE">af.xid.PIsystem002</SAP:Engine>
<SAP:Adapter namespace="http://sap.com/xi/XI/System">XIRA</SAP:Adapter>
<SAP:MessageId>99E7B830-FD99-11E1-99F1-E41F1350922B</SAP:MessageId>
<SAP:Info/>
</SAP:Hop>
<SAP:Hop timeStamp="2012-09-13T11:53:15Z" wasRead="false">
<SAP:Engine type="IS">is.50.SAPPI</SAP:Engine>
<SAP:Adapter namespace="http://sap.com/xi/XI/System">XI</SAP:Adapter>
<SAP:MessageId>99E7B830-FD99-11E1-99F1-E41F1350922B</SAP:MessageId>
<SAP:Info>3.0</SAP:Info>
</SAP:Hop>
</SAP:HopList>
<SAP:Diagnostic SOAP:mustUnderstand="1" xmlns:SAP="http://sap.com/xi/XI/Message/30">
<SAP:TraceLevel>Information</SAP:TraceLevel>
<SAP:Logging>On</SAP:Logging>
</SAP:Diagnostic>
Any pointers in much appreciated
Thanks
Guru
Hello,
I think this is not possible without modifying SAP standard code. Probably this could help:
1. Under the class CL_XMS_MAIN there is a static method there called SET_MESSAGE_HEADERS, double-clicking it will take you to the method code
2. Under the comment * get access to main header object there is a class called CL_XMS_MSGHDR30_MAIN, double-click this class
3. Under the interface method, IF_XMS_PROP~SETMUSTUNDERSTAND, this is where you set it.
Please do get back to us once you get this working.
Regards,
Mark
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Mark
Thanks for info..I will check this out..But if we change as per your suggestions, all PI interfaces will get this change, which we dont want. Can we restrict it to required interface.
I read some blogs/post before about doing this on Java/XSLT mapping where we can modify the SOAP envelopes but could not find them
let me know you thoughts
Hello,
Here is another alternative:
http://www.w3schools.com/soap/soap_header.asp
It says:
The mustUnderstand Attribute
The SOAP mustUnderstand attribute can be used to indicate whether a header entry is mandatory or optional for the recipient to process.
If you add mustUnderstand="1" to a child element of the Header element it indicates that the receiver processing the Header must recognize the element. If the receiver does not recognize the element it will fail when processing the Header.
So, if you set the mustUnderstand to 0 in your SOAP Header, then it is optional. Yes, this can be achievable using Java or XSLT mapping. Here is an article I wrote: http://scn.sap.com/docs/DOC-29829
Go to page 10 (SOAP 1.2 Receiver), there is a Java Code there on Page 13 for building a SOAP Envelope. In your case, you can add values in the header as well.
Hope this helps,
Mark
Guru,
You have to use the Java/XSLT to achive this.Please go through the below log and modify your SOAP envelope. The whole blog deals with soemthing else but you can use this for your requirement.
The blog also has the java/XSLT program for editing the SOAP envelope.You can use the same program of the blog and edit as per your requirement.
Regards
Veeru
User | Count |
---|---|
95 | |
11 | |
10 | |
9 | |
9 | |
7 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.