[ 
https://issues.apache.org/jira/browse/AXIS2C-1344?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dimuthu Gamage updated AXIS2C-1344:
-----------------------------------

    Attachment: case45.zip

Fixed (in commit 741901). attached a test case. The idea is taken from the 
discussion http://www.biglist.com/lists/xsl-list/archives/200311/msg00604.html

API Explanation,

Server Side:

If faults are associated with a method, the faults are put in a union and users 
are expected to set one in a fault case, in the last parameter of the function.

            typedef union
            {
                adb_MyFirstException_t* MyFirstException;
                adb_MySecondException_t* MySecondException;

            } axis2_skel_MyService_myNextOperation_fault;

        adb_myNextOperationResponse_t* 
axis2_skel_MyService_myNextOperation(const axutil_env_t *env,
                                              adb_myNextOperation_t* 
_myNextOperation,
                                          
axis2_skel_MyService_myNextOperation_fault *fault);

And constants corrosponding to the faults are also generated,
    #define AXIS2_SKEL_MYSERVICE_ERROR_CODES_START (AXIS2_ERROR_LAST + 2000)

    typedef enum
    {
        AXIS2_SKEL_MYSERVICE_ERROR_NONE = 
AXIS2_SKEL_MYSERVICE_ERROR_CODES_START,

        AXIS2_SKEL_MYSERVICE_MYNEXTOPERATION_FAULT_MYFIRSTEXCEPTION,
            AXIS2_SKEL_MYSERVICE_MYNEXTOPERATION_FAULT_MYSECONDEXCEPTION,
            AXIS2_SKEL_MYSERVICE_MYOPERATION_FAULT_MYFIRSTEXCEPTION,
            AXIS2_SKEL_MYSERVICE_MYOPERATION_FAULT_MYSECONDEXCEPTION,
            AXIS2_SKEL_MYSERVICE_ERROR_LAST
    } axis2_skel_MyService_error_codes;


So in a fault case, user can write a code similar to the following to throw the 
custom soap fault (note that they have to set both the adb fault object and the 
error constant)

            adb_MyFirstException_t *exp = NULL;

            exp = adb_MyFirstException_create(env);
            adb_MyFirstException_set_text(exp, env, "this is the exception 3");

            /* here we are setting the exception, the fault is the last 
parameter of the method definition  */
            fault->MyFirstException = exp;
            AXIS2_ERROR_SET(env->error,
                        
AXIS2_SKEL_MYSERVICE_MYNEXTOPERATION_FAULT_MYFIRSTEXCEPTION,
                        AXIS2_FAILURE);
            axutil_error_set_error_message(env->error, "Test exception3");
            return NULL;


client side:

Similar to the server side, both the unions and enum of constants are 
generated. Here is how user should handle the soap faults,

   /* doing the request */
    op_response = axis2_stub_op_MyService_myOperation(stub, env, op, &fault);

    if(op_response == NULL)
    {
        /* fault is received */
        error_code = env->error->error_number;

        if(error_code == 
AXIS2_STUB_MYSERVICE_MYOPERATION_FAULT_MYFIRSTEXCEPTION) {
            printf("My First Exception called: with param %s\n",
                    adb_MyFirstException_get_text(fault.MyFirstException, env));
            adb_MyFirstException_free(fault.MyFirstException, env);
            fault.MyFirstException = NULL;
        }
        else if(error_code == 
AXIS2_STUB_MYSERVICE_MYOPERATION_FAULT_MYSECONDEXCEPTION) {
            printf("My Second Exception called: with param %d\n",
                    adb_MySecondException_get_number(fault.MySecondException, 
env));
            adb_MySecondException_free(fault.MySecondException, env);
            fault.MySecondException = NULL;
        }
    }


> Support Custom Fault in ADB generated code
> ------------------------------------------
>
>                 Key: AXIS2C-1344
>                 URL: https://issues.apache.org/jira/browse/AXIS2C-1344
>             Project: Axis2-C
>          Issue Type: Improvement
>          Components: code generation
>         Environment: Linux + windows
>            Reporter: Dimuthu Gamage
>            Assignee: Dimuthu Gamage
>         Attachments: case45.zip
>
>
> Support Custom Fault in ADB generated code

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to