cancel
Showing results for 
Search instead for 
Did you mean: 

change element in soap header

Former Member
0 Kudos

hello,

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

- <!-- Call Adapter

-->

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

- <SOAP:Header>

- <SAP:Main xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://www.docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" versionMajor="003" versionMinor="000" SOAP:mustUnderstand="1" wsu:Id="wsuid-main-92ABE13F5C59AB7FE10000000A1551F7">

<SAP:MessageClass>ApplicationMessage</SAP:MessageClass>

<SAP:ProcessingMode>synchronous</SAP:ProcessingMode>

<SAP:MessageId>79630070-BC27-11DC-BD4F-0017A4106568</SAP:MessageId>

<SAP:TimeSent>2008-01-06T07:17:46Z</SAP:TimeSent>

i sent the message in HTTPS,

the problem is the target system can't get SOAP:mustUnderstand="1", the target system can get only SOAP:mustUnderstand="0"

how can i change SOAP:mustUnderstand="1" to SOAP:mustUnderstand="0"

thanks,

Shelly

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi,

you could use the below alternative solution also as some Web services do not accept the message , if Content type is application/XML in the HTTP Header, it will accept only Text/XML. So While calling the Web service, the content has to be changed, This is possible using Module of the adapter as shown in the screen shot.

HTTP Header field values before using the module

User-Agent: SAP-Messaging-com.sap.aii.messaging/1.0505

content-id: payload-45A352A90948582CE1000000CDEFD4B7@sap.com

content-type: application/xml

Content-Length: 1280

Module name - localejbs/AF_Modules/MessageTranspormationBean

Type - Local Enterprise Bean Module - This is defined by the user, but the same name should be given in the module configuration for passing the parameters. In this case “transform” In the module configuration ,

Module key - In this case “transform”

Parameter name - Transform.ContenType

Parameter Value - text/xml;charset=utf-8

Here you could use the required parameters and pass the values....:-))

Thanks

Swarup

Answers (3)

Answers (3)

Former Member
0 Kudos

Hello,

My propousal is as follows:

Go to the involved comunication channel on the integration Builder and Select the option:

"Do not use SOAP Envelope"

Then create your own XSLT mapping program as bellow:

-


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

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

<!-- Call Adapter

-->

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

<SOAP:Header>

<SAP:Main xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://www.docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" versionMajor="003" versionMinor="000" SOAP:MUSTUNDERSTAND="0" wsu:Id="wsuid-main-92ABE13F5C59AB7FE10000000A1551F7">

<SAP:MessageClass>ApplicationMessage</SAP:MessageClass>

<SAP:ProcessingMode>synchronous</SAP:ProcessingMode>

<SAP:MessageId>79630070-BC27-11DC-BD4F-0017A4106568</SAP:MessageId>

<SAP:TimeSent>2008-01-06T07:17:46Z</SAP:TimeSent>

<SPECIFICMAPPINGPROGRAM/>

</SAP:Main>

</SOAP:Header>

</SOAP:Envelope>

</xsl:stylesheet>

-


Import the archive and select it in the Interface Mapping.

Good luck!!

Former Member
0 Kudos

thanks but i can't select "Do not use SOAP Envelope"

because i have old XI version.. i have just the following option in the communication channel:

1. keep header

2. keep attachment

3. use encoded headers

4. use query string

joan_ayala
Participant
0 Kudos

Hi Shelly,

do you remember how you solved this issue ?

I am trying to do the same: change value 1 for 0, but I am not using PI.

I am using a Webservice created in the ABAP core from an external WSDL.

Joan

ravi_raman2
Active Contributor
0 Kudos

Shelly,

The issue is not to just change the soap header...it will fail elsewhere..

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 must fail when processing the Header.

That being said means that the reciever ..doesent understand...the message...

Hope that helps

Regards

Ravi Raman

While(pointsAreAssigned ==true){

boolean getAReply = true;

}

else{

System.exit(0);

}

Former Member
0 Kudos

thanks,

we checked the issue and if the parameter changed from mustUnderstand="1" to mustUnderstand="0" the interface is working fine.

but i don't know how to change it.

someone know any way to do that???

please help me

Former Member
0 Kudos

thanks

but it's not solve my problem

i need to change the SOAP:mustUnderstand element

in the soap header .

the interface is from SAP to HTTPS Web service.

the change should be :

SOAP:mustUnderstand="1" to SOAP:mustUnderstand="0"

bhavesh_kantilal
Active Contributor
0 Kudos

I don't have the answer to your question, but please do let us know if you get successful in setting / changing this parameter.

Regards

Bhavesh