SOAP Header XSLT mapping

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="">
Body part is
message type 2
    <Extract xmlns="">
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...

Hi Venkat,
I suggest to produce a complete SOAP message in message mapping. Import the SOAP XSD from [] 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|].
Regards, Martin

Similar Messages

  • SOAP Response XSLT mapping issue

    Source XML.
    <?xml version="1.0" encoding="UTF-8"?>
    <ns0:Create__CompIntfc__APC_WORKER2_CIResponse xmlns:ns0="">
    Target XML
    <?xml version="1.0" encoding="UTF-8"?>
    <ns1:Z_HPA_357_PROVISION_USER_IMS.Response xmlns:ns1="urn:sap-com:document:sap:rfc:functions"><SUCCESS>y</SUCCESS></ns1:Z_HPA_357_PROVISION_USER_IMS.Response>
    XSLT Mapping
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="" xmlns:xs="" xmlns:fn="" xmlns:ns1="">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
      <xsl:template match="/">
        <ns1:Z_HPA_357_PROVISION_USER_IMS.Response xmlns:ns1="urn:sap-com:document:sap:rfc:functions">
            <xsl:value-of select="soap:Create__CompIntfc__APC_WORKER2_CIResponse/a:notification" />
    Can somebody help to figure out the issue in higlighted area of XSLT mapping.
    We just need to move "notification" value to "SUCCESS" value of RFC.

    Hi Santosh,
    add the source namespace with a prefix:
    do it most simple generic without path
    do not forget the prefix
    use xsl:value-of:
    xsl:value-of select="//ns0:notification"

  • 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:
    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.
    Jay Malla
    Licensed To Code
    Genentech SAP XI Team

    Hello 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]

  • How to get DateTime from PI message SOAP Header

    Hi ALL
    Can you please let me know how we can get the time message received in PI from the SOAP message header
    I would like to capture this value and send it in the payload of the message, initially I was using the Current TIme date function.
    However, if I can get the time received value from the SOAP Header message, It will be more accurate in providing the Time the message was received by IE.
    Thank you,
    Sample SOAP Header from MONI:-
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    - <!--  Call Adapter
    - <SOAP:Envelope xmlns:SOAP="" xmlns:SAP="">
    - <SOAP:Header>
    - <SAP:Main xmlns:SAP="" xmlns:SOAP="" versionMajor="003" versionMinor="000" SOAP:mustUnderstand="1" wsu:Id="wsuid-main-92ABE13F5C59AB7FE10000000A1551F7">
    - <SAP:Sender>

    If you want to get the TimeSent from SOAP header and map it to some field in ur message then u can easily do it using following UDF :-
    GlobalContainer globalContainer;globalContainer = container.getGlobalContainer();
    java.util.Map param = globalContainer.getParameters();.
    String timeSent = (String) param.get (StreamTransformationConstants.TIME_SENT);
    return timeSent ;
    Note: This UDF won't need any input. So u need not to maintain any variable in UDF signature.
    Edited by: Samiullah Qureshi on Aug 18, 2010 9:41 AM

  • JAVA/ XSLT Mapping to Create a SOAP Envelope

    I have a File to SOAP scenario and it requires the SOAP message with a custom SOAP envelope. I have searched SDN and could only find that SOAP envelope can be created using a JAVA or XSLT mapping. However, I could not find any blog/ article which will help me understand, with an example, how this is actually coded (creating of a custom SOAP envelope).
    Can anyone please point me to a valid blog/ article/ wiki which describes the procedure?
    P.S. Please no spamming of post with links on SOAP Envelope; I have already searched on SDN

    Here is a wiki using PI 7.1
    If you want to create a SOAP Envelope, comment out the codes
      private static final DynamicConfigurationKey KEY_FILENAME =
    String inParam = arg0.getInputParameters().getString("PARAM_IN1");
         getTrace().addInfo("Input Parameter: " +inParam);
         int offset = inData.indexOf(inParam);
         //7. Reader Message ID from Message Header
         InputHeader messageHeader = arg0.getInputHeader();
         String messageId = messageHeader.getMessageId();
         //8. A DynamicConfiguration is a map containing adapter specific message attributes.
         // It associates DynamicConfigurationKeys with string values. The DynamicConfiguration object is obtained using
         // method getDynamicConfiguration()of class;
         DynamicConfiguration conf = arg0.getDynamicConfiguration();
         conf.put(KEY_FILENAME, "This Test file is set by JAVA Mapping");
         String outData = "";if(offset > 0){
         int offset1 = inData.indexOf(">", offset);
         String StartString =inData.substring(0,offset1);
         String DocumentNameSpace = " xmlns=\"urn:iso:std:iso:20022:tech:xsd:pain.002.001.02\"";
         String RemainingString = inData.substring(offset1);
    lastly, instead of using
    outData = StartString + DocumentNameSpace + RemainingString;
    replace it with something like this
    String outData = "";
    outData = "<soap:Envelope xmlns:soap=\"\" xmlns:tem=\"http://yournamespace/\"><soap:Header/><soap:Body>"+inData.substring(inData.indexOf("?>")+2)+"</soap:Body></soap:Envelope>";
    Hope this helps,

  • XSLT mapping with SOAP Envelope

    I'm trying map SOAP response (with Envelope) to pick two values into the target. Here's the data:
    Source (with data):
    <?xml version="1.0"?>
    <soap:Envelope xmlns:soap="" xmlns:xsi="" xmlns:xsd="">
              <EnumerateResponse xmlns="">
                   <xmlObjects>(large string of valid data in here)</xmlObjects>
    Only need Result and xmlObjects into target.
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="">
         <xsl:template match="/">
                        <xsl:value-of select="EnumerateResponse/Result"/>
                        <xsl:value-of select="EnumerateResponse/xmlObjects"/>
    The values are not getting picked-up into the target.
    What am I missing here?
    Any help is appreciated.

    Save the following XSL file as RSpace.xsl
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0"
      <xsl:output method="xml" indent="no"/>
      <xsl:template match="/|comment()|processing-instruction()">
      <xsl:template match="*">
        <xsl:element name="{local-name()}">
          <xsl:apply-templates select="@*|node()"/>
      <xsl:template match="@*">
        <xsl:attribute name="{local-name()}">
          <xsl:value-of select="."/>
    Zip it and import it under Imported Archive.
    In the interface mapping click "+" to add one more mapping.
    Use this XSL as first mapping and your XSL mapping as the second mapping.
    In your XSLT mapping you can use the XPath as
    I mean remove the namespace and use the XPATH.

  • Remove SOAP Envelop using XSLT  mapping.

    I need a code to remove SOAP Envelop using XSLT mapping.
    <?xml version="1.0" encoding="UTF-8" ?>
    <soapenv:Envelope xmlns:soapenv="" xmlns="">
    <?xml version="1.0" encoding="UTF-8" ?>
    Please help me in this

    <?xml version='1.0' ?>
    <xsl:stylesheet version="1.0" xmlns:ns0=""
                                  xmlns:xsl="" >
       <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
       <xsl:template match="/">
                   <xsl:copy-of select="SOAP-ENV:Envelope/SOAP-ENV:Body"/ />
    This will get your whole body...
    Your root node should belong to some namesapce...i.e. getServerTimestampResponse .

  • XSLT Mapping of Adapter-Specific Message Attributes

    We have the requirement to build a soap request with a custom soap envelop/header which contains a sessionId.
    Therefore we developed a xlst mapping which is called directly after a graphical mapping.
    In the graphical mapping the session id is written to the dynamic configuration.
    The goal is to read this session id in the xslt mapping from the dynamic configuration using XSLT Mapping of Adapter-Specific Message Attributes. We used  [this|] documentation as an example.
    But we are getting the following error: TransformerConfigurationException triggered while loading XSLT mapping. The error is raised at this node: <xsl:variable name="dynamic-conf" select="map:get($inputparam, 'DynamicConfiguration')" />
    This is the coding of the xslt transformation:
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0"
    <xsl:output indent="no" />
    <xsl:param name="inputparam"/>
    <xsl:template match="/">
    <soapenv:Envelope xmlns:soapenv="" xmlns:urn="">
    <xsl:variable name="dynamic-conf" select="map:get($inputparam, 'DynamicConfiguration')" />
    <xsl:variable name="dynamic-key" select="key:create('', 'sessionId')" />
    <xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
    <urn:sessionId><xsl:value-of select="$dynamic-value"></xsl:value-of></urn:sessionId>
    <xsl:copy-of select="*"/>
    Any help will be highly appreciated.
    Regards, Henk

    Hi, yes we did try that and lot's of other combination.
    The results of those trials are that it seems to go wrong with <xsl:variable name="dynamic-conf" select="map:get($inputparam, 'DynamicConfiguration')" />
    When we enclose it with <xsl:if test="function-available('map:get')"> the transformation is not dumping, but the function is not available.
    Regards, Henk

  • Creating Custom SOAP header in the Sender soap scenario

    Hello Experts,
    Currently i have a SOAP to RFC scenario . In which in the request parameter i have single input parameter. But as per the requirement we need to have some xml parameters in the soap header .
    So i want the soap request looks like below,
    <?xml version="1.0"?>
    -<SOAP-ENV:Envelope xmlns:xsd="" xmlns:xsi="" xmlns:SOAP-ENC="" xmlns:SOAP-ENV="">
    -<ns0:TestHeader xmlns:ns0="">
    <MessageRole rtype=""/>
    <SourceID idtype=""/>
    <DestinationID idtype=""/>
    <Property Name=""/>
    -<m:MT_CERT_IP xmlns:m="">
    Kindly let me know the steps, how can i achieve this ??
    I have referred the AddSOAPHeaderBean  module but still not received the needed output.
    Best Regards,

    Hi Amit,
    My few cents.
    You have an example in Dimitri Sannen's blog Read SOAP header information doing the mapping with XSLT.
    Also, you have an other example like Dev Noronha suggestion, in William Li's blog How to Read SOAP Header Information

  • XSLT Mapping: how to add one day to TimeStamp

    Hello Experts,
    My requirement is to add one day to current timestamp. Used $TimeSent to get the currenttimestamp. In Expired field, the need to add one day
    say Created= 2011-03-30T20:29:13Z
           Expired = 2011-03-31T20:29:13Z
         <xsl:param name="TimeSent"/>
         <created><xsl:value-of select="$TimeSent"/></created>
    How to add one day to the current timestamp. I am new to XSLT mapping and need some help with the code.
    Shikha Jain
    Edited by: Jain Shikha on Mar 30, 2011 8:34 PM
    Edited by: Jain Shikha on Mar 30, 2011 8:36 PM

    Hello All,
    Thanks for your reply. i tried the function and the code is working when i am testing in stylus studio. But the same code gives error when i  tested the xslt mapping in PI (Error: TransformerConfigurationException triggered while loading XSLT mapping).
    $TimeSent function is working when code is tested in PI , but it doesnot give value in stylus studio. Also Current-dateTime() function is doesnot give value in PI but works in stylus studio. Is there any difference in the functions used in stylus studio and XSLT mapping in PI?
    Also if i remove the code used for function(to add one day to timestamp), and use constant value(2011-04-02T23:24:56.763Z)the code is working fine in PI. Please help me to find out where the code is going wrong when tested in PI.
    Below is the XSLT code i am using
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="" xmlns:ds="" xmlns:functx="" xmlns:xs="">
       <xsl:function name="functx:next-day" as="xs:date?">
          <xsl:param name="TimeSent" as="xs:anyAtomicType?"/>
          <xsl:sequence select="xs:date(current-date()) + xs:dayTimeDuration(&apos;P1D&apos;) "/>
    <xsl:template match="/">
          <xsl:param name="TimeSent"/>
          <soapenv:Envelope xmlns:olsa="" xmlns:soapenv="">
                <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="">
                   <wsu:Timestamp wsu:Id="Timestamp-191900" xmlns:wsu="">
                         <xsl:value-of select="$TimeSent"/>
         <xsl:value-of select="concat(substring(functx:next-day($TimeSent) ,1,10) ,&apos;T&apos;, current-time())"/>                  </wsu:Expires>
                   <wsse:UsernameToken wsu:Id="UsernameToken-19030197" xmlns:wsu="">
                      <wsse:Password Type="">XYZ</wsse:Password>
    Shikha Jain
    Edited by: Jain Shikha on Apr 2, 2011 9:51 PM

  • XSLT Mapping Error while receiving Base64Binary content

    Dear Experts,
    I am new to SAP PI and working on PI 7.11. In our project we had a requirement to receive PDF file content in Base64 format from third party system by consuming the service provided by third party system with synchronous communication. The adapter we need to use is SOAP
    The reason to use XSLT mapping is as our third party system used some tokens in both the request and response header, I used XSLT mapping to add the required details in request header after receiving the request from ECC system and skip the details in response to send the response to ECC system.
    I have build two XSL files with XSLT mapping programs one for request and another for response using Oxygen XML editor tool. Both are checked, validated without any errors and also tested in ESB – Operation mapping which is successfully executed without errors.
    The third party is sending the PDF content in Base64Binaryformat. I have also tested the WSDL from Oxygen to check the whether the service is working fine, which also successfully receiving the response from third party system. 
    The thing I do not understand and not able to figure out the problem is, when executing the service from ECC by sending a sample request, there is no response coming back and receiving an error saying
    “TransformerException occurred during XSLT mapping Response_03 (URN:COM.XYZ_GET_ABSENCE_DETAILS, aa3a6491-e318-11e2-c1d7-c14948250cb4, -1)”
    I have checked the Communication Channel which working fine. And also the message status in message monitoring wherein Request message has “Cancelled with errors” status and Response has “To Be Delivered” Status.
    Could you please any of you help to figure out the issue and resolve the same.
    Thank you in advance.....
    Govardhan Duvva.

    The response am receiving is like below
    <!-- XML Validation Inbound Channel Response -->
    <html><head><title>Apache Tomcat/6.0.18 - Error report</title><style>
    <!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;}
    H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;}
    H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;}
    BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;}
    B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;}
    P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}
    A {color : black;} {color : black;}HR {color : #525D76;}-->
    </style> </head><body>
    <h1>HTTP Status 415 - </h1>
    <HR size="1" noshade="noshade"><p>
    <b>type</b> Status report</p><p><b>message</b>
    <u>The server refused this request because the request entity is in a format not supported
    by the requested resource for the requested method ().</u>
    </p><HR size="1" noshade="noshade"><h3>Apache Tomcat/6.0.18</h3></body></html>
    And also in SXMB_MONI, there are two call adaptor nodes as in below picture, which means our request is going to the third party system ?

  • 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 = "";
      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){}
        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="">
      <xsl:template match="/">
        <SOAP:Envelope xmlns:SOAP="">
         <ses:sessionIDHeader xmlns:ses="">
                 <sessionID><xsl:value-of select="*/sessionID"/></sessionID>
          <ser:invokeService xmlns:ser="">
             <in0><xsl:value-of select="*/in0"/></in0>
             <in1><xsl:value-of select="*/in1"/></in1>
             <in2><xsl:value-of select="*/in2"/></in2>
    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="">
      <xsl:template match="/">
        <ns1:MT_invokeServiceResponse xmlns:ns1="">
            <invokeServiceReturn><xsl:value-of select="/*/*/*/invokeServiceReturn"/></invokeServiceReturn>
            <sessionID><xsl:value-of select="*/*/*/sessionID"/></sessionID>
    Kind Regards.

  • Query reg adding custom tags in SOAP Header - AXIS Receiver Adapter

    Hi All,
    I need to send custom tags as mentioned below to my traget webservice application. I think I can do this with Receiver AXIS adapter but not sure how it can be done. Can any of you suggest?

    If you want to add custom tags in the soap header, one possible solution is use XSLT mapping or Java mapping to create header first then do message mapping for mapping the payload structure between your source and target  as usual.
    So in operation mapping you sequence mapping like this... first XSLT mapping for custom tags for the SOAP Header followed by payload mapping.
    Hope that helps.
    Search SDN for XSLT Mapping for soap header. Already we have handled these issues.

  • XI30 SPS16 - SOAP Sender Adapter - self-defined SOAP-Header

    Hi Folks!
    My scenario is that I have to send a synchronous SOAP message to an external receiving system which expects certain processing information in the SOAP header. That external system then synchronously sends back a response SOAP message to tell me the processing results of my request message.
    The How-To Guide SOAP Adapter says that for the request message I have to create the whole SOAP Envelope (SOAP Enevelope, Header and Body) on my own within the mapping and that I have to remove the SOAP header in the response message. Unfortunately this guide does not tell me how this can be realized.
    In other SDN threads I've read that this can be achieved by using XSLT mappings. Unfortunately I have never done this before and currently I have no clear idea how to do this. And to be honest: I am everything else than an XSLT expert (historically I'm coming from the ABAP part of SAP R/3).
    My plan is to create the request payload using the graphical mapping tool and to add an XSLT mapping as 2nd mapping to build the SOAP "overhead" around the payload.
    For the response my plan is to first use XSLT mapping to remove the SOAP "overhead" from the response message and then use the graphical mapping to handle the payload.
    1. Is this possible?
    2. How can I achieve this?
    3. Can anybody send me an XSLT mapping sample to create a SOAP envelope, header and body around the payload for the request message?
    4. Can anybody send me an XSLT mappping sample to remove the SOAP envelope, header and body around the payload for the response message?
    Because I'm everything else than an expert in XSLT mappings, some kind of a "click guide with samples" would be VERY GREAT!
    Thanx in advance to anybody who will help me!!! For real help maximum points are guaranteed.
    mail: [email protected]

    Hi Volker,
    Try this XSLT code, chanfe the TODO part.. add the SOAP header part. Save it as .xsl. ZIP it and import it in the Imported archive. Please test it I have'nt test the code as I dont have a system access now.
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="" xmlns:fo="">
    <xsl:template match="/">
    <soap:Envelope xmlns:soap="" xmlns:xsi="" xmlns:xsd="">
    <Header xmlns="">
    --- TODO -
    <xsl:copy-of select="*"/>
    For the rest have a look at this thread
    SOAP Adapter: DO not use soap envelope

  • How to get data from SOAP-Header/MAIN-Section?

    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.

    Do you wnat to access the Sender Service details in your mapping using java or XSL mapping? this is possible.
    Check this link,
    Or do you want to access the SOAP header itself?

Maybe you are looking for