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());
}

Similar Messages

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

  • Apex_web_service.make_request throws ORA-29273: HTTP request failed. How to get the soap fault XML?

    I am trying to call a web service using apex_web_service.make_request function.
    It works fine when all the parameters are correct. However, when something is wrong in the request XML, it throws an exception instead of returning the soap:fault message:
    ORA-29273: HTTP request failed
    ORA-06512: at "SYS.UTL_HTTP", line 1369
    ORA-29269: HTTP server error 500 - Internal Server Error
    ORA-06512: at "APEX_040200.WWV_FLOW_WEBSERVICES_API", line 130
    ORA-06512: at line 37
    I need to get back the soap:fault and parse it to display a proper error message to the users (e.g. what was wrong with the input), yet the call throws an exception instead of returning it.
    I am trying the exact same request from soapUI and it returns me the soap:fault below:
    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
       <soap:Body>
          <soap:Fault>
             <soap:Code>
                <soap:Value>soap:Receiver</soap:Value>
             </soap:Code>
             <soap:Reason>
                <soap:Text xml:lang="en">Fault occurred while processing.</soap:Text>
             </soap:Reason>
             <soap:Detail>
                <ns1:RegisterFault xmlns:ns1="http://www.exchangenetwork.net/wsdl/register/1">
                   <description xmlns:ns2="http://www.exchangenetwork.net/wsdl/register/1">The security token has expired.</description>
                   <errorCode xsi:type="ns2:RegisterErrorCode" xmlns:ns2="http://www.exchangenetwork.net/wsdl/register/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">E_TokenExpired</errorCode>
                </ns1:RegisterFault>
             </soap:Detail>
          </soap:Fault>
       </soap:Body>
    </soap:Envelope>
    How do I get this back from APEX?
    Thanks!

    Hi,
       I've just run into this.
       If the webservice returns a fault, such as:
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><soap:Fault><faultcode>soap:Server</faultcode><faultstring>INVALID_REQUESTER_INFO</faultstring></soap:Fault></soap:Body></soap:Envelope>
       then the user gets presented with an unfriendly error message and there's no chance to output a more friendly one.
       The response above is seen when testing the webservice, when run from the Form/Report page, we get something like:
    soap:ServerINVALID_REQUESTER_INFO
    Contact your application administrator.
    OK
       When OK button is clicked everything is rolled back and we don't even get the fault XML.
       It would be good if Apex could be optionally set to not give the unfriendly messages, so that we could code such a message ourselves.
       Unless anybody has a workaround for this, I guess that I'll have to see if I can code this in PLSQL.
    Regards,
    Chris

  • SOAP Fault Exception [Actor null]

    Hi All,
    Im trying to call a webservice from portal This web service is in ECC. When I try to call it, it throws the following error:
    #1.5 #00E0ED0BA5EF005C000000C500001E350004532D85C22E36#1217354889571#com.sap.portal.SOAPLogger#sap.com/irj#com.sap.portal.SOAPLogger#TESTUSER#9868##n/a##4b8f60d05d9911dda9db00e0ed0ba5ef#SAPEngine_Application_Thread[impl:3]_4##0#0#Warning#1#/System/Server#Java###Call failed
    [EXCEPTION]
    {0}#1#SOAP Fault Exception [Actor null] : CX_ST_MATCH_ELEMENT:XSLT exception.System expected element 'ItItem'
    <Host>undefined</Host>
    <Component>APPL</Component>
    <ChainedException>
      <Exception_Name>CX_SOAP_CORE</Exception_Name>
      <Exception_Text>CX_ST_MATCH_ELEMENT:XSLT exception.System expected element &apos;ItItem&apos;</Exception_Text>
    </ChainedException>
    <ChainedException>
      <Exception_Name>CX_SXMLP</Exception_Name>
      <Exception_Text>XSLT exception</Exception_Text>
    </ChainedException>
    <ChainedException>
      <Exception_Name>CX_ST_MATCH_ELEMENT</Exception_Name>
      <Exception_Text>System expected element &apos;ItItem&apos;: Main Program:/1BCDWB/WSSC9FCD3336732797F332| Program:/1BCDWB/WSSC9FCD3336732797F332| Line: 11| Valid:X</Exception_Text>
    </ChainedException>
    #1.5 #00E0ED0BA5EF005C000000C700001E350004532D85C23109#1217354889572#System.err#sap.com/irj#System.err#BHARDWS#9868##n/a##4b8f60d05d9911dda9db00e0ed0ba5ef#SAPEngine_Application_Thread[impl:3]_4##0#0#Error##Plain###SOAP Fault Exception [Actor null] : CX_ST_MATCH_ELEMENT:XSLT exception.System expected element 'ItItem'
    <Host>undefined</Host>
    <Component>APPL</Component>
    <ChainedException>
      <Exception_Name>CX_SOAP_CORE</Exception_Name>
      <Exception_Text>CX_ST_MATCH_ELEMENT:XSLT exception.System expected element &apos;ItItem&apos;</Exception_Text>
    </ChainedException>
    <ChainedException>
      <Exception_Name>CX_SXMLP</Exception_Name>
      <Exception_Text>XSLT exception</Exception_Text>
    </ChainedException>
    <ChainedException>
      <Exception_Name>CX_ST_MATCH_ELEMENT</Exception_Name>
      <Exception_Text>System expected element &apos;ItItem&apos;: Main Program:/1BCDWB/WSSC9FCD3336732797F332| Program:/1BCDWB/WSSC9FCD3336732797F332| Line: 11| Valid:X</Exception_Text>
    </ChainedException>
    #1.5 #00E0ED0BA5EF005C000000C800001E350004532D85C231DF#1217354889572#System.err#sap.com/irj#System.err#BHARDWS#9868##n/a##4b8f60d05d9911dda9db00e0ed0ba5ef#SAPEngine_Application_Thread[impl:3]_4##0#0#Error##Plain###We are in Exception and got the message778: SOAP Fault Error (n.a) : CX_ST_MATCH_ELEMENT:XSLT exception.System expected element 'ItItem'#
    Has anyone come across this? Please help by giving directions on how to fix this.
    Thanks
    SB

    Hi Alex,
    Please ignore the above bapi call, it is too complex since it is a custom BAPI that Im trying to call. For now, I am trying to call a very simple BAPI --> BAPI_CUSTOMER_GETDETAIL just to make sure that communication is happening.
    Here is the WSDL:
      <?xml version="1.0" encoding="utf-8" ?>
    - <wsdl:definitions targetNamespace="urn:sap-com:document:sap:rfc:functions" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="urn:sap-com:document:sap:rfc:functions">
    - <wsdl:documentation>
      <sidl:sidl xmlns:sidl="http://www.sap.com/2007/03/sidl" />
      </wsdl:documentation>
    - <wsdl:types>
    - <xsd:schema attributeFormDefault="qualified" targetNamespace="urn:sap-com:document:sap:rfc:functions">
    - <xsd:simpleType name="char1">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="1" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char10">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="10" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char130">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="130" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char16">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="16" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char2">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="2" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char20">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="20" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char220">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="220" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char3">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="3" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char30">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="30" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char31">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="31" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char32">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="32" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char35">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="35" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char4">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="4" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char5">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="5" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="char50">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="50" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="cuky5">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="5" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="date">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="10" />
      <xsd:pattern value="\d\d\d\d-\d\d-\d\d" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="lang">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="1" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="numeric3">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="3" />
      <xsd:pattern value="\d*" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:simpleType name="numeric6">
    - <xsd:restriction base="xsd:string">
      <xsd:maxLength value="6" />
      <xsd:pattern value="\d*" />
      </xsd:restriction>
      </xsd:simpleType>
    - <xsd:complexType name="BAPIRET2">
    - <xsd:sequence>
      <xsd:element name="TYPE" type="tns:char1" />
      <xsd:element name="ID" type="tns:char20" />
      <xsd:element name="NUMBER" type="tns:numeric3" />
      <xsd:element name="MESSAGE" type="tns:char220" />
      <xsd:element name="LOG_NO" type="tns:char20" />
      <xsd:element name="LOG_MSG_NO" type="tns:numeric6" />
      <xsd:element name="MESSAGE_V1" type="tns:char50" />
      <xsd:element name="MESSAGE_V2" type="tns:char50" />
      <xsd:element name="MESSAGE_V3" type="tns:char50" />
      <xsd:element name="MESSAGE_V4" type="tns:char50" />
      <xsd:element name="PARAMETER" type="tns:char32" />
      <xsd:element name="ROW" type="xsd:int" />
      <xsd:element name="FIELD" type="tns:char30" />
      <xsd:element name="SYSTEM" type="tns:char10" />
      </xsd:sequence>
      </xsd:complexType>
    - <xsd:complexType name="BAPIKNA101">
    - <xsd:sequence>
      <xsd:element name="FORM_OF_AD" type="tns:char30" />
      <xsd:element name="FIRST_NAME" type="tns:char35" />
      <xsd:element name="NAME" type="tns:char35" />
      <xsd:element name="NAME_3" type="tns:char35" />
      <xsd:element name="NAME_4" type="tns:char35" />
      <xsd:element name="DATE_BIRTH" type="tns:date" />
      <xsd:element name="STREET" type="tns:char35" />
      <xsd:element name="POSTL_CODE" type="tns:char10" />
      <xsd:element name="CITY" type="tns:char35" />
      <xsd:element name="REGION" type="tns:char3" />
      <xsd:element name="COUNTRY" type="tns:char3" />
      <xsd:element name="COUNTRNISO" type="tns:char3" />
      <xsd:element name="COUNTRAISO" type="tns:char3" />
      <xsd:element name="INTERNET" type="tns:char130" />
      <xsd:element name="FAX_NUMBER" type="tns:char31" />
      <xsd:element name="TELEPHONE" type="tns:char16" />
      <xsd:element name="TELEPHONE2" type="tns:char16" />
      <xsd:element name="LANGU" type="tns:lang" />
      <xsd:element name="LANGU_ISO" type="tns:char2" />
      <xsd:element name="CURRENCY" type="tns:cuky5" />
      <xsd:element name="CURRENCY_ISO" type="tns:char3" />
      <xsd:element name="COUNTRYISO" type="tns:char2" />
      <xsd:element name="ONLY_CHANGE_COMADDRESS" type="tns:char1" />
      </xsd:sequence>
      </xsd:complexType>
    - <xsd:complexType name="BAPIRETURN">
    - <xsd:sequence>
      <xsd:element name="TYPE" type="tns:char1" />
      <xsd:element name="CODE" type="tns:char5" />
      <xsd:element name="MESSAGE" type="tns:char220" />
      <xsd:element name="LOG_NO" type="tns:char20" />
      <xsd:element name="LOG_MSG_NO" type="tns:numeric6" />
      <xsd:element name="MESSAGE_V1" type="tns:char50" />
      <xsd:element name="MESSAGE_V2" type="tns:char50" />
      <xsd:element name="MESSAGE_V3" type="tns:char50" />
      <xsd:element name="MESSAGE_V4" type="tns:char50" />
      </xsd:sequence>
      </xsd:complexType>
    - <xsd:element name="BAPI_TRANSACTION_COMMIT">
    - <xsd:complexType>
    - <xsd:sequence>
      <xsd:element name="WAIT" type="tns:char1" minOccurs="0" />
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>
    - <xsd:element name="BAPI_TRANSACTION_COMMITResponse">
    - <xsd:complexType>
    - <xsd:sequence>
      <xsd:element name="RETURN" type="tns:BAPIRET2" />
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>
    - <xsd:element name="BAPI_CUSTOMER_GETDETAIL">
    - <xsd:complexType>
    - <xsd:sequence>
      <xsd:element name="CUSTOMERNO" type="tns:char10" />
      <xsd:element name="PI_DISTR_CHAN" type="tns:char2" minOccurs="0" />
      <xsd:element name="PI_DIVISION" type="tns:char2" minOccurs="0" />
      <xsd:element name="PI_PASS_BUFFER" type="tns:char1" minOccurs="0" />
      <xsd:element name="PI_SALESORG" type="tns:char4" />
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>
    - <xsd:element name="BAPI_CUSTOMER_GETDETAILResponse">
    - <xsd:complexType>
    - <xsd:sequence>
      <xsd:element name="PE_ADDRESS" type="tns:BAPIKNA101" />
      <xsd:element name="RETURN" type="tns:BAPIRETURN" />
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>
      </xsd:schema>
      </wsdl:types>
    - <wsdl:message name="BAPI_TRANSACTION_COMMIT">
      <wsdl:part name="parameters" element="tns:BAPI_TRANSACTION_COMMIT" />
      </wsdl:message>
    - <wsdl:message name="BAPI_TRANSACTION_COMMITResponse">
      <wsdl:part name="parameter" element="tns:BAPI_TRANSACTION_COMMITResponse" />
      </wsdl:message>
    - <wsdl:message name="BAPI_CUSTOMER_GETDETAIL">
      <wsdl:part name="parameters" element="tns:BAPI_CUSTOMER_GETDETAIL" />
      </wsdl:message>
    - <wsdl:message name="BAPI_CUSTOMER_GETDETAILResponse">
      <wsdl:part name="parameter" element="tns:BAPI_CUSTOMER_GETDETAILResponse" />
      </wsdl:message>
    - <wsdl:portType name="YCUST">
    - <wsdl:operation name="BAPI_TRANSACTION_COMMIT">
      <wsdl:input message="tns:BAPI_TRANSACTION_COMMIT" />
      <wsdl:output message="tns:BAPI_TRANSACTION_COMMITResponse" />
      </wsdl:operation>
    - <wsdl:operation name="BAPI_CUSTOMER_GETDETAIL">
      <wsdl:input message="tns:BAPI_CUSTOMER_GETDETAIL" />
      <wsdl:output message="tns:BAPI_CUSTOMER_GETDETAILResponse" />
      </wsdl:operation>
      </wsdl:portType>
    - <wsdl:binding name="YCUST" type="tns:YCUST">
      <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
    - <wsdl:operation name="BAPI_TRANSACTION_COMMIT">
      <soap:operation soapAction="" style="document" />
    - <wsdl:input>
      <soap:body use="literal" />
      </wsdl:input>
    - <wsdl:output>
      <soap:body use="literal" />
      </wsdl:output>
      </wsdl:operation>
    - <wsdl:operation name="BAPI_CUSTOMER_GETDETAIL">
      <soap:operation soapAction="" style="document" />
    - <wsdl:input>
      <soap:body use="literal" />
      </wsdl:input>
    - <wsdl:output>
      <soap:body use="literal" />
      </wsdl:output>
      </wsdl:operation>
      </wsdl:binding>
    - <wsdl:service name="service">
    - <wsdl:port name="YCUST" binding="tns:YCUST">
      <soap:address location="http://myportal:8040/sap/bc/srt/rfc/sap/ycust/040/ycust/ycust" />
      </wsdl:port>
      </wsdl:service>
      </wsdl:definitions>
    As you will see below in my portal component, Im populating the four fields that it requires:
    public class WS_ECC_Service extends PageProcessorComponent {
      public DynPage getPage(){
        return new WS_ECC_ServiceDynPage();
      public static class WS_ECC_ServiceDynPage extends JSPDynPage{
         protected IPortalComponentRequest request;
               protected IPortalComponentResponse response;
               protected IPortalComponentSession session;
               protected IPortalComponentContext context;
               protected IPortalComponentProfile profile;
               protected String userId;
         //      protected IUser epUser;
               protected String sapSystem;
               protected String fileName;
               private DAO DAO = null;
         //      private FileUploadUtility FIU = null;
         //      private ReadExcelData RED = null;
               private final static int SUCCESS_STATE = 0;   
               private final static int INITIAL_STATE = 1;
               private final static int ERROR_STATE = 2; 
               private int state = INITIAL_STATE;
        public void doInitialization(){
          this.communicate();
          // fill your bean with data here...
         public void communicate()throws IllegalArgumentException{     
                                  try{                  
                                          IPortalRuntimeResources runtimeResources = PortalRuntime.getRuntimeResources();
                                       IYBAPI_Service myService = (IYBAPI_Service)runtimeResources.getService(IYBAPI_Service.KEY);
                                                         System.err.println("b4 passing object to service Anurag-"+IYBAPI_Service.KEY);
                                       com.ybapi.BAPI_CUSTOMER_GETDETAIL param = new com.ybapi.BAPI_CUSTOMER_GETDETAIL();
                                       com.ybapi.BAPI_CUSTOMER_GETDETAILResponse result1 = new com.ybapi.BAPI_CUSTOMER_GETDETAILResponse();
                                       com.ybapi.Char10 custno = new com.ybapi.Char10();
                                       custno.setValue("0000009702");                 
                                       param.setCUSTOMERNO(custno);
                                       com.ybapi.Char2 distr = new com.ybapi.Char2();
                                       distr.setValue("12");                 
                                       param.setPI_DISTR_CHAN(distr);
                                       param.setPI_DIVISION(distr);
                                       com.ybapi.Char1 buff = new com.ybapi.Char1();
                                       buff.setValue("w");                 
                                       param.setPI_PASS_BUFFER(buff);
                                       com.ybapi.Char4 sorg = new com.ybapi.Char4();
                                       sorg.setValue("0001");                 
                                       param.setPI_SALESORG(sorg);
                                       result1 = myService.BAPI_CUSTOMER_GETDETAIL(param);
                                    System.err.println("message message dear message : - " + result1.getPE_ADDRESS().getNAME());
                                  }catch (IllegalArgumentException ex){
                                  System.err.println("Getting details2 " + ex.getMessage());
                                  }catch (Exception e) {
                                  e.printStackTrace();
                                  System.err.println("We are in Exception and got the message778: " + e.getMessage());
                                  }//end try catch
        public void doProcessAfterInput() throws PageException {
        public void doProcessBeforeOutput() throws PageException {
          this.setJspName("uploadutility.jsp");
    and this is what it is throwing the error, exactly the same that I got in my above post which I asked you to ignore.
    #1.5 #00E0ED0BA5EF006E0000015A00001E350004533EB66A08B6#1217428720322#com.sap.portal.SOAPLogger#sap.com/irj#com.sap.portal.SOAPLogger#BHARDWS#17255##n/a##2aaa48605e4511ddbbf300e0ed0ba5ef#SAPEngine_Application_Thread[impl:3]_2##0#0#Warning#1#/System/Server#Java###Call failed
    [EXCEPTION]
    {0}#1#SOAP Fault Exception [Actor null] : CX_ST_MATCH_ELEMENT:XSLT exception.System expected element 'CUSTOMERNO'
    <Host>undefined</Host>
    <Component>APPL</Component>
    <ChainedException>
      <Exception_Name>CX_SOAP_CORE</Exception_Name>
      <Exception_Text>CX_ST_MATCH_ELEMENT:XSLT exception.System expected element &apos;CUSTOMERNO&apos;</Exception_Text>
    </ChainedException>
    <ChainedException>
      <Exception_Name>CX_SXMLP</Exception_Name>
      <Exception_Text>XSLT exception</Exception_Text>
    </ChainedException>
    <ChainedException>
      <Exception_Name>CX_ST_MATCH_ELEMENT</Exception_Name>
      <Exception_Text>System expected element &apos;CUSTOMERNO&apos;: Main Program:/1BCDWB/WSSB675FB6DBC9770445BC| Program:/1BCDWB/WSSB675FB6DBC9770445BC| Line: 19| Valid:X</Exception_Text>
    </ChainedException>
    #1.5 #00E0ED0BA5EF006E0000015C00001E350004533EB66A09BD#1217428720322#System.err#sap.com/irj#System.err#BHARDWS#17255##n/a##2aaa48605e4511ddbbf300e0ed0ba5ef#SAPEngine_Application_Thread[impl:3]_2##0#0#Error##Plain###$$$$$$$$$$$$$exex-SOAP Fault Error (n.a) : CX_ST_MATCH_ELEMENT:XSLT exception.System expected element 'CUSTOMERNO'#
    #1.5 #00E0ED0BA5EF006E0000015D00001E350004533EB66A0B44#1217428720323#System.err#sap.com/irj#System.err#BHARDWS#17255##n/a##2aaa48605e4511ddbbf300e0ed0ba5ef#SAPEngine_Application_Thread[impl:3]_2##0#0#Error##Plain###SOAP Fault Exception [Actor null] : CX_ST_MATCH_ELEMENT:XSLT exception.System expected element 'CUSTOMERNO'
    <Host>undefined</Host>
    <Component>APPL</Component>
    <ChainedException>
      <Exception_Name>CX_SOAP_CORE</Exception_Name>
      <Exception_Text>CX_ST_MATCH_ELEMENT:XSLT exception.System expected element &apos;CUSTOMERNO&apos;</Exception_Text>
    </ChainedException>
    <ChainedException>
      <Exception_Name>CX_SXMLP</Exception_Name>
      <Exception_Text>XSLT exception</Exception_Text>
    </ChainedException>
    <ChainedException>
      <Exception_Name>CX_ST_MATCH_ELEMENT</Exception_Name>
      <Exception_Text>System expected element &apos;CUSTOMERNO&apos;: Main Program:/1BCDWB/WSSB675FB6DBC9770445BC| Program:/1BCDWB/WSSB675FB6DBC9770445BC| Line: 19| Valid:X</Exception_Text>
    </ChainedException>
    #1.5 #00E0ED0BA5EF006E0000015E00001E350004533EB66A0B93#1217428720323#System.err#sap.com/irj#System.err#TESTUSER#17255##n/a##2aaa48605e4511ddbbf300e0ed0ba5ef#SAPEngine_Application_Thread[impl:3]_2##0#0#Error##Plain###We are in Exception and got the message778: SOAP Fault Error (n.a) : CX_ST_MATCH_ELEMENT:XSLT exception.System expected element 'CUSTOMERNO'#

  • 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

  • Create a web service from java bean and map exceptions to SOAP faults

    Hi,
    We have to expose our Session stateless EJB3 as web services. I've tried to use annotations and jdev wizard "java bean to web service" and it works fine.
    Our problem now is that our methods can throw a business exception that contains a list of error message strings to be presented on the client.
    I did not find any way to use annotations to make it build a wsdl with soap fault mapped to our exception class. Neither I could to make the wizard to create wsdl with faults.
    As we are exposing already designed and implemented classes as web services, I think the bottom-top (java->wsdl) approach is better that top->botton (wsdl->java). Therefore, I'm looking for a possibility to generate the web services from the java beans and have the exception be mapped to a soap fault message.
    We are using jdev 10.1.3.1 and OAS 10.1.3.1., is there a way to map exceptions to soap faults using bottom->top approach?
    thank you

    A couple of links that may be of help:
    http://www.netbeans.org/servlets/ReadMsg?listName=nbj2ee&msgNo=1218
    My last question concerning web services:
    I have already written a session bean and I'd like to add some methods
    as a web service to it, how do I do that?
    Or I can only create another bean for a webservice and cannot modify the
    original one?You might create web service with existing sources and select you bean. New web services with appropriate lookup method will be generated.
    All web service method, that will be exposed in web service, you
    should add itself (Pop-up menu Web Service -> Add operation)
    http://usersguide.netbeans.org/files/documents/40/73/Chapter9-WebServices.pdf

  • 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.

  • SOAP Fault when returning null from a Native Web Service Stored Procedure

    I have a stored procedure which I can successfully invoke via soapUI
    However, if one of the Stored Procedure's OUT arguments is set to null the native web service returns the following fault :
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
    <soap:Fault>
    <faultcode>soap:Client</faultcode>
    <faultstring>Error processing input</faultstring>
    <detail>
    <OracleErrors xmlns="http://xmlns.oracle.com/orawsv/faults">
    <OracleError>
    <ErrorNumber>ORA-19202</ErrorNumber>
    <Message>Error occurred in XML processing</Message>
    </OracleError>
    <OracleError>
    <ErrorNumber>ORA-01405</ErrorNumber>
    <Message>fetched column value is NULL</Message>
    </OracleError>
    </OracleErrors>
    </detail>
    </soap:Fault>
    </soap:Body>
    </soap:Envelope>I can see how to control the processing of null values when invoking orawsv (using the null_handling element).
    Is there an equivalent for Stored Procedures ?
    Thanks,
    PD
    versions as follows :
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    PL/SQL Release 11.2.0.1.0 - Production
    "CORE     11.2.0.1.0     Production"
    TNS for Linux: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production

    Without going into any technical discussion about the code, my first question is what JDK version was used to create this which was imported into the form? Understand that Forms 10 runs on JDK 1.4.2, so if you used any newer JDK version, likely there will be problems.

  • Java.rmi.RemoteException: SOAP Fault:javax.xml.rpc.soap.SOAPFaultException

    Hi, I created a webservice using weblogic8.1 sp3 workshop. On my desktop, I tested the webservice with a java client and it worked fine. When I deployed webservice application on UNIX production server, it deployed successfully and it displayed WSDL file too. But, when I run java client from desktop to access this webservice on UNIX server, it is throwing the following exception.
    java.rmi.RemoteException: SOAP Fault:javax.xml.rpc.soap.SOAPFaultException: EXCEPTION: java.lang.NoClassDefFoundError [ServiceException]
    Detail:
    <detail>
    null </detail>; nested exception is:
    javax.xml.rpc.soap.SOAPFaultException: EXCEPTION: java.lang.NoClassDefFoundError [ServiceException]
    at weblogic.jws.proxies.MyServiceSoap_Stub.getInfo(MyServiceSoap_Stub.java:31)
    at SoapClient.main(SoapClient.java:17)
    Caused by: javax.xml.rpc.soap.SOAPFaultException: EXCEPTION: java.lang.NoClassDefFoundError [ServiceException]
    at weblogic.webservice.core.ClientDispather.receive(ClientDispatcher.java:313)
    at weblogic.webservice.core.ClientDispatcher.dispatch(ClientDispatcher.java:144)
    at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:457)
    at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:443)
    at weblogic.webservice.core.rpc.StubImpl._invoke(StubImpl.java:290)
    at weblogic.jws.proxies.MyServiceSoap_Stub.getInfo(MyServiceSoap_Stub.java:26)
    can somebody please help me. This is very critical for me.
    Thanks in advance.

    Hi, I created a webservice using weblogic8.1 sp3 workshop. On my desktop, I tested the webservice with a java client and it worked fine. When I deployed webservice application on UNIX production server, it deployed successfully and it displayed WSDL file too. But, when I run java client from desktop to access this webservice on UNIX server, it is throwing the following exception.
    java.rmi.RemoteException: SOAP Fault:javax.xml.rpc.soap.SOAPFaultException: EXCEPTION: java.lang.NoClassDefFoundError [ServiceException]
    Detail:
    <detail>
    null </detail>; nested exception is:
    javax.xml.rpc.soap.SOAPFaultException: EXCEPTION: java.lang.NoClassDefFoundError [ServiceException]
    at weblogic.jws.proxies.MyServiceSoap_Stub.getInfo(MyServiceSoap_Stub.java:31)
    at SoapClient.main(SoapClient.java:17)
    Caused by: javax.xml.rpc.soap.SOAPFaultException: EXCEPTION: java.lang.NoClassDefFoundError [ServiceException]
    at weblogic.webservice.core.ClientDispather.receive(ClientDispatcher.java:313)
    at weblogic.webservice.core.ClientDispatcher.dispatch(ClientDispatcher.java:144)
    at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:457)
    at weblogic.webservice.core.DefaultOperation.invoke(DefaultOperation.java:443)
    at weblogic.webservice.core.rpc.StubImpl._invoke(StubImpl.java:290)
    at weblogic.jws.proxies.MyServiceSoap_Stub.getInfo(MyServiceSoap_Stub.java:26)
    can somebody please help me. This is very critical for me.
    Thanks in advance.

  • Catch soap faults

    I have the following scenario: SAP ABAP proxy --> XI --> IIS web service.  The IIS web service is not in my hand.
    At some request the server has internal server errors. In that case we get SOAP faults from the web service. Now we have the situation that such SOAP faults causes XI mapping errors.  But this is not good. I would like to transfer such faults as application faults to the calling ABAP proxy. But I don't know how I can catch these SOAP faults.
    Here is the situation in detail.
    The response from the IIS web service:
    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
         <soap:Body>
              <soap:Fault>
                   <faultcode>soap:Server</faultcode>
                   <faultstring>error description </faultstring>
                   <faultactor>ws user account</faultactor>
                   <detail>
                        <ServerExceptions>bla bla bla</ServerExceptions>
                   </detail>
              </soap:Fault>
         </soap:Body>
    </soap:Envelope>
    In XI monitoring I have 3 entries: my call and two error messages.
    First error message payload:
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <!--  Aufruf eines Adapters  -->
      <ServerExceptions>blab la bla</ServerExceptions>
    Error information:
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <!--  Mapping der Response-Message  -->
    <SAP:Error xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">
      <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="">ServerExceptions</SAP:ApplicationFaultMessage>
      <SAP:Stack />
      <SAP:Retry>M</SAP:Retry>
      </SAP:Error>
    The second error message has the same payload but a different error part:
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <!--  Mapping der Response-Message -->
    <SAP:Error xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:mustUnderstand="1">
      <SAP:Category>XIServer</SAP:Category>
      <SAP:Code area="MAPPING">NO_MAPPINGPROGRAM_FOUND</SAP:Code>
      <SAP:P1>"my mapping program"</SAP:P1>
      <SAP:P2 />
      <SAP:P3 />
      <SAP:P4 />
      <SAP:AdditionalText />
      <SAP:ApplicationFaultMessage namespace="" />
      <SAP:Stack>Das Interface-Mapping "my mapping program" ist nicht im Laufzeit-Cache vorhanden.</SAP:Stack>
      <SAP:Retry>N</SAP:Retry>
      </SAP:Error>
    Is there any opportunity to catch such SOAP faults or server errors? I would like to map them in the xi fault structure. So the calling ABAP proxy gets the error message. Now I get a XI error and always a mail because I use the alert framework. But this is no XI error and I don't want to get such error messages.

    Hi Smitha.
    Yes. I have a WSDL from the external web service but the WSDL doesn't contain any fault definition. But I know the fault structure because I catch such an exception with XML Spy SOAP Proxy. The Exception looks like in my first post. 
    The problem is that I don't get this exception in my hands. When I use the Message Display Tool of the Runtime Workbench I can only see the <ServerExceptions> node of the exception in my payload. So I only can deal with this. So I have  specified a xsd for this.
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
         <xs:element name="ServerExceptions">
              <xs:simpleType>
                   <xs:restriction base="xs:string" />
              </xs:simpleType>
         </xs:element>
    </xs:schema>
    I load this as external definition and add this to my interface as fault type. After that I'm able to catch the exception and I get the content of this node and map this to the fault message of my outbound interface. Unfortunately the content of this node is useless. I need the values of the other nodes.
    O course I tried your proposal and add the complete fault type definition to the given wsdl and after that I re-import this new wsdl. But that doesn't change the behaviour described above.
    The key point is that I don't get the whole exception.

  • Multiple SOAP fault support in PI?

    Hi Guys,
    We have a webservice that has multiple SOAP faults as part of the WSDL. Normally a sync WS will have a request, a response and a fault. My question is does PI support multiple faults?
    If i look at the SI, it lets me add multiple fault messages. Even in operation mapping, I get the option of doing the multiple mappings for multiple faults. But when I test, it throws up an error mentioning that the mapping does not exist in the cache. If I remove the multiple faults in SI (only provide one fault) and hence the same in OM, it works perfectly fine. But PI doesn't seem to like multiple faults in SI and OM and hence mess things up during runtime.
    So does PI really support multiple faults? Can it handle multiple faults being triggered from the target and route it to the source application?

    Ok, we analyzed this further and here is one answer:
    Synchronous service operations can absolutely handle more than one fault message. We checked this with ABAP-Proxy to  ABAP-Proxy and also ABAP-Proxy to SOAP Adapter.
    The problem we had before was due to a missing namespace information: in the response the namespace qualifier of the top level tag of the individual fault in the SOAP Envelope was not set.
    Here is my hypotheses about what happens: If there are more than one fault messages mapped in an operation mapping, the system must be able to find the correct one. To do that, not only the fault message tag name, but also its namespace must be set precisely in the response message. Otherwise the massage processing stops and a u2018missing mapping programu2019 is reported. Since the correct message mapping corresponding to the actual fault received could not be identified, in the error reported in the message log the system refers to the next best thing it has at that point which is the ID of the operation mapping. However, that is a bit misleading, since the operation mapping itself was found and there is nothing wrong with it.
    Hope that helps
    Eberhard

  • SOAP Fault or Response

    Hi dear members,
    I would like to know if there is any best practices on whether to use SOAP Fault or a response object for returning messages including business errors
    in request-response operations.
    Can someone refer to some documentation on this topic?

    In general I prefer to use SOAP faults for exceptions as they force the caller to handle them. When returning errors in a response object the caller can just not check for the response status and continue, which may lead to new failures on subsequent calls. Also, when calling services from an environment as BPEL, using soap faults helps you to use built in error handling like the error hospital and transaction support which would be far more difficult to do when the service would return an error status as part of a normal response.

  • Handling SOAP faults

    hello,
    I created a java control which calls an external webservice. How do you handle
    SOAP fault messages coming back from the webservice?
    Weblogic just throws an java.lang.reflect.UndeclaredThrowableException since it
    cannot parse the expected XML message.
    For example, when I call Logon() via the java control. The WebService should
    reply with a LogonResult object(in xml format). However, if there's an error,
    the WebService returns a SOAP Fault message. Since this fault message is not
    in the format of the expected LogonResult xml schema, weblogic throws an error
    (since it cannot create the LogonResult object) and the caller just receives the
    UndeclaredThrowableException without knowing any of the contents within the SOAP
    Fault.
    I'd like to be able to send back the SOAP fault content back to the calling function.
    I've tried throwing an exception from the java control handler, but it gets swallowed
    up by the SOAP Handler so I still get an exception with no content.
    any info is appreciated.
    thanks,
    Tom

    Hi,
    Do you get answer for that?
    I had similar problem and solved this in this way:
    In this java.lang.reflect.UndeclaredThrowableException handler is possible to get also SoapFault back:
    catch (java.lang.reflect.UndeclaredThrowableException e){
    RemoteException re = (RemoteException).getUndeclaredThrowable();
    ServiceControlException sfe = (ServiceControlException)re.getCause();
    SoapFault fault = sfe.getSoapFault();
    XmlObject[] objs = fault.getDetailContents();
    // more procssing here to get Soap detailed error
    Maybe this helps.
    rgrds,
    H

  • 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

  • How to return a Soap Fault from a business process

    I'm trying to re-implement an existing web service in WLI that can return soap
    faults to clients when business errors occur while processing a request. Is this
    possible to do with WLI, and if so can someone please point me in the right direction?
    thanks...

    If your JWS can throw a SOAPFaultException, that should return a SOAP fault to
    the client.
    "Michael Hanes" <[email protected]> wrote:
    >
    I'm trying to re-implement an existing web service in WLI that can return
    soap
    faults to clients when business errors occur while processing a request.
    Is this
    possible to do with WLI, and if so can someone please point me in the
    right direction?
    thanks...

Maybe you are looking for