Biztalk 2006 (not r2) - original soap fault capturing

Hi,
I'm working on BizTalk 2006 (NOT R2) and using the old Soap Adapter. Is there a way I can get hold of the original soap fault that was received by the adapter rather than the one that the adapter itself generates (where it adds NACK) to the response?
Thanks,
--Anoop

Let me explain ...
This is what end system web service returns as a fault ...
<NS1:Envelope xmlns:NS1="http://schemas.xmlsoap.org/soap/envelope/">
<NS1:Body>
<NS1:Fault>
<faultcode>NS1:Server</faultcode>
<faultstring>User generated exception: xyz </faultstring>
<faultactor/>
<detail>
<ErrorSummary>
<ErrorCode>EC0001</ErrorCode>
<ErrorMsg>Unknown system error.</ErrorMsg>
<ErrorSystem>SomeSystemName</ErrorSystem>
</ErrorSummary>
</detail>
</NS1:Fault>
</NS1:Body>
</NS1:Envelope>
This is what SOAP Adapter converts it to by default:
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP:Body>
<SOAP:Fault>
<faultcode>Microsoft BizTalk Server Negative Acknowledgment </faultcode>
<faultstring>An error occurred while processing the message, refer to the details section for more information </faultstring>
<faultactor>http://somewebserviceurl</faultactor>
<detail>
<ns0:NACK Type="NACK" xmlns:ns0="http://schema.microsoft.com/BizTalk/2003/NACKMessage.xsd">
<NAckID>{0381BF90-CFCC-403C-BB61-9B0D831F7CB9}</NAckID>
<ErrorCode>0xc0c01f07</ErrorCode>
<ErrorCategory>0</ErrorCategory>
<ErrorDescription>SoapException: User generated exception: xyz</ErrorDescription>
</ns0:NACK>
</detail>
</SOAP:Fault>
</SOAP:Body>
</SOAP:Envelope>
Now when you create a catch exception block with a SoapException object, what you'll get basically is the Fault after it is converted by SOAP Adapter. What gets logged to the event log as error text is the text contained in ErrorDescription node of NACK.
What I want to access is <detail> section of the original fault message.
Thanks,
--Anoop

Similar Messages

  • Business Service SOAP Fault ignored by ALSB

    I have a SOAP service specifically returning a SOAP fault. ALSB doesn't recognize it as an fault and continues processing as if everything is OK.
    Does anyone know how to get ALSB to recognize a SOAP fault for what it is? Here's the response returned to ALSB:
    <SOAP-ENV:Fault xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <faultactor/>
    <faultcode>SOAP-ENV:</faultcode>
    <faultstring>TEST ERROR 1</faultstring>
    <detail>
    <NS1:EOSGAPIError xsi:type="NS1:EOSGAPIError" xmlns:NS1="urn:eschelon.com/osg/1_0-OSGAPILib">
    <exceptionClassName xsi:type="xsd:string">Exception</exceptionClassName>
    <method xsi:type="xsd:string"/>
    </NS1:EOSGAPIError>
    </detail>
    </SOAP-ENV:Fault>

    Let me clarify: If I perform a "route" to the SOAP service, the fault returns and is passed along as the new body of the message - no errors detected.
    If I do a "service callout" to the SOAP service, I get a BEA-382501 error "ALSB Service Callout action received an unrecognized response".
    Any ideas why ALSB does not recognize the soap fault that it receives in the response?
    Here's the fault contents, you can see the soap fault returned in the detail element:
    <con:fault>
    <con:errorCode>BEA-382501</con:errorCode>
    <con:reason>ALSB Service Callout action received an unrecognized response</con:reason>
    <con:details>
    <con1:UnrecognizedResponseDetail>
    <con1:detail><SOAP-ENV:Fault xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <faultactor/> <faultcode>SOAP-ENV:err_data_val_failed</faultcode> <faultstring>Service address has not been validated</faultstring> <detail> <NS1:EOSGAPIError xsi:type="NS1:EOSGAPIError" xmlns:NS1="urn:eschelon.com/osg/1_0-OSGAPILib"> <exceptionClassName xsi:type="xsd:string">EOSGAPIError</exceptionClassName> <method xsi:type="xsd:string"/> </NS1:EOSGAPIError> </detail> </SOAP-ENV:Fault></con1:detail>
    <con1:http-response-code>200</con1:http-response-code>
    </con1:UnrecognizedResponseDetail>
    </con:details>
    <con:location>
    <con:node>Get Proposal</con:node>
    <con:pipeline>Get Proposal_request</con:pipeline>
    <con:stage>Get Proposal From OSG</con:stage>
    <con:path>request-pipeline</con:path>
    </con:location>
    </con:fault>
    P.s. yep - same person the original post, just decided I didn't like my email displaying as my username.

  • Throw a new soap fault

    Hello to Everyone,
    I'm a OSB 10.3.1 newbie, and i want to throw a new soap fault.
    The problem is that the error code & error message comes in the body of the response message (not in a soap fault). From this response i capture the errors (code & message) and assign them to context variables.
    How can i throw a new soap fault with the values of the context variables?.
    Thanks

    Hi,
    The body of the response is in fact where you would create the soap fault (for SOAP services of course). The only trick is that the child element of the body variable must be a <soap-evn:Fault> element.
    What I've done in some projects is define an XQuery transformation to create the soap fault. The soap fault has a detail element where you can add your custom exceptions (those defined in your WSDL). As input arguments to the XQuery transformation you can send the error code and message that come in the fault variable plus any other arguments you might want to add.
    For example (I'm omitting the namespace declarations, variable declarations that the transformation should have):
    declare function xf:createSOAPFault($errorCode as xs:string, $errorMessage as xs:string, $operationId as xs:string)
        as element(env:Fault) {
    <env:Fault>
        <faultcode>env:Server</faultcode>
        <faultstring>{ $errorMessage }</faultstring>
        <detail>
            <ns0:MyException>
                <ns0:operationId>{ $operationId }</ns0:operationId>
                <ns0:errorCode>{ $errorCode }</ns0:errorCode>
                <ns0:errorMessage>{ $errorMessage }</ns0:errorMessage>
            </ns0:MyException>
        </detail>
    </env:Fault>
    };If your client is using JAX-WS for example, you could do something like this:
    try {
       // invoke ws
    } catch (MyException e) {
        log("Operation ID: " + e.getOperationId() + ", Error Code: " + e.getErrorCode() + ", Message: " + e.getErrorMessage());
    }

  • How to propogate SOAP fault from JPD to JWS

    Hello,
    I am new to weblogic and i am facing a problem with propogation of SOAP Fault from JPD to Process Control to JWS.
    I need to throw a custom SOAP Fault from JPD to the client of the JWS which wraps this JPD.
    Currently when i set and throw the soap fault from JPD it goes to the Process Control but the Process Control in turn throws a ProcessControlException to the JWS. Does any one know how can i retrieve the original SOAP Fault in the JWS?
    Thanks

    Hello man.....
    You cannot get the the original SoapFault by usually try/catch operation, but there is a trick to do that....
    When you use your service control do that:
    try{
    yourServiceControl.yourMethodThatThrowsException();
    }catch(ServiceControlException e){
    //With this "e" variable you can retrieve the exception
    //looking for the the methods in it
    //e.getXXXX
    //you will find what you need
    I hope it helps you
    Sincerely
    messenger:[email protected]
    e-mail:[email protected]

  • How to capture SOAP fault when using "Do not use SOAP envelope" parameter

    Hi,
    we have a synchronous  RFC -> XI -> Web Service scenario. The Web Service requires some custom SOAP header elements for user authorization which forced us create the entire SOAP message in a message mapping and to set the "Do not use SOAP envelope" parameter in the receiving SOAP adapter.
    In order to capture the SOAP fault message from the Web Service we have created a message interface with a fault message and also created an interface mapping with a fault message mapping.
    Our problem is that the fault message is not populated when we get a SOAP fault message back from the Web Service. Is this due to the fact that we have set the  "Do not use SOAP envelope" parameter?
    Thanks in advance!
    Stefan
    Message was edited by:
            Stefan Nilsson

    Hi Bhavesh,
    I have exaactly same scenario. But the only difference is that the Successful payload is also not coming into PI.
    The request is successfully hittng the webservice.
    Please guide me on how to capture the paylod.
    I am using the WSDL provided by the thirdparty but sill the message is not coming into PI.

  • ABAP proxy exception to SOAP fault and vice versa not getting mapped

    Hi there,
    I have these scenario's: ABAP proxy to SOAP (AXIS framework) and the other way around, synchronous, using AAE.
    When declaring the Synchronous Service interfaces we also defined error message types in order to pass system and application exceptions back to the service consumers.
    The behavior we are observing is as follows;
    When an exception is generated on the ABAP proxy, the error message type is correct generated and filled with the corresponding values in the ABAP proxy runtime. However, when the response arrives at the service consumer, it only contains a SOAP fault filled with some kind of generic PI mapping exception information.
    1. Why is the original ABAP proxy exception not mapped/passed into the SOAP response?
    2. What can we do in order to change that situation?
    3. Does it has to do with the use of the AAE - Advanced Adapter Engine or the AXIS framework?
    PS: We have performed a test of the Operation Mapping - OM using the ABAP exception as input and it did work correctly, so the error structure seems to be Ok.
    Many thanks for your replies.
    Edited by: Roberto Viana on Jul 26, 2010 8:30 PM

    Problem was caused by some differences in namespaces between source and target.

  • Error:SOAP: response message contains an error XIAdapter/PARSING/ADAPTER.SOAP_EXCEPTION - soap fault: Server was unable to read request. --- There is an error in XML document (1, 447). --- Input string was not in a correct format.

    Hi All,
        We have a scenario of FTP-->PI---> Webservice.  While triggering the data in the FTP, it is failing in the PI with the below error
    SOAP: response message contains an error XIAdapter/PARSING/ADAPTER.SOAP_EXCEPTION - soap fault: Server was unable to read request. ---> There is an error in XML document (1, 447). ---> Input string was not in a correct format.
    Can you please help?

    Hi Raja- It seems to be a data quality issue.
    Check for the value @ 1447 position in the xml message that you are trying to send to web service..
    may be a date filed/decimal value which is not in expected format.

  • Error capturing SOAP fault for Sync Messages

    Hi
    We have a Sync interface which makes a Proxy call from ECC to PI and then PI makes Soap Sync call to Web application. We are having issues when handling Exceptions. Sender is getting misleading errors in response, even though they are application errors the proxy sender is getting error like MappingObjectNotFound.
    When debug the PI system, PI is truncating error info when it return the reponse.
    Below is the scenario of Synchronous interface:
    ECC(Proxy) -> PI(Soap Receiver Adapter) -> MasterDataApp-(Webserver)
    Below is the actual response from Webserver (Extracted via TCPGW sniffer):
    <?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
    <soapenv:Fault>
    <faultcode>soapenv:Server.userException</faultcode>
    <faultstring>*java.rmi.RemoteException: No Messages Found*</faultstring>
    <detail>
    <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">hostname.com</ns1:hostname>
    </detail>
    </soapenv:Fault>
    </soapenv:Body>
    </soapenv:Envelope>
    But PI receives this response payload like this :
      <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    - <!--  XML Validation Inbound Channel Response
      -->
      <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">hostname.com</ns1:hostname>
    and then Sync Request mesasge fails with below error because of the unexpected response payload as shown above:
      <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    - <!--  Call Adapter
      -->
    - <SAP:Error SOAP:mustUnderstand="1" xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
      <SAP:Category>XIServer</SAP:Category>
      <SAP:Code area="MAPPING">NO_MAPPINGPROGRAM_FOUND</SAP:Code>
      <SAP:P1>Object ID B0CC6B27847A368AA04F4171EF6460F4 Software Component 86524CE0304911DEAE48CC6C83461631</SAP:P1>
      <SAP:P2 />
      <SAP:P3 />
      <SAP:P4 />
      <SAP:AdditionalText />
      <SAP:Stack>Mapping program is not available in runtime cache: Object ID B0CC6B27847A368AA04F4171EF6460F4 Software Component 86524CE0304911DEAE48CC6C83461631</SAP:Stack>
      <SAP:Retry>M</SAP:Retry>
      </SAP:Error>
    Also in the response message see this error message:
      <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    - <!--
    XML Validation Inbound Channel Response
      -->
    - <SAP:Error SOAP:mustUnderstand="1" xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
      <SAP:Category>Application</SAP:Category>
      <SAP:Code area="UNKNOWN">APPLICATION_ERROR</SAP:Code>
      <SAP:P1 />
      <SAP:P2 />
      <SAP:P3 />
      <SAP:P4 />
      <SAP:AdditionalText>application fault</SAP:AdditionalText>
      <SAP:ApplicationFaultMessage namespace="http://xml.apache.org/axis/">hostname</SAP:ApplicationFaultMessage>
      <SAP:Stack />
      <SAP:Retry>M</SAP:Retry>
      </SAP:Error>
    Please let me for any clues how to handle this error response.
    Thanks,
    laxman

    Hi Laxman,
    SOAP Adapter cannot handle fault responses. I understand your issue. You even want to send the errorneous response from the Webservice as a payload back to the sender. But because of application error from Webservice, you are getting an error in the response message (Mapping Not found). SOAP Adapter cannot handle application error (i.e you will not get the errorneous response in form of payload) . For details please read below:
    The receiver adapter expects a SOAP message as response. For synchrnous calls, a successful response should be returned with HTTP 200. In this case, the content of the SOAP body will be returned to the caller as the response payload. When some error occurs, the SOAP message may contain the SOAP fault element. In this case, when the fault detail element is not empty, its content will be returned as the fault payload in an application error message. For others, a system error message will be returned to the caller.
    HTTP/1.1 200 OK
    Content-Type: text/xml; charset="utf-8"
    <SOAP:Envelope
    xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP:Body>
    <m:GetLastTradePriceResponse xmlns:m="Some-URI">
    <Price>34.5</Price>
    </m:GetLastTradePriceResponse>
    </SOAP:Body>
    </SOAP:Envelope>
    will result in an application response message with response payload
    <m:GetLastTradePriceResponse xmlns:m="Some-URI">
    <Price>34.5</Price>
    </m:GetLastTradePriceResponse>
    HTTP/1.1 500 Internal Server Error
    Content-Type: text/xml; charset="utf-8"
    <SOAP:Envelope
    xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP:Body>
    <SOAP:Fault>
    <faultcode>SOAP:MustUnderstand</faultcode>
    <faultstring>SOAP Must Understand Error</faultstring>
    </SOAP:Fault>
    </SOAP:Body>
    </SOAP:Envelope>
    will result in a system error message.
    HTTP/1.1 500 Internal Server Error
    Content-Type: text/xml; charset="utf-8"
    <SOAP:Envelope
    xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP:Body>
    <SOAP:Fault>
    <faultcode>SOAP:Server</faultcode>
    <faultstring>Server Error</faultstring>
    <detail>
    <e:myfaultdetails xmlns:e="Some-URI">
    <message>My application didn't work</message>
    <errorcode>1001</errorcode>
    </e:myfaultdetails>
    </detail>
    </SOAP:Fault>
    </SOAP:Body>
    </SOAP:Envelope>
    will result in an application error message with fault payload
    <e:myfaultdetails xmlns:e="Some-URI">
    <message>My application didn't work</message>
    <errorcode>1001</errorcode>
    </e:myfaultdetails>
    In order to send the erroneous response as a payload to the sender, you should develop flow in below manner:
    ECC(Proxy) -> PI --> ECC(Proxy)
    In PI make a SOAP lookup. The response of the SOAP lookup will contain the response given by the WebService (it can be a vaid response or an application error in WebService). Now map this response to the proxy...In this way you can handle the application error msgs from webservice..
    I hope this helps you...
    Regards,
    Rakesh Sharma

  • Receiver SOAP Adapter Problem-soap fault: Server did not recognize the valu

    I have a scenario for service orders using async call : IDOC-XI-SOAP.
    I used the XML Spy tool to test the Service order's web services and it works fine. I imported the same WSDL file in XI. When I send a SOAP message from XI, I get a following error in the adapter engine.
    <i>MP: exception caught with cause com.sap.aii.af.ra.ms.api.RecoverableException: SOAP: response message contains an error XIAdapter/PARSING/ADAPTER.SOAP_EXCEPTION - soap fault: Server did not recognize the value of HTTP Header SOAPAction: AddUpdateCostObjectLevel1.</i>
    Can someone please help me...
    Thanks in advance!
    Mrudula

    This problem is resolved by me by passing the "http://company's URL/AddUpdateCostObjectLevel1" in the SOAP action.
    Thanks to all for your input.
    Mrudula

  • RFC to SOAP fault message not catched

    Hi All
    I have a scenario where RFC is being send from ECC system I then call a web service, The webservice returns me a fault error messages when for example the order on the webservice system does not exist.
    I created a exception in the RFC and created the mapping for the fault message.
    When call ing the webservice I get error in comunication chanell:
    Message processing failed. Cause: com.sap.engine.interfaces.messaging.api.exception.MessagingException: SOAP: response message contains an error XIAdapter/HTTP/ADAPTER.HTTP_EXCEPTION - HTTP 500 Internal Server Error
    I have tried adding:
    XMBWS.NoSOAPIgnoreStatusCode    =     true
    In the modules tab but still not getting soap fault.
    below is response from webservice if I use other soap client:
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
       <soap:Body>
          <soap:Fault>
             <faultcode>soap:Client</faultcode>
             <faultstring>Unmarshalling Error: cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type 'nonEmptyExternalReference'.</faultstring>
          </soap:Fault>
       </soap:Body>
    </soap:Envelope>

    Hi,
    I don't think so you can catch 500 internal server errors using falut messages.
    Your target system has to capable of sending error messages in valid XML format then only you can catch them.coming too fault message concept we will implement in ABAP server proxies scenarios where we have a opportunity to catch errors in send as response. but i doubt in SOAP receiver scenarios.
    Regards,
    Raj

  • SOAP Capture  ((SOAP:FAULT))

    Hello
    Since SAP XI am consuming a web service NET. If this service has errors send a SOAP FAULT.
    How it catches on SAP XI this message?

    Solve problem.
    I still can not solve this problem.
    I have included the field to WSDL and SOAP FAULT yet so I can not get this information.
    <wsdl:fault name="SolicitarOrdenPagoFault"/>
    <s:schema elementFormDefault="qualified" targetNamespace="http://LarrainVial.WebServices.SAP2LV/Tesoreria">
    <s:complexType name="WSSAP2LVSOAPFaultType">
    <s:sequence>
    <s:element name="faultcode" type="s:string"/>
    <s:element name="faultstring" type="s:string"/>
    <s:element name="faultactor" type="s:string"/>
    <s:element name="detail">
    <s:complexType>
    <s:sequence>
    <s:element name="message" type="s:string"/>
    <s:element name="description" type="s:string"/>
    </s:sequence>
    </s:complexType>
    </s:element>
    </s:sequence>
    </s:complexType>
    </s:schema>
    Edited by: Claudio Enrique León Hernández on Jan 30, 2008 11:10 PM
    I still can not solve this problem.
    I have included the field to WSDL and SOAP FAULT yet so I can not get this information.
    Edited by: Claudio Enrique León Hernández on Sep 8, 2008 9:20 PM
    Edited by: Claudio Enrique León Hernández on Sep 8, 2008 9:20 PM

  • OSB does not return SOAP fault

    We created a custom webservice using a WSDL.
    We have the following code within the generated Impl class:
    LOG.debug("caught Exception sendAlertMessage:" + exc.getMessage());
    SOAPFault sf = null;
    try {
    SOAPFactory fac = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
    sf = fac.createFault(exc.getMessage(), new QName("http://www.w3.org/2003/05/soap-envelope", "Receiver"));
    }catch (SOAPException sfexc){
    LOG.debug("error creating SOAP fault. " + sfexc.getMessage());
    System.out.println("error creating SOAP fault.");
    sfexc.printStackTrace();
    throw new SOAPFaultException(sf);
    We dont have a fault defined in the WSDL operation, but we were following this article, which says we don't need that to be defined:
    http://one-size-doesnt-fit-all.blogspot.com/2009/05/jax-ws-throwing-generic-soapfaults_06.html
    The file shows it was generated using JAX-WS 2.1.3
    We are using OSB 10gR3 and testing the web service with SOAP-UI. When an invalid message hits this service it gets to this code. The log statements show that the soap fault is created successfully. The throw new SOAPFaultException(sf) line is called but when you check the response headers in SOAP-UI the status is #status#     HTTP/1.1 202 Accepted. This should be HTTP 500 if the SOAP fault worked.
    This is an async webservice and therefore does not have a response message either.
    Any thoughts would be helpful.Thank you.

    what does OSB do, it simply routes the SOAP message to your Web Service?
    In fact if it's an asynchronous (messaging type, no response) service which is invoked, it seems OK that you don't get any fault;
    the message has been successfully routed to destination, if the destination fails it's another story that probably you will only be able to detect by a timeout on the client side.
    also, "publish"ing a message doesn't report the error to the caller.
    The only case where the caller gets the fault is by routing to a request-reply service.
    If I am wrong please correct me.

  • Not able to catch soap faults

    My process is not able to catch soap faults. I can see the fault being thrown on the TCPMon Tunnel UI.
    Following is the fault I see on the Tunnel UI :
    HTTP/1.1 500 Internal Server Error
    Server: WebSphere Application Server/5.1
    Expires: Thu, 01 Dec 1994 16:00:00 GMT
    Set-Cookie: JSESSIONID=0000efI8on7qoNUcMQ3EHHBcdwI:-1;Path=/
    Cache-Control: no-cache="set-cookie,set-cookie2"
    Content-Type: text/xml; charset=utf-8
    Content-Length: 555
    Content-Language: en-US
    Connection: close
    <?xml version='1.0' encoding='UTF-8'?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <SOAP-ENV:Body>
    <SOAP-ENV:Fault>
    <faultcode>SOAP-ENV:Server</faultcode>
    <faultstring>com.mycompany.e2sc.soap.E2ScWebServiceSoap.endTransaction(com.mycompany.e2sc.xsd.StartTransactionRequest) -- no signature match</faultstring>
    <faultactor>/e2sc/servlet/rpcrouter</faultactor>
    </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    Any ideas ??
    Thanks
    Anand

    This is a known regression on 2.0.10. It is fixed in 2.0.11. -Edwin

  • Oracle SOA Suite - SOAP Fault content not being returned

    It starts with a fairly standard scenario: from within a BPEL process in Oracle SOA Suite, I’m making a call to an external web service. The not-so-standard part: the owner of the external web service has decided to return all errors in the form of a SOAP fault. Unfortunately, this error schema is not included in the WSDL. If we call the external web service directly (via SOAPUI, for example), we get the following, including a nice explanation of why it errored out:
    <soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:err="error.xml.common">
    <faultcode>soapenv:Server</faultcode>
    <faultstring>Undefined</faultstring>
    <detail>
    <err:ErrorList>
    <err:Error>
    <err:Application>CIA</err:Application>
    <err:Code>1031</err:Code>
    <err:Description>Field value is invalid Credit Card Number V failed mod10 check</err:Description>
    <err:ServerTime>2010-02-25T17:37:38.472-05:00</err:ServerTime>
    </err:Error>
    <err:StackTrace>subscription.memberservices.common.exception.ServiceInvocationException: 1031~Field value is invalid Credit Card Number V failed mod10 check
    at subscription.memberservices.common.client.http.CiaHttpClient.checkForErrors(CiaHttpClient.java:120)
    at subscription.memberservices.common.client.http.CiaHttpClient.enroll(CiaHttpClient.java:50)
    at subscription.memberservices.na.processes.enroll.EnrollProcess.callCiaEnroll(EnrollProcess.jpd:1003)
    at subscription.memberservices.na.processes.enroll.EnrollProcess_wf$ImplControlSend14.invoke(EnrollProcess_wf.java:145)
    at com.bea.wli.bpm.runtime.Perform.execute(Perform.java:32)
    ... 38 more</err:StackTrace>
    </err:ErrorList>
    </detail>
    </soapenv:Fault>
    No matter what I try, however, I can’t fetch the information in the “detail” element above. When examining the audit trail in SOA Suite, I can only see this:
    <fault>
    <faultType>0</faultType>
    <remoteFault>
    <part name="summary">
    <summary>Undefined</summary>
    </part>
    <part name="detail">
    <detail>javax.xml.ws.soap.SOAPFaultException: Undefined</detail>
    </part>
    <part name="code">
    <code>null</code>
    </part>
    </remoteFault>
    </fault>
    It seems SOA Suite is “protecting” my service from the other SOAP fault elements instead of passing everything back, only passing the faultstring element. I even tried adding an ErrorList schema to match theirs but to no avail. Anyone out there have any experience, luck or ideas with this problem?
    Thanks for the assistance,
    Rob

    Re: Oracle SOA suite server does not startBut I can see that server has got started -
    <21-Jul-2010 12:04:47 o'clock BST> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode>em application gets deployed on admin server and not on SOA server. You may access em console on - http://<hostName>:<admin_server_port>/em
    By default admin server port is 7001.
    Regards,
    Anuj

  • Use BizTalk 2006 as a proxy for an external Web Service

    Hi
    We have a solution that is going to work just as a proxy for an external Web Service.
    It works like this:
    1. We have a Request-Response receive port that receives the calls for the WS.
    2. Different Static Solicit-Response ports that have filters for each method in the WS receive the requests and then send them to the external WS.
    3. The response from the external WS is then sendt back to the caller via the Request-Response port in point 1.
    This generally works like it should. The only problem i have is when the external WS returns a Fault message. I get this fault from the external WS:
    <s:Fault xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>s:Client</faultcode><faultstring xml:lang="nb-NO">Some error message the caller should see.</faultstring><detail><GenericFault
    xmlns="http://register.test.com/Common" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><ErrorCode>SomthingWentWrong</ErrorCode><Message>Some error message the caller should see.</Message></GenericFault></detail></s:Fault>
    This message then failes on BizTalk and BizTalk returns this Fault message to the caller:
    <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP:Body><SOAP:Fault><faultcode>Microsoft BizTalk Server Negative Acknowledgment
    </faultcode><faultstring>An error occurred while processing the message, refer to the details section for more information </faultstring><faultactor>/Hemit.BizTalk.NHN.Position.ws/IPositionService.asmx</faultactor><detail><ns0:NACK
    Type="NACK" xmlns:ns0="http://schema.microsoft.com/BizTalk/2003/NACKMessage.xsd"><NAckID>{7AC314FE-2CA3-44AE-8208-180495500481}</NAckID><ErrorCode>0xc0c016b7</ErrorCode><ErrorCategory>0</ErrorCategory><ErrorDescription>There
    is an error in XML document (1, 2).</ErrorDescription><ErrorDetail>&lt;Fault xmlns='http://schemas.xmlsoap.org/soap/envelope/'&gt; was not expected.</ErrorDetail></ns0:NACK></detail></SOAP:Fault></SOAP:Body></SOAP:Envelope>
    So the problem seems to be that the Request-Response port in point one will ONLY accept the real response that is specified in the response schema for that particular method, and not a Fault. And when it receives a fault, it generates its own Fault saying
    a Fault message was not expected.
    Does anyone know how i can be able to send the actual fault from the external WS all the way back to the caller on the inside?
    I know how to do it with an orchestration, but can not figure out how to get it done just with the ports.
    Kind regars
    John Viggo

    Hi John,
    Enable Propagate fault message
    on the WCF solict –response port.
    For the two-way send port, you can choose whether to forward
    SOAP fault messages on to the original caller over a solicit-response send port by selecting
    Propagate fault message. If this option is not selected, BizTalk Server will generate a NACK. What you see is the NACK.
    If it is selected, BizTalk Server will treat the message as a valid WCF response message from the external service and the response message will not be suspended because it is propagated.
    Then you need to map the fault message to the actual response in the map. Set this Fault-Message to Caller-Response map in the outbound map of the Requeust-Response port.
    In this case of messaging-only scenario, this method shall help in handling the fault message and passing fault details back to the caller. Refer the following articles for more details.
    Synchronous web services calls and Faults
    BizTalk and
    SOAPFault
    version issues
    If this answers your question please mark it accordingly. If this post is helpful, please vote as helpful.

Maybe you are looking for