Access soap header
Hey there,
is there a way to read out the custom header elements of the invoking soap message in a process? E.g. a client creates a soap message, adds optional information to the header and sends it to the bpel server. In order to react on that information, the process needs to access these data.
Thanks!
Another example to look at for this is the Sabre HotelShopFlow (Iâll see if I can send you this sample - please email me). All the interesting work is done in the WSDL for the service. If the WSDL for the service defines a multi-part input message, where some parts are mapped to the SOAP header and some to the soap body, then you are in good shape and can set those parts in BPEL like any other input message data. From the enterprise.wsdl in salesforce demo:
<operation name="describeSObject">
<soap:operation soapAction=""/>
<input>
<soap:header use="literal" message="tns:Header" part="SessionHeader"/>
<soap:body parts="parameters" use="literal"/>
</input>
And then from the BPEL code, the SessionHeader is set with:
<copy>
<from variable="loginResponse" part="parameters" query="/salesforce:loginResponse/salesforce:result/salesforce:sessionId">
</from>
<to variable="headerRequest" part="SessionHeader" query="/salesforce:SessionHeader/salesforce:sessionId"/>
</copy>
Note that if the WSDL does not define the header data as a messageType, then you will need to create your own local copy of the WSDL for the service and edit it to be what you want.
(taken from one of the devloper responses to this question already available). Please let me know if you can move forward with this response.
Similar Messages
-
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 -
Could not access SOAP header - sending sopa message using weblogic
i am using saaj to send a SOAP message ,through weblogic, i am getting an error like below
Could not access SOAP header
what should i do for sending a soap message using weblogicYou're going to have to provide many more details than that. If it's useful, you could go here and read all the documentation books covering web services.
-
Soap Sender Adapter Preserve And Access Soap Header
Hi,
I would like to preserve the Soap Header created by a client and access it in a mapping using the the Soap Sender Adapter (SP16). Does anybody know how to do this?
Kind regards,
HeikoHello Udo,
I have found a solution to this problem. It is possible to add header entries to the DynamicConfiguration which is available by an API:
soapMsg.append("<SOAP-ENV:Header>");
soapMsg.append("<SAP:DynamicConfiguration xmlns:SAP=\"http://sap.com/xi/XI/Message/30\" xmlns:SOAP=\"http://schemas.xmlsoap.org/soap/envelope/\" SOAP:mustUnderstand=\"1\">");
soapMsg.append("<SAP:Record namespace=\"http://sap.com/xi/XI/System/SOAP\" name=\"SRmsUser\">test</SAP:Record>");
This code snip shows Java client code to add an element to the SOAP header which corresponds to the DynamicConfiguration. In XI it will be accessable using the respective API.
Cheers,
Heiko -
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 -
Accessing Soap header in webservices
Hi,
My webservice needs to read a soap header "locale" and do some processing based on this soap header.
I understand the concept of handlers..but anywhere I see examples, the handler handles it and returns the data back.
My requirement is that once this locale is retrieved, each of the webservice method should be able to read this locale, and do some processing based on that, as they need to return the localized data.
I am not sure if I am missing something, but not yet able to find a direct way of doing it..
Any response would be highly appreciated..
Thanksuser10455639 wrote:
Yes I can..what I still dont understand from yourr email is why are you askign this..
"if you can get the soap header"
Because any header we should be able to retrieve from this context...Because I saw the following statement from [JavaDoc | http://e-docs.bea.com/wls/docs103/javadocs/weblogic/wsee/jws/JwsContext.html#getInputHeaders()].
<<<<<<<<<<
....The SOAP headers used by WebLogic Workshop to manage conversations are included in the list of headers returned.
<<<<<<<<<<
If it works, then just use it :) because it is public supported
Edited by: LJ on Apr 23, 2009 10:04 PM
Edited by: LJ on Apr 23, 2009 10:21 PM -
Access SOAP:Header section
Hello,
I need to call a WebService with some extensions in the SOAP:Header. I don't find a solution without a custom develop Adaptermodul which renders the whole SOAP request and uses the SOAP Adapter without the SOAP functions.
What do you think ?
Regards,
GeraldHi,
We have the same problem with SP14.
Looks like the soap adapter can't handle soap headers correctly.
A workaround may be to use the http adapter instead and generate the xml envelope messages for request and parsing the response. We have tried this for document based soap and it works.
Obbviously you would like to have the soap adapter fixed so it can support soap headers.
Best regards otto -
How to access SOAP header without using SOAP message handler
I have a requirement to retrieve SOAP header information within each web services operation. So I can't use SOAP message handler. Is there any way to do that? BTW, I am not using workshop.
Thanks.Howeve how can I put data into soap header in UDF? DynamicConfiguration won't work for soap header, right?
Which data do you want ot put into the Header section.
ASMA or Dynamic Configuration is used to read/ put the details from/ into the header elements.....
Refer: http://help.sap.com/saphelp_nw04/helpdata/en/43/0a7d1be4e622f3e10000000a1553f7/frameset.htm
From the help section:
This information is not located in the payload of the message, but in additional message header fields.
Regards,
Abhishek. -
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>Also facing the same problem - has anyone found an answer?
Thanks, -
Access to SOAP Header/SOAP Envelope in OSB
We have a need where we need to copy the SOAP header request to SOAP header response. Is there a way to access SOAP Header/SOAP Env in OSB ?
Thanks,
Pavan
Edited by: user10413378 on Mar 6, 2010 7:14 AMThere is $header variable with headers:
http://download.oracle.com/docs/cd/E13159_01/osb/docs10gr3/userguide/modelingmessageflow.html#wp1093911
You can pass all headers through using "Get All Headers" option in Proxy settings and Transport Headers - Pass all Headers in your flow:
http://download.oracle.com/docs/cd/E13159_01/osb/docs10gr3/userguide/modelingmessageflow.html#wp1125345 -
Hi Experts,
My scenario is to access the HEADER element in the incoming SOAP Header and use it as a condition for Receiver determination.
Can somebody give example of
1) XSLT / java code which can be used to access SOAP Header elements.
2) How use this to determine the receiver.Hi,
You can achieve this by setting the Adapter-Specific Message Attributes under advanced tab in your CC.
check below link for the same..
http://help.sap.com/saphelp_nw70ehp1/helpdata/en/fc/5ad93f130f9215e10000000a155106/content.htm
Regards,
Sarvesh -
How do I access the DCJMS* variables in my response SOAP:Header ?
Hi all,
I have set up a sync / async Integration Process in XI
This is initiated by a SAP R/3 transaction that calls a synchronous function to enter XI
Once in the Bridge, a JMS receiver adapter sends out an asynchronous request message from XI to MQ
A correlation allows the JMS sender adapter to return an asynchronous response message from MQ to XI back into my the Integration Process
I have set up the JMS sender adapter configuration to return the DC (dynamic configuration) variables in the <SOAP:Header> of the XI response message along with the payload
You can see that the DCJMS* variables are returned below
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <!--
Response
-->
- <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:ReliableMessaging xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">
+ <SAP:HopList xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">
+ <SAP:RunTime xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
+ <SAP:PerformanceHeader xmlns:SAP="http://sap.com/xi/XI/Message/30">
- <SAP:DynamicConfiguration xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">
<SAP:Record namespace="http://sap.com/xi/XI/System/JMS" name="DCJMSCorreleationID">40D982A0-B19D-11DB-9508-0002A5D5916B</SAP:Record>
<SAP:Record namespace="http://sap.com/xi/XI/System/JMS" name="DCJMSTimestamp">1170297456940</SAP:Record>
<SAP:Record namespace="http://sap.com/xi/XI/System/JMS" name="DCJMSMessageID">ID:414d5120514d4430312020202020202045c12b962001dd02</SAP:Record>
</SAP:DynamicConfiguration>
- <SAP:Diagnostic xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">
<SAP:TraceLevel>Information
<b>Question</b>
I want to access the DCJMS* variables but am not sure how to go about it as the
variables exist in the <SOAP:Header>?
I followed the SAP documentation to access adapter-specific attributes (refer to link http://help.sap.com/saphelp_nw04/helpdata/en/14/80243b4a66ae0ce10000000a11402f/frameset.htm )
I have used the following code to create a user-defined function for the accessing adapter specific attributes (similar to the link)
public String Get_Msgid(Container container){
DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get
(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
DynamicConfigurationKey key = DynamicConfigurationKey.create
("http://sap.com/xi/XI/System/JMS","DCJMSMessageID");
String jmsMsgID = conf.get(key);
return jmsMsgID;
<b>Question</b>
Do I use message mapping to extract the DCJMS* variables?
<b>Question</b>
If so then which message is used for the source message so that I can access the <SOAP:Header>? Eg do I use the response message type or is there a trick to accessing the SOAP:Header?
<b>Question</b>
Do I use the user-defined function (like above)?
I performed the following steps
Opened the message mapping in edit mode
Created the user-defined function using the graphical editor
Saved the message mapping
I have not connected the user-defined function to any of the xml tags in either the source or target messages
When I go to test the message mapping I am getting the following error
Compilation process error : CreateProcess: null\bin\javac -J-Xmx256m @E:/usr/sap/XID/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapd79a7bf0b65611dbaf390002a5d5916b/O1170817003886.txt @E:/usr/sap/XID/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapd79a7bf0b65611dbaf390002a5d5916b/S1170817003886.txt error=2
STACKTRACE:
com.sap.aii.ib.core.mapping.exec.ExecuteException: Compilation process error : CreateProcess: null\bin\javac -J-Xmx256m @E:/usr/sap/XID/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapd79a7bf0b65611dbaf390002a5d5916b/O1170817003886.txt @E:/usr/sap/XID/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapd79a7bf0b65611dbaf390002a5d5916b/S1170817003886.txt error=2
at com.sap.aii.ib.server.mapping.exec.ServiceUtil.compileSourceCode(ServiceUtil.java:207)
at com.sap.aii.ib.server.mapping.exec.ServiceUtil.compile(ServiceUtil.java:156)
at com.sap.aii.ibrep.server.mapping.ServerMapService.compileSourceCode(ServerMapService.java:361)
at com.sap.aii.ibrep.server.mapping.ServerMapService.compileSourceCodeWithoutAndWithArchives(ServerMapService.java:301)
at com.sap.aii.ibrep.server.mapping.ServerMapService.execute(ServerMapService.java:153)
at com.sap.aii.ibrep.sbeans.mapping.MapServiceBean.execute(MapServiceBean.java:52)
at com.sap.aii.ibrep.sbeans.mapping.MapServiceRemoteObjectImpl0.execute(MapServiceRemoteObjectImpl0.java:259)
at com.sap.aii.ibrep.sbeans.mapping.MapServiceRemoteObjectImpl0p4_Skel.dispatch(MapServiceRemoteObjectImpl0p4_Skel.java:146)
at com.sap.engine.services.rmi_p4.DispatchImpl._runInternal(DispatchImpl.java:304)
at com.sap.engine.services.rmi_p4.DispatchImpl._run(DispatchImpl.java:193)
at com.sap.engine.services.rmi_p4.server.P4SessionProcessor.request(P4SessionProcessor.java:122)
at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
at java.security.AccessController.doPrivileged(Native Method)
at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)
A thread in the SDN (Error while Activating Message Mapping, Posted: Jan 9, 2007 3:32 PM) suggests checking the java path on the XI machine
This is JAVA_HOME=C:\j2sdk1.4.2_08 and seems ok
<b>Question</b>
Do you know why I would get the compilation error?
Any assistance would be appreciated
Regards,
MikeJin,
My compilation issue has gone via a SAP recommendation to specify the JDK home directory in the instance profile
Back to the mapping - I can now run my scenario
<b>Source message</b>
The response message has the following <SOAP:Header> from which I want to extract the DCJMSCorreleationID (note that it's misspelt)
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <!-- Response
-->
- <SAP:DynamicConfiguration xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">
<SAP:Record namespace="http://sap.com/xi/XI/System/JMS" name="DCJMSCorreleationID">40D982A0-B19D-11DB-9508-0002A5D5916B</SAP:Record>
<SAP:Record namespace="http://sap.com/xi/XI/System/JMS" name="DCJMSTimestamp">1170297456940</SAP:Record>
<SAP:Record namespace="http://sap.com/xi/XI/System/JMS" name="DCJMSMessageID">ID:414d5120514d4430312020202020202045c12b962001dd02</SAP:Record>
</SAP:DynamicConfiguration>
<b>Grahpical mapping</b>
LHS - Response message with occurrance 0..1 so it is not connected to my UDF
UDF Get_Corrid with no inputs
RHS - The UDF output is connected to the Acknowledgement msg tag <ACK>
<b>UDF</b>
DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get
(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
DynamicConfigurationKey key = DynamicConfigurationKey.create
("http://sap.com/xi/XI/System/JMS","DCJMSCorreleationID");
String Corrid = conf.get(key);
return Corrid;
<b>Target message</b>
The idea is to copy the correlation id of the response message into the acknowledgement message. But as you can see the result is NULL
<?xml version="1.0" encoding="utf-8" ?>
- <ns2:AWB0020_MARKET_DATA_RESPONSE_ACK xmlns:ns2="http://awb.com.au/mq/tx/MarketData">
<ACK>null</ACK>
</ns2:AWB0020_MARKET_DATA_RESPONSE_ACK>
Please advise
Thanks Mike -
Accessing XI SOAP Header in Mapping
We want to access the SOAP envelope information in the XI mapping. We need to query some values based on the following XPath:
/SOAP:Envelope/SOAP:Header/SAP:HopList/SAP:Hop/SAP:Engine
Is there a way to access the XI SOAP Header? Can we do this through a User defined function? Another option we have is to get the Host name through Java. But accessing the SOAP Header would probably add some more value - especially if we need to access other values.
Based on the integration server value, we need to do different mapping for certain fields. We can use Value Mapping.
Thanks,
Jay Malla
Licensed To Code
Genentech SAP XI TeamHello Jay,
Did you solved your issue? I have the same problem and don't know how to find a solution.
If you did, please contact me. My e-mail is [email protected]
Regards -
Access to SOAP header in synchronous SOAP response?
Hi,
Scenario: message received via synchronous SOAP adapter call.
In the response which is sent back to the sender i can influence the SOAP body but not the SOAP header.
Is there a possibility to manipulate/add/map the SOAP header in synchronous response messages?
Thank you very much in advance for your hints.
Greetings
MichaelHi Christophe,
per default PI is sending back something like this
<SOAP:Envelope xmlns:SOAP='http://schemas.xmlsoap.org/soap/envelope/'>
<SOAP:Header/>
<SOAP:Body>
Payload, which can be accessed via mapping
</SOAP:Body>
</SOAP:Envelope>
but required are some fields in the Header tag like:
<SOAP:Envelope xmlns:SOAP='http://schemas.xmlsoap.org/soap/envelope/'>
<SOAP:Header>
<SOAP:ABC>date</SOAP:ABC>
</SOAP:Header>
<SOAP:Body>
Payload, which can be accessed via mapping
</SOAP:Body>
</SOAP:Envelope>
Greetings
Michael -
Java Web Service Access SOP Header and SOAP Body
Hi
I am newbie to Web Service. I had a Java class and I converted it to Web Service(LoginWebService has methods login, register).
Now my client is accessing my web services and calling methods login and register.
Now I want to add few values in SOAP header in client side.
My Questions:
1. How can I access the SOAP headers and SOAP Body in my Server Web Service method implementations?
2. Is there any API that I have to use?
3. Does anyone have any sample code for these things?
ThanksSeems like the exception handling logic is not sound - but your posting is difficult to read. Please use the *\* tag to mark and end source code snippets.
Have a look at the sample code in {message:id=4205205} - does a SOAP call using PL/SQL only.
Maybe you are looking for
-
IPod Software Update Server can not be contacted
I have a vintage iPod Mini that I am attempting to Restore on a iMac PPC with iTunes 9. When I select the Restore button in iTunes, a dialog box appears stating that the iPod Update Server can not be contacted. Resolutions from the iTunes Help rela
-
Is there a tx to view class corresponds to a BOL object and vice versa???
Hello experts, is there any transaction or place where I can find the object BOL that corresponds to a CLASS and vice versa, For example for object ISUORDERITEM, where I can find this?? Thanks in advance
-
"Include control entries"-Function
Hello, i found a SAP-article about a problem im trying to solve - to add a new field to the coding-block (account assignment). The url is: http://help.sap.com/saphelp_40b/helpdata/es/ba/e92c7dd435d1118b3f0060b03ca329/content.htm Now they write: <i>"U
-
Does anyone know how to install an SSL certificate on 10.3 Server?
Can't find this in the documentation.
-
Signal Extraction & Making time delayed copy
I am considering there are three signals in my environment but I am interested in getting the signal having frequency 4 KHz.I am adding a Band Pass filter to extract that particular tone and making a delayed copy.Unfortunately I am not getting the o