[ 
http://issues.apache.org/jira/browse/AXIS2-917?page=comments#action_12427519 ] 
            
Richard Gruet commented on AXIS2-917:
-------------------------------------

Latest news: I investigated further, and it appears that the 
org.apache.axiom.om.OMException: java.lang.IllegalStateException I got was my 
fault (if I dare to say ;), I was passing an incoorect param to the WS 
operation whose function is to raise my custom fault.

I am now able to raise a custom exception xxxFaultException in my 
implementation and to catch it in my client (gotcha: 2 classes 
xxxFaultException exist, one in the skeleton, and the other in the stubs - the 
client must use the latter !). However,  I find that  the detail of  my fault 
are lost in the exception instance.

Here is my code (see the attached WS-tests_sampleService.wsdl for the details): 
I'm calling an operation throwMiFault whose purpose is to raise a custom fault  
'MiFault'  (see the attached WS-tests_sampleService.wsdl).

* Here the structure of my custom fault (Mifault):

  <complexType name="MiFault">
        <sequence>
        <element name="error" minOccurs="0" maxOccurs="unbounded">
           <complexType>
             <sequence>
                <element name="errCode" type="tns:Ident" minOccurs="0" />
                <element name="errMsg" type="string" />
                <element name="parameter" type="tns:Ident" minOccurs="0" />
              </sequence>
           </complexType>
        </element>
      </sequence>
  </complexType>

(tns:ident is just a xsd:string)

 *  Implementation of  operation throwMiFault:

public EmptyResponseDocument throwMiFault(ThrowMiFaultDocument param)
        throws ThrowMiFaultFaultException {
                
        MiFault miFault = MiFault.Factory.newInstance();

        Error err1 = Error.Factory.newInstance();
        err1.setErrCode("CODE1");
        err1.setErrMsg("Error #1 message text");
        err1.setParameter("param#1");

        Error err2 = Error.Factory.newInstance();
        err2.setErrCode("CODE2");
        err2.setErrMsg("Error #2 message text");
        // 3rd parameter omitted since optional

        miFault .setErrorArray(new Error[] { err1, err2 });

        MiFaultDocument faultDoc = MiFaultDocument.Factory.newInstance();
        faultDoc.setMiFault(miFault );

        ThrowMiFaultFaultException e = new ThrowMiFaultFaultException();
        e.setFaultMessage(faultDoc);
        throw e;
}

* The CLIENT test case :

    public void test_op_throwMiFault() throws Exception {

                // Must create a document even if there are no IN params:
                ThrowMiFault in = ThrowMiFault.Factory.newInstance();
                ThrowMiFaultDocument req = 
ThrowMiFaultDocument.Factory.newInstance();
                req.setThrowMiFault(in);
                
                try {
                        port.throwMiFault(req);
                        fail("Expected a Fault");
                } catch (AxisFault e) {
                        fail("AxisFault received");
                } catch (ThrowMiFaultFaultException e) {

                        
MiFaultDocument doc = e.getFaultMessage();
                        MiFault miFault = doc.getMiFault();

                        System.out.println("\n(testError) OK, MiFault 
received");
                        assertEquals(miFault.sizeOfErrorArray(), 2); ///////// 
FAILS ! => 0 instead of 2
                        System.out.println("miFault XML:\n" + 
miFault.toString());

                        System.out.println("Fault detail:");
                        for (MiFault.Error error : miFault.getErrorArray()) {
                                System.out.println();
                                System.out.println("     code: " + 
error.getErrCode());
                                System.out.println("      msg: " + 
error.getErrMsg());
                                System.out.println("parameter: " + 
error.getParameter());
                        }
                } catch (Exception e) {
                        fail("Expected a ThrowMiFaultFaultException, received: 
" + e);
                }



> User guide should give explanation and examples of fault handling
> -----------------------------------------------------------------
>
>                 Key: AXIS2-917
>                 URL: http://issues.apache.org/jira/browse/AXIS2-917
>             Project: Apache Axis 2.0 (Axis2)
>          Issue Type: Wish
>          Components: samples, build,site  & docs
>    Affects Versions: 1.0
>            Reporter: Derek Foster
>         Assigned To: Eran Chinthaka
>            Priority: Critical
>         Attachments: sampleService-wsdl.rar
>
>
> The Axis2 user guide provides no examples of:
>   1) The WSDL to declare that a fault may be thrown from an operation 
> (suitable for passing into WSDL2Java)
>   2) The server-side code for a fault exception, as generated by WSDL2Java 
> and modified as a user might be expected to modify it.
>   3) The server-side code to throw the fault exception, including a tested 
> example of passing on a custom error message to be transmitted as part of a 
> SOAP fault (in the faultDetail) and received by the client.
>   4) The client-side code for receiving and handling a fault.
> Furthermore, what discussion of faults that there is seems fairly 
> contradictory. For instance, there are various suggestions that throwing an 
> AxisFault exception from a service is the way to issue a fault. However, 
> WSDL2Java does not generate service methods that are declared to throw 
> AxisFault, and there seems to be no way to declare such a fault in WSDL. (at 
> least, none that I can find). Fault generation from a service that was not 
> generated by WSDL2Java should be treated as a separate section, since it is 
> handled in a totally different manner by server code. I think that both kinds 
> of fault handling need to be documented clearly in the user guide.
> I have been trying for weeks to figure out how this is supposed to work, and 
> still haven't gotten it to work quite right (my custom error message included 
> in the thrown fault exception is getting lost somewhere before the SOAP fault 
> is transmitted). This is a basic feature that should be documented clearly.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to