Fault messages via HTTP

Hello,
I am trying to connect a thrid-party system that uses http to a R/3-System. I also want to handle application errors in the third-party-system. But right now I am a little bit confused about the fault messages. When creating a fault message in ESR, there is always the standard type ExchangeFaultData used which can't be changed. But my system is returning application errors in a different format which does not match to the ExchangeFaultData type. How can I deal with that?
Thanks in advance for any help.
regrads,
Jens Harzer

You can have a look here :
http://help.sap.com/saphelp_nw04/helpdata/en/dd/b7623c6369f454e10000000a114084/content.htm
It explains the basics of fault/error msgs when designing msg interfaces
Chris

Similar Messages

  • BPM multicast Order to multiple line messages via HTTP.

    Hi
    I have an interface that requires a Sales Order to be split up into messages per Order line.  So a 1:N.  Each message is then to be sent via HTTP.
    I find that the HTTP Adapter is not able to handle a multi message as it returns error "Messages in multi-message format can only be sent to one Adapter Engine".
    So a BPM is required to process each message and send them one at a time.  My test SalesOrder has 2 lines and so I expect 2 messages to be sent. I have a BPM but it is only sending the first message and it should do both. 
    My BPM has the following steps
      Receive Step for SalesOrder
      Transformation Step for SalesOrder into OrderLinesMessage
      ReceiverDetermination Step for OrderLinesMessage to Receivers container
      ForEach block for Multiline element (Receivers) to CurrentLine (ReceiverLine container)
      Send Step for OrderLinesMessage where ReceiverFrom = ReceiverList and Receivers = ReceiverLine container
    Why for my SalesOrder with 2 lines is only 1 message being sent ?.
    thanks

    Hi
    I have an interface that requires a Sales Order to be split up into messages per Order line.  So a 1:N.  Each message is then to be sent via HTTP.
    I find that the HTTP Adapter is not able to handle a multi message as it returns error "Messages in multi-message format can only be sent to one Adapter Engine".
    So a BPM is required to process each message and send them one at a time.  My test SalesOrder has 2 lines and so I expect 2 messages to be sent. I have a BPM but it is only sending the first message and it should do both. 
    My BPM has the following steps
      Receive Step for SalesOrder
      Transformation Step for SalesOrder into OrderLinesMessage
      ReceiverDetermination Step for OrderLinesMessage to Receivers container
      ForEach block for Multiline element (Receivers) to CurrentLine (ReceiverLine container)
      Send Step for OrderLinesMessage where ReceiverFrom = ReceiverList and Receivers = ReceiverLine container
    Why for my SalesOrder with 2 lines is only 1 message being sent ?.
    thanks

  • Send XML Message via HTTP and Receive Response

    Hello,
    We have a scenario where we need to update Currency Exchange Rates in R/3 via a 3rd party called Oanda.  I'd like to use XI for this Interface, if possible. 
    Basically, we need to send XML over HTTP.  Here's the URL and the XML we need to use for our POST (I'll need to perform the look-up for about 15 currency codes - I plan on using a BPM process to loop through each currency code specified in a flat file):
    http://www.oanda.com/cgi-bin/fxml/fxml?fxmlrequest=<CONVERT><CLIENT_ID>TestAccount1</CLIENT_ID><EXCH>USD</EXCH><EXPR>CAD</EXPR><DATE>03/25/2008</DATE></CONVERT>
    And the reponse looks like this:
    <RESPONSE>
      <EXPR>CAD</EXPR>
      <EXCH>USD</EXCH>
      <AMOUNT>1</AMOUNT>
      <NPRICES>1</NPRICES>
      <CONVERSION>
        <DATE>Mon, 24 Mar 2008 20:00:00 GMT</DATE>
        <ASK>1.0257</ASK>
        <BID>1.0251</BID>
      </CONVERSION>
    </RESPONSE>
    I plan on mapping each reponse to BAPI_EXCHRATE_CREATEMULTIPLE, using BPM.
    So my question is this:  Should I use the HTTP adapter for the out going POST to Oanda?  If so, would the HTTP adapter be consider the sender or the receiver?  Also, how would the XML message be automatically appended to the end of the URL (i.e., after the fxmlrequest parameter)?  I guess I'm a little confused on how to use the HTTP adapter...  Are there any blogs that discuss this type of scenario?
    Thanks,
    Matt

    Hi guys,
    I have few concerns for setting up this scenario.
    1). I have created a data type for request mapping, and teste the mapping.
    The output looks like below:
      <?xml version="1.0" encoding="UTF-8" ?>
      <ns1:MT_CONVERT xmlns:ns1="http://test.com/ExchngRate">
       <CONVERT>
         <CLIENT_ID>test</CLIENT_ID>
         <EXPR>CAD</EXPR>
         <EXCH>USD</EXCH>
         <DATE>10/21/2009</DATE>
         <AMOUNT>1</AMOUNT>
       </CONVERT>
      </ns1:MT_CONVERT>
    How to pass only
      <CONVERT>
         <CLIENT_ID>test</CLIENT_ID>
         <EXPR>CAD</EXPR>
         <EXCH>USD</EXCH>
         <DATE>10/21/2009</DATE>
         <AMOUNT>1</AMOUNT>
       </CONVERT>
    to the receiver HTTP adapter.
    2) I am using URL address in the receiver HTTP adapter.
    Target Host: www.oanda.com
    Path Prefix: cgi-bin/fxml/fxml?fxmlrequest=
    What is will be Service Number?
    Looking forward for you help. Your help is greatly appreciated.
    Thanks,
    Namadev
    Edited by: Namadev Chillal on Oct 21, 2009 5:35 PM

  • Handling fault messages in an Integration Process (bpm)

    I have a bpm in PI 7.11 which performs a synch call to an external webservice. In addition to the request/response, that webservice can also generate two faults: ObjectNotFoundFault and generalfault.  I am having trouble handling these faults - when a fault occurs my handler is not being invoked and thus the bpm process stops/errors. When I look at the underlying process (via txn swi1), I see the exact error text:
    "No exception defined for fault message ObjectNotFoundFault http://www.companyb.com/services/olsa_v1_0/"
    From what I understand within the bpm synch call step to the webservice I need to do the following to handle the exception/fault:
    - put the synch call (to the webservice) into a block
    - add an exception branch to that block named let's say A & set the exception handler of that block to be A
    - in the exception setting of that synch step, select A
    In my case, I don't care about the fault details other than to ensure it does not stop the whole Integration Process, so in my exception branch I don't do anything. I did try adding a control step within it too (as per SAP Press text book).
    Is there anything else I need to do here?  I am not mapping the returned fault - does the fault need to be mapped (not sure how I would do this given that the synch step uses an abstract interface and therefore to my knowledge no fault mapping can be done)? 
    There are 2 Notes that describe my issue exactly:
    https://service.sap.com/sap/support/notes/1484903
    https://service.sap.com/sap/support/notes/1158699 <-- this one refers more to me, but we already have in 7.11
    Can anyone let me know exactly the steps I would perform to handle these faults - does the exception name / handler A above need to be named the actual exception / fault ObjectNotFoundFault?
    Any help appreciated.
    Thanks,
    Keith)?
    Any help appreciated.
    Thanks,
    Keith

    Thanks - my scenario I guess is #2 of that blog. But is your take that even if I don't care what is in the fault message, i.e. I don't care about the contents of it but rather I just want to continue on from it, that I still need to perform this java coding?  It's not clear to me from what he says - it seems to me he does the java coding to actually capture the contents of the message.  I am in fact using the soap axis adapter too, as he is. The screen shot showing the exception branch is basically what I have.
    Regards,
    Keith

  • PI 7.1 Adapter Module Development - Identify SOAP Fault Message

    Hi Experts,</br>
    here's a PI 7.1 Adapter Module Development issue I hope you can help me to resolve. It's about identifying SOAP fault messages.</br>
    </br>
    Scenario at a glance:</br>
    Adapter Modules placed in the modules chain at request and response time in a synchronous Scenario:</br>
    - Request: SOAP Axis to RFC </br>
    - Response and Fault Response: RFC to SOAP Axis</br>
    </br>
    The issue is how to identify SOAP fault message in SOAP Axis Adapter Module in the response message:</br>
    The client gets SOAP fault messages like the follwong one:</br>
       <SOAP:Body>
          <SOAP:Fault>
             <faultcode>SOAP:Server</faultcode>
             <faultstring>Server Error</faultstring>
             <detail>
                <ns1:exception xmlns:ns1="http://typen.geschaeftsstelle.pab.barmer.de">
                   <ns1:errortext>bla bla bla ...</ns1:errortext>
                </ns1:exception>
             </detail>
          </SOAP:Fault>
       </SOAP:Body>
    </br>
    </br>
    But when trying to access the tags faultcode and/or faultstring in the adapter module via xPath expressions I do not get them. Obviously the SOAP Fault tags are built AFTER the adapter module has been passed. So my question is:</br>
    How can I clearly/uniquely detect a SOAP fault response message (and distinguish it from a "normal" response message) in my SOAP Axis Adapter Module?</br>
    </br>
    I tried it the following way:</br>
    </br>
    </br>
    // Check Message Payload for SOAP Fault Message via xPath expressions</br>
    ...</br>
    // SOAP Fault Code</br>
    zv_xPression = zc_constXPattern.replaceFirst("&", "faultcode");</br>
    zv_soapFaultCode = XPathAPI.eval(zv_doc, (String) zv_xPression).toString();</br>
    // SOAP Fault String</br>
    zv_xPression = zc_constXPattern.replaceFirst("&", "faultstring");</br>
    zv_soapFaultString = XPathAPI.eval(zv_doc, (String) zv_xPression).toString();</br>
    // check for SOAP Fault Message</br>
    if (zv_soapFaultCode.equals("") && zv_soapFaultString.equals("")) {</br>
         // Create Audit Log entry - NOT a SOAP Fault Message</br>
         zv_msgText = zc_constModuleName + " 0190: xPath - OK! This message is NOT a SOAP Fault Message";</br>
         zv_audit.addAuditLogEntry(zv_msgKey, AuditLogStatus.SUCCESS, zv_msgText);</br>
         zv_faultCheck = false;</br>
    }</br>
    else {</br>
         ...</br>
         // Create Audit Log entry - SOAP Fault Message</br>
         zv_msgText = zc_constModuleName </br>
              + " 0200: xPath - this message is a SOAP Fault Message. " </br>
              + " - Faultcode is: " + zv_soapFaultCode </br>
              + " - Faultstring is: " + zv_soapFaultString; </br>
         zv_audit.addAuditLogEntry(zv_msgKey, AuditLogStatus.ERROR, zv_msgText);</br>
         ...</br>
    }</br>
    ...</br>
    </br></br>
    But zv_soapFaultCode and zv_soapFaultString are always empty (with other payload tags this coding works fine).</br>
    </br>
    Any ideas? </br></br>
    Thanx very much in advance!</br></br>
    Regards,</br>
    Volker

    Hi Alex!
    Like already mentioned I solved my problem by identifying the SOAP exception with the messageClass attribute of the PI message header. Acess code:
    try {
    String zv_msgClass = zv_piMsg.getMessageClass().toString();
    } catch (Exception e) {
    zv_msgText = zc_constModuleName
    + " E0110: Message processing terminated."
    + " Reason: Error while getting MessageClass "
    + zv_dataSource
    + e;
    // create trace and audit log entry (severity ERROR) for exception
    zv_location.errorT(ZV_SIGNATURE, zv_msgText);
    zv_audit.addAuditLogEntry(zv_msgKey, AuditLogStatus.ERROR, zv_msgText);
    ModuleException me = new ModuleException(e);
    zv_location.throwing(ZV_SIGNATURE, me);
    e.printStackTrace();
    throw me;
    }     // end of try-catch-block
    But I do not think this will solve your problem. I am almost sure, that something in your Axis configuration is wrong/missing. If a handler cannot be instatiated then it really may be missing. Have a look at defaultTrace.trc. Maybe you will find more suitable information about the root cause of your problem. Also have a look at NWA under software components and/or application modules if you can find/see your modules.
    But there is a general issue when trying to catch PI fault messages. If e.g. the requestor tries to login with wrong userid/pasword, then you will have no chance to catch this kind of error - at least as far as I know. Because in this very early stage of PI message processing no module is called.
    One last question: Did you develop your own Adapter or just an adapter module? In the first case: Is your adapter started and healthy? Have a look at RWB -> communication channel monitoring.
    Regards,
    Volker

  • Fault Message data

    Hi,
    We are sending data from HTTP to PI  and than to SAP via Proxy. In SAP, proxy receives it and calls the BAPI to post the data.
    If there is an error , it invokes the Fault Message data. Somehow i am not getting the fault message back to PI. In some case i am seeing another window of acknowledgement in PI MONI whcih has this error.
    <?xml version="1.0"; encoding="UTF-8" standalone="yes" ?>
    - <!--  Technical Routing of Response  -->
    - <SAP:Error xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="">
      <SAP:Category>XIServer</SAP:Category>
      <SAP:Code area="INTERNAL">NO_BACK_SYSTEM_IN_HOPLIST</SAP:Code>
      <SAP:P1 />
      <SAP:P2 />
      <SAP:P3 />
      <SAP:P4 />
      <SAP:AdditionalText />
      <SAP:Stack>Legacy system to which acknowledgment message is to be sent is missing in hoplist (with wasread=false)</SAP:Stack>   <SAP:Retry>M</SAP:Retry>
      </SAP:Error>
    How to configure the Fault message type in async scenario. I read the blog but looks like still some config is missing from my end
    Also If SAP send the error message & PI receives it, how can we send this error info back to HTTP while remaining in Async mode .
    Regards,
    Edited by: XI_Fan on Sep 11, 2008 11:22 PM

    Thanks all for reply. My scenario is slightly bit different. We are not using BPM and nether synchronous call.
    The scenario is 3rd party sends Purchase REQ to PI and PI via Server proxy pushes that to ECC. Once ECC receiver,
    it tries to post via BAPI If the BAPI fails aim is to send the data back to 3rd party with error and key so that they should
    not do further processing of PR ( like creating PO etc) We have fault message that is being called in SAP ECC when the BAPI is in error. Now I have 3 points here
    (1) What configuration are needed to send the information ( fault message data) from SAP to PI ?
    (2) What is the best way to send this information back to 3rd party, considering that we are in using ASYNC Proxy
    and Async HTTP adapter?
    (3) Do we have to create another interface ( Client proxy) to send the data to ECC -> PI ->HTTP.
    How this would be done online ( without time gap and without BPM)
    I think one way is to call the client proxy code where BAPI BAPI error out( server proxy code)  
    Do a mapping between this fault message of SAP and fault message of HTTP and than push the data back to HTTP.
    Any comments on this appreciated.
    Regards,

  • How to send XML via HTTPS in Servlet

    I am new to Java. I need to make a servlet which can send a message via HTTPS with a content type of XML to another web server when it is called. each msg is proceeded with a header in the following format:
    requestID=rid&userID=uid&password=mypd
    and a detail information in XML:
    <S_Request>
    <requestControllID>1-rf200</requestControlID>
    <zipCode>99012</zipCode>
    <orderQuantity>35</orderQuantity>
    </S_Request>
    I have basic idea of how to send an http post with parameter string by using the Redirect function but don't know how to deal with the XML detail. Any one has idea about this? Any help will be greatly appreciated!

    This is what I did for one of my projects;
    String myXML = "all the xml tags and fields";
    URL url = new URL("https://www.somesite.com");
    HttpsURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    OutputStream outXML = connection.getOutputStream();
    outXML.write(myXML.getBytes());
    I think you can add the requestID and all to the begining of the string myXML
    Good luck
    Rajesh

  • Soap fault message handling in XI

    Hi,
    I am using axis 1.4. SAP XI is my clinet. My wsdl file as below
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions targetNamespace="http://ws.example.com/service"
       xmlns:wns="http://ws.example.com/service"
       xmlns:tns="http://ws.exampleenterprise.com"
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <wsdl:types>
             <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                    targetNamespace="http://ws.exampleenterprise.com"
                    elementFormDefault="qualified">
                     <xs:complexType name="SecrtySbj">
                             <xs:sequence>
                                     <xs:element name="usrname" type="xs:string"/>
                                     <xs:element name="pswrd" type="xs:string"/>
                             </xs:sequence>
                     </xs:complexType>
                     <xs:complexType name="AuthenticateRequest">
                             <xs:sequence>
                                     <xs:element name="secrtySbj" type="tns:SecrtySbj"/>
                             </xs:sequence>
                     </xs:complexType>
                     <xs:element name="authenticateRequest" type="tns:AuthenticateRequest"/>
                     <xs:complexType name="AuthenticateResponse" >
                             <xs:sequence>
                                     <xs:element name="sessnId" type="xs:string"/>
                             </xs:sequence>
                     </xs:complexType>
                     <xs:element name="authenticateResponse" type="tns:AuthenticateResponse"/>
                     <xs:complexType name="customFault">
                             <xs:sequence>
                                     <xs:element name="customCd" type="xs:int"/>
                                     <xs:element name="customMsg" type="xs:string" minOccurs="0"/>
                                     <xs:element name="customExcp" type="xs:string" minOccurs="0"/>
                             </xs:sequence>
                     </xs:complexType>
                     <xs:element name="customFault" type="tns:customFault"/>
             </xs:schema>
    </wsdl:types>
    <wsdl:message name="authRequest">
       <wsdl:part name="parameters" element="tns:authenticateRequest"/>
      </wsdl:message>
      <wsdl:message name="authResponse">
       <wsdl:part name="result" element="tns:authenticateResponse"/>
      </wsdl:message>
      <wsdl:message name="CustomFault">
       <wsdl:part name="CustomFault" element="tns:customFault"/>
      </wsdl:message>
      <wsdl:portType name="AuthenticateServiceInterface">
            <wsdl:operation name="authenticate">
        <wsdl:input message="wns:authRequest" />
            <wsdl:output message="wns:authResponse" />
        <wsdl:fault name="CustomFault" message="wns:CustomFault"/>
       </wsdl:operation>
      </wsdl:portType>
      <wsdl:binding name="AuthenticateServiceSoapBinding" type="wns:AuthenticateServiceInterface">
              <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
       <wsdl:operation name="authenticate">
        <soap:operation soapAction=""/>
        <wsdl:input>
         <soap:body use="literal"/>
        </wsdl:input>
            <wsdl:output>
                    <soap:body use="literal"/>
            </wsdl:output>
            <wsdl:fault name="CustomFault" >
                       <soap:fault name="CustomFault" use="literal" />
               </wsdl:fault>
       </wsdl:operation>
      </wsdl:binding>
      <wsdl:service name="AuthenticateServiceService">
       <wsdl:port name="AuthenticateService" binding="wns:AuthenticateServiceSoapBinding">
        <soap:address location="http://10.236.14.6:8080/axis/services/AuthenticateService"/>
       </wsdl:port>
      </wsdl:service>
    </wsdl:definitions>
    Axis generates the soap fault as below in detail tag as below
    <ns1:customFault xmlns:ns1="http://ws.examplenterprise.com">
    <ns1:customCd>123</ns1:customCd>
    <ns1:customMsg>Password is wrong</ns1:customMsg>
    <ns1:customExcp>CustomException</ns1:customExcp>
    </ns1:customFault>
    They are getting error like below while getting the fault message.
    <SAP:ApplicationFaultMessage namespace="http://ws.exampleenterprise.com">customFault<SAP:ApplicationFaultMessage>
    Question: Why it is throwing "ApplicationFaultMessage" for fault messages? is there any error in wsdl file in defining the elements? or style has to be different? or is it an namespace issue in the wsdl?
    Note: They are able to do it sucessfull for the response message.

    Hi,
    The answer is in your Question itself.
    XI Sequence
    1.First step is to identify the wsdl:Message element with the namespace http://ws.example.com/service
    2.The next step is to go to the part element in http://ws.exampleenterprise.com and map the fault message.
    To be simple in your case http://ws.example.com/service is the namespace of Fault Message and http://ws.exampleenterprise.com is the namespace of the fault message payload  (Fault XML Message).
    So even though the Fault XML Message has the namespace http://ws.exampleenterprise.com ,but if the fault namespace doesnot come with http://ws.example.com/service then Fault will not be triggered and processed in XI.
    I hope you get the difference between the two namespaces used and the implications of them.
    Fault is entirely different from respone.
    Its like exception in java. If you donot catch the correct exception, will the exception raised be caught? Similarly if your SOAP service doesnot invoke the fault message with correct namespace (http://ws.example.com/service ), you cannot invoke/catch the fault message in XI.
    Regards,
    Sudharshan N A

  • Fault message handling in abap client proxy

    Hi experts,
    i have scenario like this SAPECC---XI---WEBservice
    i was decided to using the ABAP CLIENT proxy in sender side and soap adapter communication in receiver side
    i will be get the wsdl file form client
    problem is i am in bit of confusion like  am i need to create fault message for this asychronous scenario?
      how can i create the fault message for this scenario(that WSDL) and how the abaperwill  handle those error
    thanks in advance

    Hi.
    You can use fault message but it won´t return a error to your ABAP Proxy because your interface is ASSYNC. The fault message generated will stop in Adapter Engine.
    If you need a return of the error, you have to change your interface to Sync mode.
    To get more information, follow the link below:
    Fault Message Type
    http://help.sap.com/saphelp_nwpi711/helpdata/en/dd/b7623c6369f454e10000000a114084/frameset.htm
    Best Regards.
    Bruno

  • Fault message not defined

    Hello!
    I have a problem to activate a business process in XI 3.0. In the Integration Repository I can activate it and there are no errors.
    However, if I go to SXI_CACHE the return code is 99 and it cannot be activated. I have executed a complete cache refresh but there is always the following error:
    Send step: Fault message '87794cf65e3d11d9b4f6d1dd0fc5e9ea' is not defined
    In the business process a client sends a request using the HTTP adapter. Then the process engine sends several requests in parallel to different SAP systems using the RFC adapter. The responses are collected and sent back to the client using the sync-async bridge.
    In the Integration Repository I have specified fault messages types for all synchronous message interfaces of my namespace. I have either referenced an imported RFC fault messages type or an external definition.
    How can I solve the error so that a functional runtime version is created? Thanks for your help.
    Regards, Tanja

    Hi!
    > you have to look in the properties of your steps
    > (probably send) for not referenced exceptions. Define
    > a exception branch and reference it.
    I have defined an exception branch for the send step which references an exception:
    http://www.obloid.de/temp/BPM1.jpg
    http://www.obloid.de/temp/BPM2.jpg
    The RFC exception is defined as fault message type:
    http://www.obloid.de/temp/BPM3.jpg
    Regards, Tanja

  • System Errors in fault Message.

    Hi All,
    Is it required to capture the system errors in an Inbound proxy scenario from class CX_AI_SYSTEM_FAULT. , or the fault message  will automatically get filled while a system error happen?
    We are using the method CL_PROXY_FAULT=>RAISE to raise the application errorrs from BAPI return.
    Regards,
    Sunil

    Hi,
       fault message are specific to application errors
        at inbound side and reported back to sender.
      which is different from system error class i.e
       CX_AI_SYSTEM_FAULT.
    please check the help content and blog on fault message types.
    http://help.sap.com/saphelp_nw04s/helpdata/en/dd/b7623c6369f454e10000000a114084/frameset.htm
    Fault Message Types - A Demo (Part 1)
    warm regards
    mahesh.

  • PI 7.0 SOAP message reply HTTP 500 and after the fault message

    Hello Everybody,
    I have the scenario RFC -> XI -> SOAP in synchronous mode.
    I use for the mapping XSLT because I have to put some dynamic data comming from the RFC in the header of envelope.
    At level of adapter receiver SOAP , I flag the "do not use envelop"
    In normal, that works .
    When the is an fonctionnal error in SOAP service, it sends me back an error HTTP 500 and afterwards the fault message in a soap envelop format. In that case, how can I pass over this error to treat the envelop because in adapter, it is stopped and it returns a short dump to the RFC.
    Is there somebody who can help me with this problem ?
    Thanks in adavance for your answers .
    Regards.
    Eric.

    Hi,
    In case of a SOAP error while processing the request, the SOAP HTTP server MUST issue an HTTP 500 "Internal Server Error" response and include a SOAP message in the response containing a SOAP Fault element
    Thanks,
    RamuV

  • Sync/Async bridge via JMS with FAULT messages

    Hello all,<br><br>
    I set up a sync/async bridge scenario with using of JMS communication channel (SAP - JMSReceiverCC - JMSServer and application - JMSSenderCC - SAP). The normal communication works fine.<br>
    But what we can not solve is the Fault Message handling. If there is a application error behind the JMS, a fault message is generated instead of proper application response and sent back to XI. Without any additional setup of JMS Sender CC the processing of the message ends with "MAPPING - EXCEPTION_DURING_EXECUTE", because normal "response mapping" is executed instead of "fault message mapping". This is correct behavior without any discussion.<br><br>
    [SAPhelp|http://help.sap.com/saphelp_nw70/helpdata/en/45/202845de34072ce10000000a155369/frameset.htm] says that there are 2 module parameters to be set : fault, faultNamespace. The description is rather vague, so let's see, what the "NotifyResponseBean" does, when parameters fault/faultNamespace are filled:<br><br>
    <pre>if(fault != null && faultNamespace != null)
      if(faultNamespace.equals("http://sap.com/xi/XI/System"))
        ((XIMessage)message1).setMessageClass(MessageClass.SYSTEM_ERROR);
        ((XIMessage)message1).setError(fault, "no additional information");
      } else
        ((XIMessage)message1).setMessageClass(MessageClass.APPLICATION_ERROR);
        ErrorInfo errorinfo = message1.createErrorInfo();
        errorinfo.setAttribute("ApplicationFaultInterface", fault);
        errorinfo.setAttribute("ApplicationFaultInterfaceNamespace", faultNamespace);
        errorinfo.setAttribute("ErrorCode", fault);
        errorinfo.setAttribute("AdditionalErrorText", "no additional information");
        message1.setErrorInfo(errorinfo);
    } else
      ((XIMessage)message1).setMessageClass(MessageClass.APPLICATION_RESPONSE);
    }</pre><br>
    The code is pretty straight forward so one could assume, that it's the name and namespace of inbound synchronnous message interface what is supposed to be filled in the values of each parameter. And from that kind of information SAP XI can evolve how to handle the response, actually the fault.<br>
    Unfortunatelly the real situation is different - every time the fault message is generated and sent back to XI, the response is correctly corelated with the request message, "WaitResponseBean" and "NotifyResponseBean" are finished correctly and the processing crashes in messaging class on following exception:<br><br>
    java.lang.NullPointerException at java.util.Hashtable.put(Hashtable.java:592) at
    com.sap.aii.messaging.mo.MessageContext.setAttribute(MessageContext.java:140) at
    com.sap.aii.adapter.xi.ms.XIMessage.updateHeaders(XIMessage.java:4244) at
    com.sap.aii.adapter.xi.ms.XIMessage.getTransportHeaders(XIMessage.java:570) at
    com.sap.aii.af.ra.ms.impl.ServerConnectionImpl.request(ServerConnectionImpl.java:212) at
    com.sap.aii.af.ra.ms.impl.core.transport.http.MessagingServlet.doPost(MessagingServlet.java:337) at ...
    <br><br>
    Is there anyone, who can put more light on JMS sync/async bridge fault handling ???
    <br><br>
    Thank you ...<br>
    Regards
    Tomas

    Hello again,
    I proceed in investigation little more, but the main problem has not been solved. I found that the problem is not even in WaitResponseBean (placed in JMCReceiverCC). This bean is woken up properly on base of proper CorrelationID. See the log:
    2009-10-15 11:00:33 Success WRB: entering WaitResponseBean
    2009-10-15 11:00:33 Success WRB: retrieving the message for f1ea1fc0-b96d-11de-9b68-00144f4acd86 ...
    2009-10-15 11:00:46 Success WRB: retrieved the message: ApplicationError
    2009-10-15 11:00:46 Success WRB: leaving WaitResponseBean
    I think, that the problem is somewhere within main messaging functionality. I suppose that on base of exception message:
    com.sap.aii.messaging.mo.MessageContext.setAttribute(MessageContext.java:140) at
    which is generated.
    Any ideas or comments ?
    Thank you in advance.
    Regards
    Tomas

  • Routing of messages to different interfaces via HTTP using one single URL.

    Hi all,
    I'm working on an inbound scenario. Messages are coming to SAP via HTTP adapter and i'm using a unique URL of every interface. But what is required is one single URL for all interfaces without any dropbox in PI, i.e. all messages will be pushed to one URL and i have to route them to their respective interfaces, there is no storage involved in PI box.

    Shamit2903 wrote:
    Hi all,
    >
    > I'm working on an inbound scenario. Messages are coming to SAP via HTTP adapter and i'm using a unique URL of every interface. But what is required is one single URL for all interfaces without any dropbox in PI, i.e. all messages will be pushed to one URL and i have to route them to their respective interfaces, there is no storage involved in PI box.
    logically this is not a possibility.
    But in case you are looking at a generic interface then you will have to handle this using;
    1.  a generic Data type to accommodate all required structures
    2. use conditional routing in configuration to execute further transformations.
    I wouldnt recommend this though.

  • Send data via HTTP and wait 10 Seconds before sending next Message

    Hi Folks,
    I am doing an IDOC - XI - HTTP scenario.
    after sending a message via the HTTP-receiver I have to wait up to 10 Seconds, before my partner accept the next Message.
    Is there a way to configure the HTTP-receiver to wait?
    Thanks,
    Chris

    Hi Chris,
    You can use ccBPM for this scenario.
    Scenario 1 :
    1 IDOC contains multiple records, so you can convert to multiline items.
    Loop base on the multiline items (Block Step).
        Send Step for sending http request.
        wait step to wait for 10 seconds.
    Scenario 2 :
    1 IDOC contains only single record. so you need to collect the IDOC until certain time.
    Loop base on the multiline items (Block Step).
        Send Step for sending http request.
        wait step to wait for 10 seconds.
    Regards
    Fernand

Maybe you are looking for

  • Real Nokia 5610 doesn't play Video in QVGA at 30fp...

    Hi all, I really disappoint that my Nokia 5610 doesn't play any resolution of video at 30fps, even i've tried whatever bitrate, whatever resolution (QVGA, QCIF, ...), whatever audio bitrate, it still can't play back smoothly with 30fps, onlt 15fps it

  • Discoverer URL - Hide password without having to use public connection

    Hi, I would like to call Discoverer Viewer without having to expose the schema password and without having to use public connections. Is this possible? Disco Viewer is called directly from my application, with custom authorization and authentication.

  • Glossy Screen Low Down on MacBook Pro!!

    I am reading threads that have people that have the glossy screen option on the MacBook Pros. To those that have them can you please give a really detailed description of this screen with comparisons to the antiglare coating screens and the MB glossy

  • Request: PDF Viewer plug-in for Firefox

    So, just what is wrong with Adobe? Shouldn't this be a no-brainer?

  • On demand streaming help

    Can anyone help me? Fogive me for sounding dumb, but i need help! I am trying to provide On-Demand streaming of games for our recreation program. I having a problem streaming those large files using windows media 9, and i am currently experiencing bu