cancel
Showing results for 
Search instead for 
Did you mean: 

Modify Soap header/envelope values

Former Member
0 Kudos

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

Accepted Solutions (1)

Accepted Solutions (1)

markangelo_dihiansan
Active Contributor
0 Kudos

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

Former Member
0 Kudos

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

markangelo_dihiansan
Active Contributor
0 Kudos

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

Former Member
0 Kudos

Hi Mark

Thanks for blog..I was looking for that..I will try this and let you know how this goes..

Former Member
0 Kudos

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.

http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/802f8d03-9282-2d10-52b4-f9446e077...

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

Answers (0)