XI to XI Communication : SOAP Header behavior
Hi Techeis,
I have a scenario XI(A) to XI(B) communication..
I use Receiver XI adapter using HTTP Destination to transfer the payload from IE of A to IE of B. However i see strange behaviour as mentioned below;
in A --> in the SOAP header o/b message interface is A_OUT & i/b message interface is A_IN
when the paylaod reaches XI(B)
in B --> in the SOAP header o/b message interface is A_IN & i/b message interface is A_IN
i.e. in the target XI server, in the SOAP header o/b message interface is always same as the i/b message interface in source XI server !!
why is that behavior , does anybody have idea on this?
Hi Stefan,
Thanks for your inputs. If that is the case then please help me get answerd for the following queries:
1) Why we need to make the o/b MI in B same as i/b MI in A while creating Receiver Determination again in B ?
2) why it loses the information of another MI ? why does it not carry the information of both MI to the B-XI system?
3) Does that mean, in SXMB_MONI, the SOAP header that we see is only for the display purpose and does not reflect the actually nformation carried ?
Thanks in advance!
Similar Messages
-
How can I get SessionID from SOAP Header in MessageMapping
Hello experts,
I've got a Abap Proxy --> PI --> WebService scenario. I do the call to the web service and it returns me the data and a SessionID in the SOAP header. I've got a message mapping for the response, and in this message mapping I need to get this sessionID because I have to use it later.
I have tried with a UDF with this code:
String headerField = "";
try
String key="SessionID";
java.util.Map map;
// get runtime constant map
map = container.getTransformationParameters();
// get value of header field by using variable key
headerField = (String) map.get(key);
catch(Exception e){}
if(headerField==null)
headerField = "";
return headerField;
But it returns me nothing.
In sxmb_moni I can see the sessionID (see attached file), so It should be possible to access it.
How can I do to get this data????
Many thanks.Thanks Indrajit.
I have found a solution. I have to use the option: Do Not Use SOAP Envelope in my communication channel.
But as I am using web services I have to create the SOAP Envelope in my mapping (in request and in response).
I have created 2 xslt mapping files: one for request and one for response. The xslt mapping for the request it is placed in second position in my operation mapping. This xslt maping just move the fields and add the soap envelope (header and body, and inside the body places the data from 1st mapping).
The response xslt mapping it is placed directly in my operation mapping (in response area). It transforms the SOAP response into my Message Type.
Here you can find my xslt for request (sessionID, in0, in1 and in2 are fields from my source message type):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<SOAP:Envelope xmlns:SOAP="http://www.w3.org/2003/05/soap-envelope">
<SOAP:Header>
<ses:sessionIDHeader xmlns:ses="http://xml.apache.org/axis/session">
<sessionID><xsl:value-of select="*/sessionID"/></sessionID>
</ses:sessionIDHeader>
</SOAP:Header>
<SOAP:Body>
<ser:invokeService xmlns:ser="http://www.w3.org/2003/05/soap-envelope">
<in0><xsl:value-of select="*/in0"/></in0>
<in1><xsl:value-of select="*/in1"/></in1>
<in2><xsl:value-of select="*/in2"/></in2>
</ser:invokeService>
</SOAP:Body>
</SOAP:Envelope>
</xsl:template>
</xsl:stylesheet>
Here is xslt for response (invokeServiceReturn,sessionIDare fields from my target message type):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<ns1:MT_invokeServiceResponse xmlns:ns1="http://saras.com/pi/creditoycaucion">
<invokeServiceReturn><xsl:value-of select="/*/*/*/invokeServiceReturn"/></invokeServiceReturn>
<sessionID><xsl:value-of select="*/*/*/sessionID"/></sessionID>
</ns1:MT_invokeServiceResponse>
</xsl:template>
</xsl:stylesheet>
Kind Regards. -
SOAP Header in SOAP Receiver adapter
Hi All,
I am doing a Proxy to Webservice scenario where webservice requires the SOAP request as below.
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<mh:CustomHeader xmlns:mh="http://schemas.test.com/customHeader">
<mh:MessageData>
<mh:MessageId>12345</mh:MessageId>
<mh:Timestamp>2004-06-09T14:41:44Z</mh:Timestamp>
</mh:MessageData>
</mh:CustomHeader>
<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/04/secext">
<wsse:UsernameToken>
<wsse:Username>test</wsse:Username>
<wsse:Password>test123</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
</SOAP-ENV:Body>
Need your help to understand how can we achieve this using Standard SOAP adapter to customize the Header part as it requires to include "<mh:CustomHeader " & "UsernameToken".
Or Do i need to go for adapter module development to create this SOAP request.
Please provide your suggestion to achieve this scenario.
Thanks & regards
Ashwin
Edited by: ashwin dhakne on May 17, 2010 5:32 PMHi all,
Created a below target payload in a message mapping with SOAP Header & Body part as per the requirement.
In SOAP receiver communication channel, checked the option " Do Not Use SOAP Envelope".
But while executing an sceanrio, i am facing an error in SOAP receiver channel as Message processing failed. Cause: com.sap.aii.af.ra.ms.api.RecoverableException: SOAP: response message contains an error XIAdapter/HTTP/ADAPTER.HTTP_EXCEPTION - HTTP 500 Internal Server Error
And if i don't check the option " Do Not Use SOAP Envelope" it gives an error as
Message processing failed. Cause: com.sap.aii.af.ra.ms.api.RecoverableException: SOAP: response message contains an error XIAdapter/PARSING/ADAPTER.SOAP_EXCEPTION - soap fault: Unable to obtain service binding,error=Payload Envelope is not a known message for TestWebserviceService.
Please provide your suggestions to handle this issue.
<?xml version="1.0" encoding="UTF-8" ?>
<ns1:Envelope xmlns:ns1="http://schemas.test.com/CustomrHeader">
<ns1:Header>
<ns1:CustomrHeader>
<ns1:MessageData>
<ns1:MessageId>Constant</ns1:MessageId>
<ns1:Timestamp>Constant</ns1:Timestamp>
</ns1:MessageData>
<ns1:Security>
<ns1:UsernameToken>
<ns1:Username>Constant</ns1:Username>
<ns1:Password>Constant</ns1:Password>
</ns1:UsernameToken>
</ns1:Security>
</ns1:CustomrHeader>
</ns1:Header>
<ns1:Body>
<ns1:Details>
<ns1:Information>
<ns1:Title>Test</ns1:JobTitle>
</ns1:Information>
<ns1:Contacts>
<ns1:Street>Test Drive</ns1:Street />
</ns1:Contacts>
</ns1:Details>
</ns1:Body>
</ns1:Envelope>
Thanks
Ashwin
Edited by: ashwin dhakne on May 18, 2010 5:47 PM
Edited by: ashwin dhakne on May 18, 2010 5:48 PM
Edited by: ashwin dhakne on May 18, 2010 5:48 PM -
Error in SXMB_MONI in SOAP Header -- Call Adapter
Hi ALL,
Got a problem with monitoring activity.
In SXMB_MONI, iam getting errors with Call Adapter section in SOAP HEADER section of the message.
The Error part shows the following error:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <!-- Call Adapter
-->
- <SAP:Error xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">
<SAP:Category>XIAdapterFramework</SAP:Category>
<SAP:Code area="MESSAGE">GENERAL</SAP:Code>
<SAP:P1 />
<SAP:P2 />
<SAP:P3 />
<SAP:P4 />
<SAP:AdditionalText>com.sap.aii.af.ra.ms.api.DeliveryException: Problem inserting 4657f861-f853-60e8-e100-00000a80314d(INBOUND) into the database: java.sql.SQLException: ORA-25153: Temporary Tablespace is Empty</SAP:AdditionalText>
<SAP:ApplicationFaultMessage namespace="" />
<SAP:Stack />
<SAP:Retry>M</SAP:Retry>
</SAP:Error>
Can anybody give me a clear picture of the exact error and what could be the diagnosis for this particular problem.
cheers,
SantoshHi Santhosh
1.Check your authorization settings in XI and R/3. Whether the user has sufficient rights to execute the Function Module etc. This is the most common reason for this error.
2.If the XI system was brought online even before the R/3 system then re-activate the communication channels from the Integration directory.
Cheers..
Vasu
<u><i><b>** Reward Points if found useful **</b></i></u> -
Hi,
I am working on Proxy to SOAP synchronous scenario. How to create SOAP header message in XSLT mapping...I am trying but no sauces becz receiver side SOAP header and Body in different message types please see below.
Header part is message type 1
<CredentialsHeader xmlns="http://reuters.com/datascopeselect/ExtractionService/v1/">
<Username>string</Username>
<Password>string</Password>
<AuthenticationToken>string</AuthenticationToken>
</CredentialsHeader>
Body part is
message type 2
<soap:Body>
<Extract xmlns="http://reuters.com/datascopeselect/ExtractionService/v1/">
<request>
<OutputFields>
<string>string</string>
<string>string</string>
</OutputFields>
</request>
</Extract>
</soap:Body>
</soap:Envelope>
But source is single.. I try ed multi mapping but synchronous scenario it will not working.
I am trying to generate both message types as single message type in XSLT mapping target side and will give service interface as dummy in ESR.
Please guide how to generate 2 message types as single message type in XSLT mapping...
Thanks,
VenkatHi Venkat,
I suggest to produce a complete SOAP message in message mapping. Import the SOAP XSD from [http://schemas.xmlsoap.org/soap/envelope/] as external definition and use it as target message in message mapping. You need at 2 mapping programs in order to produce the message. The first mapping creates header and body. In the second mapping use "Return as XML" to map the header and body nodes to the SOAP envelope.
In the SOAP receiver communication channel, you need to activate the parameter "Do Not Use SOAP Envelope", see [Configuring the Receiver SOAP Adapter|http://help.sap.com/saphelp_nw04/helpdata/en/29/5bd93f130f9215e10000000a155106/content.htm].
Regards, Martin -
How to use XHeaderName1 in SOAP header
I have a scenario in which im passing the target URL of a webservice dynamically in my mapping udf.
I have to pass the URL to the TServerLocation parameter in SOAP header. But the error i get is that the URL is too long for TServerLocation. So i have to split it and send it using XHeaderName1,XHeaderName2 and XHeaderName3.
Can anyone tell me how to do this.
i saw this blog which gives me some idea but still my scenario is not working
/people/william.li/blog/2006/04/18/dynamic-configuration-of-some-communication-channel-parameters-using-message-mapping
please HelpHi Sivasakthi Danasekaran,
URL is an environment variable I think it will take 256 charecters only. You need to split it compulsorly.
Reward points if needful.
Thanks,
RamuV -
How to get SAMl assertion from SOAP Header and propagate user context to BW
Hello to all,
we implemented this scenario:
3rdparty System to SAP PI 7.11 to SAP BW.
sync. communication via SOAP Sender adapter and Receiver XI PROXY.
We get a SAMl assertion in the SOAP Header from the 3rd-Party System.
The SAP BW System could not read the Header information.
How can we get the information of the SOAP Header in the PI System and send the usercontext via XI Proxy to the SAP BW system?
Can we read the Header information in the SOAP adapter and mapping it to another field in the payload or Headerinformation which could read in the backend system in the proxy class?
Thanks for your help and regards
MartinDear Fox,
Thanks for your reply.
Is it mandatory to have the Header elements and the message defined in the Mediator wsdl?
At present I have not defined it in the WSDL.
Thanks,
Subin -
Get data from SOAP Header in udf
Hi,
I want to get value of a SOAP header Runtime Field and use it in udf.
The field I need is <SAP:EOReferenceInbound type="TID">. I think I need to use function getTransformationParameters() but I don't know how to use it.
Can you help me to retrieve this value of SOAP Header in a mapping ?
Thank you.Check this blog: /people/william.li/blog/2009/07/30/how-to-read-soap-header-information
Make sure that your message structure is defined properly so that it even includes the header fields...otherwise it will throw an error....once you get the value in the field then transfer it as you like using the mapping.
From the above blog:
The SOAP sender communication channel gives us an option to send the complete SOAP XML, including the header. Then, we just
need to construct a message type in the Enterprise Service Repository (ESR) or Integration Repository (IR) to represent the XML.
With that, message mapping can be performed.
Regards,
Abhishek. -
SOAP Header modification.
Hello All,
Please help me. I am trying to use the following scenario RFC to XI and SOAP to post the message.
I am getting all the info I need in RFC, but the problem is I have to modify the Header fields. The SOAP system is expecting custom parameters in Header and Body (envelope). I know we can do this using Do not use SOAP envelope in communication channel check box. My problem is how can I map for header and as well as body.
Please help me as soon as possible.
Thank you very much and have a nice day.Hi,
Check out this threads
Re: XI30 SPS16 - SOAP Sender Adapter - self-defined SOAP-Header
SOAP Adapter: DO not use soap envelope
Thanks,
Prakash -
Accessing SOAP header information in a custom adaptor module
Hi Guys,
Could anyone point me in the direction of information on how to access the SOAP:Header element when writing a custom adaptor module for a http/ SOAP communication channel?
I'm trying to add some WS-Security stuff which isn't available in XI 3.0.
Many thanks,
JohnThe solution is as follows:
Mark as Do Not Use SOAPEnvelope in the communication channel.
It may be possible to use the SAP implementation of MessageFactory, SOAPEnvelope etc., I forced XI the Apache Axis implementation, a thread on which can be found here Link: [Accessing SOAP header information in a custom adaptor module;
The SOAP Envelope is created by
javax.xml.soap.MessageFactory mf= org.apache.axis.soap.MessageFactoryImpl.newInstance();
This doesn't work it creates a com.sap.engine.services.webservices.jaxm.soap.SOAPMessageImpl
org.apache.axis.message.SOAPEnvelope env = new org.apache.axis.message.SOAPEnvelope();
org.apache.axis.Message iSoapMessage = new org.apache.axis.Message(env);
SOAPMessage sm = iSoapMessage;
SOAPBody iBody = se.getBody();
if(iBody!=null)
iBody.addDocument(iDoc);
addDocument failed for some reason when called in XI returning
Exception caught by adapter framework: Exception in method process.
The code below is copied straight from the addDocument method, but it works.
org.w3c.dom.Element iDocRoot= iDoc.getDocumentElement();
org.apache.axis.message.SOAPBodyElement bodyElement = new org.apache.axis.message.SOAPBodyElement(iDocRoot);
iBody.addChildElement(bodyElement);
In order to get a document representation of the Envelope you can use
Document iEnvelopeDoc = ((org.apache.axis.message.SOAPEnvelope)env).getAsDocument();
You are now in a position to add or adjust the SOAP Envelope as your require. It enabled me to add WS-Security information to a message.
It is normally possible to use javax.xml.transform.Transformer on the various classes SOAPEnvelope, SOAPBody etc. as they implement Node. However doing this in XI caused a crash.
The final document can be then be set in the xmlPayload before being sent out the door.
Hope this helps someone,
John -
Adding values to XI Soap Header
Hi All,
We have scenario, Soap to RFC. We are generating the wsdl for the ICO. We want the end system to send some values in the soap header(XI Soap header). We have used the keep header in the sender soap communication channel and added the value to the variable binding. When we generate the wsdl, there is no header in wsdl. We can only get the body.
Kindly let us know if what we are doing is correct.
Also please let us know how it can be done.Hi,
We want the end system to send some values in the soap header(XI Soap header). We have used the keep header in the sender soap communication channel and added the value to the variable binding. When we generate the wsdl, there is no header in wsdl. We can only get the body.
Checking the Keep Header option will only include the XI header as part of the response message. It will not be included in the request message. The variable binding allows you to place three variable headers (HTTP Headers) that you can use in dynamic config, it will not populate the SOAP Header at all.
If there is information in the SOAP Header that you need, you might as well run it in noSOAP mode by checking Do Not Use SOAP Envelope in your sender CC.
Regards,
Mark -
XI APIs to access SOAP Header Tags
Hi Forum,
The way we use DynamicConfiguration class from com.sap.aii.mapping.api.* API, to access file names etc,
is there classes available for accessing other tags in the SOAP Header, for example ReliableMessaging, PerformanceHeader, etcU can look into Adapter Specific attributes for soap adapter also. If you want to transfer header fields, set the relevant indicator for Variable Header in the SOAP communication channel. This is generic for header fields. Not sure about the particual fields
Regards,
Prateek -
Jdev web service and SOAP header
Hello,
How can I implement a web service in jdev that extracts some elements from the SOAP header ?
How can I implement a web service proxy in jdev so that it inserts elements in SOAP header?
Thank you.
The operation WSDL looks approx like this:
<operation name="SoapDDXML">
<soap:operation soapAction="someaction"/>
<input>
<soap:body
use="encoded"
namespace="ns"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
parts="psXML"/>
</input>
<output>
<soap:Header>
<OurCredentials xmlns="ns">
<UserName>string</UserName>
<Password>string</Password>
</OurCredentials>
</soap:Header>
<soap:body
use="encoded"
namespace="ns"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
parts="Result"/>
</output>
</operation>Hello,
When using OracleAS/JDeveloper 10.1.3.x you are creating Web Service using the standard JAX-RPC API. This API uses the SOAP with Attachments API for Java (SAAJ) to manipulate SOAP messages.
When dealing with SOAP Header, it is common usage to use the notion of "handler" to set/read header from the messages.
The chapter "Using JAX-RPC Handler" is a good point to start to see how do deal with this requirement,
When manipulating the header in the handler, the code will look like:
SOAPHeader header = message.getSOAPHeader();
Name headerName = soapFactory.createName("OurCredentials", "ns", "http://schemas.xmlsoap.org/soap/encoding/");
.. // add sub element
SOAPHeaderElement headerElement = header.addHeaderElement(headerName);also..
Could you specify the version of JDeveloper and the type of Web Service that you are using when ascking a question on the forum it help community member to provide a better answer.
Regards
Tugdual Grall -
Archiving of Soap header part for a synchronous interfaces
We have a requirement where we have to retain the soap header details for a longer period for tracking purpose. So is there any option of archiving only soap header part from the message for a synchronous interface.
More Information about the requirement:
1. We will be passing some parameters to the XI Soap header.
2. In the WSDL we will add the header fields, so that the end system can populate them.This is done for tracking and searching the message, end to end.
3. Another thing to note, is that, for synchronous messages the payload will not be available (without enabling logging), Can we search the messages using the values in the header?
4. The above process is done, keeping in mind that when the messages are archived, the XI soap header will be the only thing that will be archived and not the whole payload, and the messages that are archived can be searched or retrieved based on the values in the XI Soap header.
Regards
NityaHi,
Glad to hear that you solve this issue, thanks for your sharing.
Thanks,
Linda Li
Linda Li
TechNet Community Support -
SOAP header information [continued]
Dear,
It all started here Get SOAP header information
The fact is that I get the WSDL delivered and I need to upload that into the ESR.
Next step is to create/generate a Service Interface.
What I see in the WSDL binding
After I generated a Service Interface
Where is my SOAP header part? It seems to be gone in the Service interface?
I tried this for both SOAP 1.1 and 1.2. Both the same phenomenon.
Any suggestions?
Thanks a lot
Kind regards, DimitriHello Dimitri,
Have you got any solution of the issue ?
I think William's blog answer's that :
http://scn.sap.com/community/pi-and-soa-middleware/blog/2009/07/30/how-to-read-soap-header-information
However, It suggests to modify XML structure for sender interface as well. By doing so , it gives other challenge as described below :
If we modify the message structure , it changes the WSDL as well and generating request message something like below :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:aif="urn://transport.nsw.gov.au/test/poc/aif">
<soapenv:Header/>
<soapenv:Body>
<aif:Envelope> <------- Added by Modifying the structure
<Header>
<FileType>?</FileType>
</Header>
<Body>
<BusinessPartner>
<!--Optional:-->
How can we use "Do not use SOAP Envelop" feature without modifying the WSDL structure?
If we don't modify the message structure , it is failing to identify the receiver and also we would not be able to see the fields while doing graphical mapping.
Let me know if you got any other alternative.
Thanks & Regards,
Dijesh Tanna
Maybe you are looking for
-
Photo image morphs into folder!
When i drag and drop a individual foto image from an album in iPhoto to another album in iPhoto, it turns into a whole new album instead remaining an individual image file. It worked fine until the last few days. Que paso?!
-
Wanted particular line item to be billed directly after delivery
I came across a situation where my client wants particular line item to be billed after delivery. Say, there are other line items too which are delivered. How to configure this in system?
-
How to Open a Our System's Connection For access by SAP AG
Dear Sir/Madam, For our sap system access by SAP AG, I need to OPEN my SYSTEM and to provide LOGON DATA to SAP AG. Would any one help me HOW TO OPEN MY SYSTEM for SAP AG ACCESS and by LOGON DATA, what they mean. Our SAP system is ECC5.0 Product Versi
-
Use Oracle Wallet to store repository (Registry/SS/EAS) credentials?
I'm running EPM 11.1.2.2 on AIX, Oracle repository, already installed and configured. The security team would prefer to have the repository credentials stored in an Oracle wallet as a matter of policy. I believe, from my limited research, that a JDB
-
Virus warning when upgrading to Abode Reader 10?
So I get a notice that I should update my Reader to version 10 for some "enhanced" features, and at 50% receive this little notification from my AV: [email protected] Why?