You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by "Dimuthu Gamage (JIRA)" <ji...@apache.org> on 2009/02/07 15:40:59 UTC

[jira] Updated: (AXIS2C-1344) Support Custom Fault in ADB generated code

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