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,
Gerald
Hi,
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
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 -
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. -
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. -
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 -
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 -
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 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 to get data from SOAP-Header/MAIN-Section?
Hi,
I need some data of the SOAP-Header-MAIN-Section, e.g. <SAP:Sender><SAP:SERVICE>
Is it possible to get these data with XSLT-Mapping or Java-Mapping? Are there blogs about it?
I need these data of the MAIN-Section inside the condition of the receiver determination.
Thank you all.
Regards
WolfgangHi,
Do you wnat to access the Sender Service details in your mapping using java or XSL mapping? this is possible.
Check this link,
http://help.sap.com/saphelp_nw04/helpdata/en/43/09b16006526e72e10000000a422035/content.htm
Or do you want to access the SOAP header itself?
Regards,
bhavesh -
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
Maybe you are looking for
-
When connecting my Macbook Air (mid 2011) to an external LG 22" Display (M2241A) which supports a native resolution of 1920x1080, the closest setting available in the display preferences is 1680x1050, and aspect ratio is really distorted at this size
-
I replaced the hard drive to a 30gig on my Ipod 4th gen. click wheel but it is still not recognized on my computer or in itunes......I get an error message with a folder and "!"....what can I do to fix??
-
My ipad says its disabled and need to connect to itunes but is says to enter password which I don't have because of my kids. How can I reset the i[pad
-
Kernel panic when connecting fiber channel
I recently inherited an Xserve RAID. I have an LSI fiberchannel card in a G4 running 10.5.5. Anyway, I updated the firmware to version 1.5 and now everytime I connect the fiber channel cable I get a Kernel panic instantly and have to force power down
-
MacBook Pro charging issue.
Hello everyone, I've been having this issue where my MacBook Pro (Mid 2010) refuses to charge. The LED on the magsafe will not show up and the computer doesn't want to take a charge. The first time this happened (2years ago) I took it to Apple, the s