SOAP Response with WS-Addressing elements

Hi All,
   I have an issue with the response message of SOAP - PI - RFC Sync scenario.
In the request of the SOAP message, we receive following header(WS-Addressing) Elements in the SOAP Header part of the envelope.
<wsa:Action wsu:Id="wssecurity_signature_id_281" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        http://partnername/interfacedetails
</wsa:Action>
<wsa:MessageID wsu:Id="wssecurity_signature_id_285" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
uuid:463BF10F-0126-4000-E000-604DAC152914
</wsa:MessageID>
<wsa:RelatesTo wsu:Id="wssecurity_signature_id_283" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
urn:uuid:02875597AE9A49ABAB1229340545618
</wsa:RelatesTo>
Now the issue is the, our interface partner(who actually sends the SOAP Request), wants SOAP response containing the above WS-Addressing elements.
Is it possible with SAP PI?. Can anybody help me with this.
By the way, our interface( SOAP-PI-RFC Sync ) working fine. We just need these elements inside SOAP Response.
Thanks in advance.
Kind Regards,
Prasad.

Hi Prasad,
I am not sure if the problem is solved.
I guess you are talking about a scenario in which a non-SAP consumer sends a request to SAP ABAP provider. The consumer requests the enabling of WS-Addressing. The answer nothing is required to configure the ABAP provider, which will send back a SOAP response either with WS-A or without depending if WS-A is sent by the consumer or not. That might be the case that you can see these headers with the SXMB_MONI.
Hope this helps.
Regards,
Wei

Similar Messages

  • Soap response with envelope

    Hi
    My PI server is able to make a soap call to the SFDC ( webservice ) ...however the response that is received within PI
    has a SOAP envelope...and hence the response mapping is going in error....because the source data type in response mapping doesnot match with the soap response ( with envelope )
      <?xml version="1.0" encoding="UTF-8" ?>
    - <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:enterprise.soap.sforce.com">
    - <soapenv:Body>
    - <upsertResponse>
    - <result>
      <created>false</created>
      <id>a0UT0000004aeaMMAQ</id>
      <success>true</success>
      </result>
      </upsertResponse>
      </soapenv:Body>
      </soapenv:Envelope>
    how do i handle this

    Hi,
    I think there is an option while configuration of SOAP adapter, where you can define, not to keep SOAP envelop. Please check the option Conversion Parameters\Do Not Use SOAP Envelope and set it as per your requirement. That might solve the problem. Here is the link which can be helpful
    http://help.sap.com/saphelp_nw04/helpdata/en/29/5bd93f130f9215e10000000a155106/content.htm
    Alternatively you need a java mapping or XSLT mapping to remove the envelop.
    Here is the java mapping code to remove SOAP envelop
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Map;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import com.sap.aii.mapping.api.StreamTransformation;
    import com.sap.aii.mapping.api.StreamTransformationException;
    public class RemoveSoapEnvelop implements StreamTransformation{
    public void execute(InputStream in, OutputStream out)
    throws StreamTransformationException {
    try
         DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
         DocumentBuilder builderel=factory.newDocumentBuilder();
         /*input document in form of XML*/
         Document docIn=builderel.parse(in);
         /*document after parsing*/
         Document docOut=builderel.newDocument();
         TransformerFactory tf=TransformerFactory.newInstance();
         Transformer transform=tf.newTransformer();
         Element root;
         Node p;
         NodeList l;
         int mm,n1;
         //if you need to include namespace use next two lines
         //root=docOut.createElement("ns0:upsertResponse");
         //root.setAttribute("xmlns:ns0","http://connectsystems.be/MAINFR/AccDocument");
         root=docOut.createElement("upsertResponse");
         p=docIn.getElementsByTagName("upsertResponse").item(0);
         l=p.getChildNodes();
         n1=l.getLength();
         for(mm=0;mm<n1;++mm)
              Node temp=docOut.importNode(l.item(mm),true);
              root.appendChild(temp);
         docOut.appendChild(root);
         transform.transform(new DOMSource(docOut), new StreamResult(out));
    catch(Exception e)
         e.printStackTrace();
    public void setParameter(Map arg0) {
    public static void main(String[] args) {
    try{
         RemoveSoapEnvelop genFormat=new RemoveSoapEnvelop();
         FileInputStream in=new FileInputStream("C:\\Apps\\my folder\\sdn\\sd2.xml");
         FileOutputStream out=new FileOutputStream("C:\\Apps\\my folder\\sdn\\removedEnvelop.xml");
         genFormat.execute(in,out);
    catch(Exception e)
    e.printStackTrace();
    input xml file sd2.xml
      <?xml version="1.0" encoding="UTF-8" ?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:enterprise.soap.sforce.com">
    <soapenv:Body>
    <upsertResponse>
    <result>
      <created>false</created>
      <id>a0UT0000004aeaMMAQ</id>
      <success>true</success>
      </result>
      </upsertResponse>
      </soapenv:Body>
      </soapenv:Envelope>
    Here is the output xml removedEnvelop.xml
      <?xml version="1.0" encoding="UTF-8" ?>
    <upsertResponse>
    <result>
      <created>false</created>
      <id>a0UT0000004aeaMMAQ</id>
      <success>true</success>
      </result>
      </upsertResponse>
    Helpful articles on java mapping for PI 7.1
    http://wiki.sdn.sap.com/wiki/display/XI/SampleJAVAMappingcodeusingPI7.1+API
    You can also try following XSLT mapping to get the same output as java mapping
    <xsl:stylesheet version="1.0"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    exclude-result-prefixes="SOAP-ENV">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
    <xsl:template match="/">
    <xsl:for-each select="SOAP-ENV:Envelope/SOAP-ENV:Body">     
    <upsertResponse>
    <result>
         <xsl:variable name="var" select="normalize-space(.)"></xsl:variable>
         <xsl:variable name="tokenizedSample" select="tokenize($var,' ')"/>
        <created><xsl:value-of select="$tokenizedSample[1]"/></created>
        <id><xsl:value-of select="$tokenizedSample[2]"/></id>
        <success><xsl:value-of select="$tokenizedSample[3]"/></success>
    </result>
    </upsertResponse>
    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>
    Other than these please refer to following links for further examples on the topic
    Remove SOAP-ENV tags from xml RECEIVER RESPONSE payload (XSL needed?)
    Remove SOAP Envelop using XSLT  mapping.
    Hope this helps your cause.
    regards
    Anupam

  • Soap envelope with two root elements

    I have a wsdl with a message like:
    <message>
    <RootElement1Part>
    <RootElement2Part>
    <message>
    Using jdeveloper 10.1.3.4 to crete my bpel, i have tried to assign both and only the one i need but the following happens:
    1) If i try to assign both, only one is sent.
    2) If i assing the one i need, bpel overwrite and sent the other.
    Both elements are declared as required, but my service provider does not validate this. In the real case, only one is really needed.
    The wsdl and xsd cannot be modified.
    How can i handle this ?

    Hi Prasad,
    I am not sure if the problem is solved.
    I guess you are talking about a scenario in which a non-SAP consumer sends a request to SAP ABAP provider. The consumer requests the enabling of WS-Addressing. The answer nothing is required to configure the ABAP provider, which will send back a SOAP response either with WS-A or without depending if WS-A is sent by the consumer or not. That might be the case that you can see these headers with the SXMB_MONI.
    Hope this helps.
    Regards,
    Wei

  • Read XML response with multiple root elements

    Hi ,
    I am trying to achieve the below scenario but unable to do so.Please help urgently.
    I am getting a response from a service which has multiple root elements.these root elements can change at runtime..I need to read the different root elements and extract data from its sub elements.
    Regards...
    Hoping for an anwser..

    i assume on runtime the service just returns 1 rootnode, but this rootnode can change
    you could use a switch after the invoke
    if $response/myroot1
    assign $response/myroot to myroot1_var
    if $response/myroot2
    assign $response/myroot to myroot2_var
    etc
    so you check what's in the root node before you assign to you temp variable
    or if you have logic which is specific based on this root nod you can just implement all these branches in the switch and execute logic in there based on the selected rootnode
    several implementations are possible

  • Soap response with cdata

    I got one scenario SOAP-2-SAP where I receive a req in format in PI 7.0:
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >
       <soapenv:Header/>
       <soapenv:Body>
          <Req>
             <Message><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
    <ADT_A05>
    ...data...
    </ADT_A05>]]></Message>
             <Creator></Creator>
          </Req>
       </soapenv:Body>
    </soapenv:Envelope>
    Which I parse correctly, then I give my answer, which should contain a CDATA too, e.g.:
    <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
         <SOAP:Header/>
         <SOAP:Body>
              <Res>
                   <Message><!CDATA[[ 
                          ...data....
    ]]></Message>
              </Response>
         </SOAP:Body>
    </SOAP:Envelope>
    Instead, the SOAP channel return this:
    <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
         <SOAP:Header/>
         <SOAP:Body>
              <Response>               <Message><ACK>
    ...data...
    /ACK></Message>
              </Res>
         </SOAP:Body>
    </SOAP:Envelope>
    But btw, in monitor I can see the resp message, without soap envelope, of course:
      <?xml version="1.0" ?>
      <Res>
      <Message>
    <![CDATA[ <ACK>
      ...data...
    </ACK>
      ]]>
      </Message>
      </Res>
    Which is correct! Why the soap adapter convert the brackets into ascii code?
    thx for help,
    regards

    Hi Paola,
    please check following thread may be helpful to resolve your issue
    Creating CDATA sections in output XML
    Regards,
    Amit

  • SOAP Response with attachment

    Hi all,
    I have a scenario where PI is calling a webservice, the webservice has a response attachment having a CSV file. I want to know how to handle this attachment. I want to keep this attachment ina folder on our FTP to start another process, Can you please suggest?
    Thanks
    -Kulwant

    Just to complement: if you're on PI 7.0, only chance would be to handle it on a custom adapter module. You'd need to read the attachment and save it directly to the file system (not so good solution).
    On PI 7.1, you could handle it in the mapping level, using the new PI 7.1 Mapping API.
    Best,
    Henrique.

  • No any response with clicking address bar, not to a specific url.

    - "enter key" is okay
    - i set google.cn as homepage of firefox
    - it really worked days ago
    - already tried to restart computer as well as firefox browser
    - IE browser works as expected
    - tried searching the issue via internet, some Q&A are talking the same, but none of them has certain workaround
    - although i detected webpage directly from browser 'History', issue persists, none of them could be opened
    - my firefox ver is 10.0 almost the latest one.

    I figured it out: Changing the default page in the "PUBLIC" user profile.

  • SOAP client fails to validate SOAP Response

    Hi,
    I have developed and deployed a document style web service (with use="literal")
    on Web Logic 7.0 server using servicegen ant task. I am using a non Web Logic
    client to invoke this service.
    The WSDL generated by the service, uses "elementFormDefault="qualified" but in
    the SOAP response, all elements are not qualified by namespace. The client is
    failing to validate this SOAP response against the types defined in WSDL file
    because of this.
    I would like to know how to generate a SOAP response with all elements qualified
    with namaspace.
    Thanks
    Prasgh

    http://newsgroups.bea.com/cgi-bin/dnewsweb?cmd=article&group=weblogic.developer.interest.webservices&item=2831&utag=
    prasgh wrote:
    >
    Hi Bruce,
    Thanks for your reply. It works fine with 8.1 but it doesn't with WLS 7.0. What
    we have is 7.0. How can I resolve this on 7.0
    Appreciate your help.
    Thanks
    Prasgh
    Bruce Stephens <[email protected]> wrote:
    Hello,
    Are you using the latest WLS 7.0SP2?
    We recently updated the interop instance: http://webservice.bea.com:7001
    with WLS 8.1 so I don't have v7 stack (online) to show you, however I
    did try it locally using the Compound1 test (doc/lit with
    "elementFormDefault="qualified") and it works as shown below.
    HTHs,
    Bruce
    <!--REQUEST.................-->
    <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <env:Header>
    </env:Header>
    <env:Body>
    <ns100:x_Person xmlns:ns100="http://soapinterop.org/xsd"
    Male="true"
    Name="sample string">
    <ns101:Age
    xmlns:ns101="http://soapinterop.org/xsd">20.2</ns101:Age>
    <ns102:ID
    xmlns:ns102="http://soapinterop.org/xsd">10.1</ns102:ID>
    </ns100:x_Person>
    </env:Body>
    </env:Envelope>
    Response from the server
    <!--RESPONSE.................-->
    <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <env:Body>
    <ns100:result_Person xmlns:ns100="http://soapinterop.org/xsd"
    Name="sample string"
    Male="true">
    <ns101:Age
    xmlns:ns101="http://soapinterop.org/xsd">20.2</ns101:Age>
    <ns102:ID
    xmlns:ns102="http://soapinterop.org/xsd">10.1</ns102:ID>
    </ns100:result_Person>
    </env:Body>
    </env:Envelope>
    [email protected] wrote:
    Hi,
    I have developed and deployed a document style web service (with use="literal")
    on Web Logic 7.0 server using servicegen ant task. I am using a nonWeb Logic
    client to invoke this service.
    The WSDL generated by the service, uses "elementFormDefault="qualified"but in
    the SOAP response, all elements are not qualified by namespace. Theclient is
    failing to validate this SOAP response against the types defined inWSDL file
    because of this.
    I would like to know how to generate a SOAP response with all elementsqualified
    with namaspace.
    Thanks
    Prasgh

  • How can i custom the xml soap response in my ws?

    Hello there,
    Im developing a ws in weblogic 10.2 and i need to return a complex type soap response with a custom xml created by me... can any one give me an advice on how can i do that? Im not used to soap ws
    And i need to return a lot of info some times and some of them are ArrayList of an object. Like the info of a Client and all the contracts of this client (and the info of that contract)... a lot of xml element with childs.
    Thanx in advance for any help
    PS. I tried to post an xml as example but i couldnt do it using '{' code '}' tag 
    Edited by: mgaldames on 08-dic-2010 8:50

    Hi Riyaz,
    Thanks for your immediate response.
    Here is my requirement.
    I have created a ZTABLE with Field AUART and this table is maintain table using SM30.
    When I Press F4, it will giving the list of all the order types available in T003O table and can select one and I can proceed succussfully.
    But when using SM30 I need to give '*' in the column for AUART which is not available in T003O table.
    I need to save my entires for AUART with * also( The value "*" is not available in Check table T003O ).
    Please let me know how can I do this.
    Thanks in advance.

  • MessageHandlers - caching of SOAP responses

    I have a webservice which has a number of clients who will all consume the same
    message once. I've determined that one of my bottlenecks is actually turning
    the results of the EJB call into the SOAP message. Since all the clients will
    receive the same message once I think it would be nice to cache the soap message
    resulting from a call.
    Can I use a message handler to do this, or will the SOAP message already have
    been generated?

    Hi Tom,
    Your previous reply clears things up :-) But for the record, serialization (converting
    the value returned from the EJB to XML) has already occurred when the handleResponse(MessageContext)
    method is called. That's why you can get access to (and manipulate) the SOAP response
    in the handleResponse(MessageContext) method. This SOAP response has the value
    returned from the EJB in it, when the handleResponse(MessageContext) method is
    called.
    Later,
    Mike Wooten
    "Tom Hennen" <[email protected]> wrote:
    >
    I need to call the EJB because what it returns will determine if the
    message is
    already cached. You see the ejb returns a message from a queue. That
    message
    needs to be removed from the queue, and the handler won't know if it
    has the message
    cached until it gets a response from the EJB.
    At any rate it sounds like you're saying the serialization takes place
    after handlerResponse
    gets through with the Message? If that's the case then this won't work
    anyways.
    "Michael Wooten" <[email protected]> wrote:
    Hi Tom,
    You'd have to store something in the MessageContext DURING the handleRequest(MessageContext)
    method processing, to make any sense here :-)
    The JAX-RPC Handler infrastructure is only guaranteeing that the property
    stored
    during the handleRequest(MessageContext) call, will be available during
    the handleResponse(MessageContext)
    call.
    I don't quite understand why you need to call the EJB, if you already
    know what
    the value of the return object will be. I'm assuming that the EJB will
    return
    the same result, for a given value assigned to the input arguments.If
    this is
    true, why can't you use a byte[] created from the payload of the <SOAPBody>
    request,
    as the cache item key. If you don't find the cache item key (you look
    in the
    handleRequest method), set a MessageContext property with the payload
    byte[],
    and call the EJB. When the EJB returns, retrieve the property and use
    it to create
    a cache item that has the value of the property as the key, and a byte[]
    of the
    SOAP response as a value. When the handleResponse method is called,it
    will contain
    the response that will become the cache item value. Create a byte[]from
    it, assign
    the value of the property as the key, and a byte[] of the SOAP response
    as the
    value. If you find the key in the cache during the handleRequest(MessageContext)
    call, retreive the cache value, put it in a MessageContext property,
    return false
    from handleRequest(MessageContext), grab the MessageContext property
    value in
    the handleResponse(MessageContext) method, and create the SOAP response
    with it.
    I take it that this isn't something you can do in your situation :-)
    Calling the EJB from inside the handleRequest(MessageContext) method
    will still
    have performance issues, because you'll still need to deal with serializing/deserializing
    XML.
    Regards,
    Mike Wooten
    "Tom Hennen" <[email protected]> wrote:
    Hmm, that's what I was afraid of.
    We actually have to call the EJB. Skipping it isn't an option.
    The
    ejb only
    accesses data in memory, so caching it's response would be of little
    value anyways.
    When using RMI to bypass the jax-rpc stack I'm seeing CPU usage about
    1/3 less
    than when using webservices. Overall throughput also more than doubles.
    Would I see a benefit to calling the EJB from the handleRequest method
    and then
    based upon it's response sticking a cached SOAP message into the message
    context?
    Of course this would bring up the problem of what to do if the message
    hasn't
    been cached (calling the EJB twice isn't allowed).
    "Michael Wooten" <[email protected]> wrote:
    Hi Tom,
    The SOAP message will have already been created for both client andserver-side
    JAX-RPC Handlers, but you can avoid the EJB call :-)
    The flow is as follows:
    1. Web service consumer code calls web service operation.
    2. The client-side JAX-RPC stack creates a SOAP message from the call.
    If a
    client-side JAX-RPC Handler is in place for the called operation,
    it's
    handleRequest
    callback method is invoked.
    3. If handleRequest returns a true, or there is no client-side JAX-RPC
    Handler
    in place, the
    JAX-RPC implementation connects to the endpoint URL and sends the
    SOAP
    message.
    4. The server-side JAX-RPC stack invokes the handleRequest method,of
    a server-side
    JAX-RPC Handler for the operation, if one is defined. It (the server-side
    JAX-RPC
    stack) hasn't made the call to the EJB that is providing the service
    implementation
    yet.
    NOTE: Seeing as the EJB hasn't been called yet, you could have thecode
    in the
    handleRequest method return a cached response. The assumption here,would
    be that
    this server-side JAX-RPC Handler had access to a shared database (or
    a JCache-based
    product), that it could query in the handleRequest method, and update
    in the handleResponse
    method. If the query returned a cached SOAP response, you would useit
    to set
    a property on the MessageContext object passed to handleRequest, using
    the setProperty
    method, and return false from handleRequest. The stack should then
    bypass
    invoking
    the EJB and call the handleResponse, using the same MessageContextobject
    you
    set the property on in the handleRequest method. Call the getProperty
    on the MessageContext
    object in the handleResponse method, to get the cached SOAP response,
    and use
    it to replace the one currently in the SOAP response. If performance
    is a major
    factor (which sounds like the case), you might want to replace theshared
    database
    with an distributed cache product (i.e. Tangosol Coherence, an open-source
    JCache
    product, etc.), or an XML database :-)
    5. If the handleRequest method of the server-side JAX-RPC Handler
    returns
    true,
    or no server-side JAX-RPC Handler was defined for the operation, the
    server-side
    stack calls the EJB.
    6. If a server-side JAX-RPC Handler is defined, the server-side stack
    calls the
    handleResponse method. If not, the stack uses the results of the EJB
    call to create
    the SOAP response.
    7. If a client-side JAX-RPC Handler is defined, the client-side stack
    calls the
    handleResponse method. Afterwards, it processes the SOAP responseand
    deserializes
    the return value. If no client-side JAX-RPC Handler is defined, theclient-side
    stack just processes the SOAP response and deserializes the return
    value.
    HTH,
    Mike Wooten
    "Tom Hennen" <[email protected]> wrote:
    I have a webservice which has a number of clients who will all consume
    the same
    message once. I've determined that one of my bottlenecks is actually
    turning
    the results of the EJB call into the SOAP message. Since all the
    clients
    will
    receive the same message once I think it would be nice to cache thesoap
    message
    resulting from a call.
    Can I use a message handler to do this, or will the SOAP message
    already
    have
    been generated?

  • Missing element To when using SOAP 1.2 with WS Addressing 1.0 in Response

    Hi, 
    I'm developing WCF using  SOAP 1.2 with WS Addressing 1.0 between Windows Server 2012 and JAVA client Oracle JAX-WS 2.1.5.
    The Request from the client contains the element <To>, but the Response from the Server somehow will ignore that element, which is required for the client, even I tried to add manually.(refer to http://stackoverflow.com/questions/15808852/how-to-correctly-implement-custom-soap-1-2-headers-and-ws-addressing-in-a-wcf-se)
    Is this normal behavior that the Response will ignore the element <To>?
    And is there another way to add the element?
    Thanks.

    I'm developing server side service using .net framework 4.0.
    Microsoft Service Trace Viewer shows that in ServiceLevelReceiveRequest the element <To> is exist, but then it is gone in the following step, ServiceLevelSendReply, and TransportSend.
    Thanks.

  • Weblogic throwing "null SOAP element Exception" in multi-part SOAP response

    Hi All,
    I'm using weblogic 10. My application is a webservice client generated using '*clientgen*', which is running on weblogic, and
    is invoking a remotely hosted webservice ( Remotely hoseted webservice may not be running on weblogic).
    I've the wsdl file of remotely hosted webservice.
    Now the problem is with WSDL file (I suppose), have a look at this.
    *&lt;message name="m1"&gt;*
    *&lt;part name="body" element="tns:GetCompanyInfo"/&gt;*
    *&lt;/message&gt;*
    *&lt;message name="m2"&gt;*
    *&lt;part name="body" element="tns:GetCompanyInfoResult"/&gt;*
    *&lt;part name="docs" type="xsd:AnyComplexType"/&gt; ------&gt; assume all elements inside this complex type can be nil or minOccurs set to '0'*
    *&lt;part name="logo" type="xsd:AnyOtherComplexType"/&gt; ------&gt; assume all elements inside this complex type can be nil or minOccurs set to '0'*
    *&lt;/message&gt;*
    &lt;portType name="pt1"&gt;
    &lt;operation name="GetCompanyInfo"&gt;
    &lt;input message="m1"/&gt;
    *&lt;output message="m2"/&gt; -----&gt; multi part message.*
    &lt;/operation&gt;
    &lt;/portType&gt;
    Now here is sample message for the request(I've composed this message for this question):
    &lt;soap:Envelope&gt; MESSAGE1
    &lt;soap:header/&gt;
    &lt;soap:body&gt;
    &lt;tns:m2&gt;
    &lt;tns:GetCompanyInfoResult&gt;
    Blah Blah....
    &lt;/tns:GetCompanyInfoResult&gt;
    &lt;tns:docs&gt;
    Blah Blah....
    &lt;/tns:docs&gt; Assume no data for 'logo', so it's not returned. Since all its elements can be nillable.
    &lt;tns:m2&gt;
    &lt;/soap:body&gt;
    &lt;/soap:Envelope&gt;
    First of all, is this SOAP response is valid? I'm not sure about *'message' and 'parts' in SOAP*, but according to XML schema standards it's invalid.
    Because, according to *'message' m2, 'logo' is missing*, eventhough all it's elements are nillable in such case there should be *&lt;logo/&gt;* at the end.
    I mean valid message should be like below
    &lt;soap:Envelope&gt; '*MESSAGE2*'
    &lt;soap:header/&gt;
    &lt;soap:body&gt;
    &lt;tns:m2&gt;
    &lt;tns:GetCompanyInfoResult&gt;
    Blah Blah....
    &lt;/tns:GetCompanyInfoResult&gt;
    &lt;tns:docs&gt;
    Blah Blah....
    &lt;/tns:docs&gt;
    *&lt;tns:logo/&gt; ------------------&gt; here is the change compared to above message. empty element.*
    &lt;tns:m2&gt;
    &lt;/soap:body&gt;
    &lt;/soap:Envelope&gt;
    Now the concerns are :
    (1) Which is a valid response? Message1 or Message2
    (2) If message1 is valid then why is weblogic throwing an exception 'null SOAP element', I suppose this is due to missing 'logo' element.
    (To confirm this I've used tcpmonitor and found message1 as response but weblogic is still throwing 'null SOAP Element' exception,
    which confirms it needs 'logo' as well, I suppose &lt;logo/&gt; at least). Is there any workaround for this in weblogic for multi-part messages?
    (3) If message1 is invalid according to SOAP standards then You've answered my question. ---&gt; I need to talk to the webservice provider in this case.....
    Thanks in advance...

    Message 1 is not Basic Profile 1.1 compliant. It is specified by BP1.1 in section 4.4.1(http://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html#Bindings_and_Parts) that when a wsdl:part element is defined using the type attribute, the serialization of that part in a message is equivalent to an implicit (XML Schema) qualification of a minOccurs attribute with the value "1", a maxOccurs attribute with the value "1" and a nillable attribute with the value "false".

  • How to control the location of the SOAP:address element in the WSDL

    I have an EJB exposed as webservice in WebLogic 10.3. Further, the EJB has been annotated with the WebService annotation as in:
    @WebService(name = "S_CALCULATORname", serviceName = "S_CALCULATORserviceName",
    targetNamespace = "http://tempuri.org/SCalculator/")
    @Stateless(name = "S_CALCULATOR")
    public class S_CALCULATOR_Beanxxxxxx
    The location attribute of the SOAP:address element in the WSDL document generated by the Test Client facility is of the form
    http://host:port/ejb-java-class-name/service-name-attribute-value as in:
    <soap:address location="http://123.4.5.678:1234/S_CALCULATOR_Beanxxxxxx/S_CALCULATORserviceName" />
    Is there a way to control the value of the context root portion of the URL, ejb-java-class-name in this case, either using annotations or deployment descriptor files?
    thanks in advance for any replies,
    octavio

    Hi,
    While building the WebService Application you can use the following ANT task...
    <target name="build-service4">
    <jwsc
    srcdir="src"
    destdir="output/TestEar">
    <jws file="examples/webservices/jwsc/TestServiceImpl.java">
    <WLHttpTransport contextPath ="TestContext" serviceUri="TestServiceUri" portName="TestServicePortHTTP"/>
    </jws>
    </jwsc>
    </target>
    Or if you are developing JAXRPC EJB based WebService in that case you can even define the Context root using *@weblogic.jws.WLHttpTransport* annotation....
    @WLHttpTransport(contextPath="simple", serviceUri="SimpleService", portName="SimpleServicePort")
    Thanks
    Jay SenSharma
    http://jaysensharma.wordpress.com (WebLogic Wonders Are Here)
    Edited by: Jay SenSharma on Feb 4, 2010 10:22 PM

  • How to deal with complex SOAP responses when calling web services ???

    Hi all,
    I have an issue when calling a web service that returns a complex
    SOAP response message. With simple responses (e. g. array of strings) it
    worked.
    I created the PDF as an Interactive form with Livecycle Designer 8.2.
    The Javascript looks like this:
    var cURL = "http://blabla";
    var cTestString = "too";
    SOAP.wireDump=true;
    var response = SOAP.request(
         cURL: cURL,
         oRequest: {
              "http://blabla.com/:complete" : {
              arg0: cTestString
              cAction: "http://bla.com:50000/"
    var resp = response["http://blabla.com:serviceResponse"];
    console.println("lenght:"+resp.length);
    var myns = "http://blabla.com/namespace";
    for (var nItem in resp.return)
      console.println("" + nItem + " " + resp.return[nItem] );
         for (var ConceptView in resp.return[nItem])
           console.println("  "+resp.return[nItem].length);
           console.println("  "+ConceptView+" "+resp.return[nItem][ConceptView] );
           if (ConceptView == myns + ":Response")
              for (var item2 in resp.return[nItem][ConceptView]){
                  console.println("    "+item2+" "+resp.return[nItem][ConceptView][item2] );
    I call the service and when I realized that I do not find out the type of the object returned, I used the nested for-in-loops to iterate through it. But it seems that there is just one item in the Javascript object returned, although the SOAP message clearly shows that there are more than one item.
    Can you help me?
    One key problem when analyzing this issue is that I do not know at all
    the Javascript type of response. We suspected it might be an array, but it is not
    because the method .length returns "undefined". It would already be
    helpful to know at least the type of this object and to know callable
    methods and so on ...
    Best regards
    Christoph
    P.S. As mentioned I used Livecycle Designer 8.2 and displayed and
    debugged the document using Acrobat 9.

    Christoph,
    Firstly LiveCycle Designer 8.2 is still not supported to develop forms as per my knowledge. The latest version compatible for SAP Interactive Forms is ALD 8.0.
    There is a difference between Acrobat based forms and LiveCycle forms and based on your coding it looks to me  that you are trying to create a LiveCycle based form with coding of Acrobat which is not supported in LiveCycle Desginer, which is why you may be getting the error.
    I hope that does not confuse you, so may check this [link|http://www.acrobatusers.com/articles/2006/08/designer_or_forms/index.php] for some clear information on what point I was trying to make.
    Chintan

  • Synchronous RFC -- SOAP Scenario: problem with SOAP Response/Fault Mapping

    Hi,
    I've a synchronous RFC --> PI --> SOAP Scenario. The problem is that the message structure of the sending RFC doesn't match the Webservice Structure.
    The (SAP standard) RFC has just a Request / Response message structure. Part of the Response Message structure is a exception structure.
    The Webservice has a Request / Response message structure and in case of an error I get a SOAP:Fault.
    Problem now is that I cannot configure that scenario without usage of BPM as I will have to map SOAP:Response or SOAP:Fault to the RFC Response structure.
    Has anybody another idea to do that synchronous scenario (with usage of message mapping) without BPM?
    BR
    Holger

    1)
    you maus define 3 mapping.
    1)request
    2)response
    3)Fault
    in Interface mapping define at response boths (2-3) mapping. its clear??
    2)
    otherwise sometjhing is not clear, why do you want fault?? why dont you  get only response message. we implement this kind of response:
    <response_MT>
    <ID> (error ID)
    <system> (target system) 
    <error> (Error Description)
    </response>
    by this way fault message is not needed. but if you must have it just follow the top of message else, propose second.
    Thanks
    Rodrigo
    Thanks
    Rodrigo
    Edited by: Rodrigo Pertierra on Feb 25, 2008 11:52 AM

Maybe you are looking for

  • XML Publisher Report  - java.lang.OutOfMemoryError

    Hi All, Apps - 11.5.10.2 XML Publisher - 5.6.3 When the request being run for huge data, its getting out of momory error. We have already tried the below options Modified the teo profiles and 3 Fo processing properties in both the template and the da

  • Details on booting from a Fire Wire HD

    Good day, all I'm trying to make a bootable back up of my internal hard drive on my old iBook. I used "Personal Backup X3" to "clone" my drive to a LaCie Fire Wire drive (which is partitioned into two 40 gig parts. When I boot the iBook (with the LaC

  • How to upload the RM and PM budjeted cost in sap.

    Dear sap guru's,              Could you please suggest me , how to upload the 2008 budjeted cost(RM/PM)  in sap, One way i can upload the budjet Through  materi master( costing2 tab) ie planed price1 or 2 , Please suggest me is there any other way to

  • How to connect to SQL Server from Forms 10g?

    Hello all, How do we connect to SQL Server database from Forms 10g? In Oracle Metalink site they have suggested using Transparent Gateway for SQL Server as a solution. But is there a way we can connect directly to SQL Server from Forms using an ODBC

  • Display Xml forms

    Hi. I have next problem: In my application, user can create xml documents by xml forms. This generated xml files are stored in the KM. My application has another page in order to view/manage these documents. Clicking on the Context Menu, it appears a