This discussion took place over the user list.
Please send in your feedback on how to improve user defined error spaces.

Samisa...

Samisa Abeysinghe wrote:
Subra A Narayanan wrote:
Hi Dimuthu,

I am using the solution you suggested in your last mail. That solution is perfect for my application. But I have some concerns. I saw this line in your code

#define MYSERVICE_ERROR_CODES_START (AXIS2_ERROR_LAST + 2000)


Will this cause any problems in the future? What if the value of AXIS2_ERROR_LAST changes? Or what if some other axis2 component (like sandesha or neethi or something else) uses error codes in the same range? Will I be forced to change my code because of the above scenarios?
Yes there is a problem that one would take over this value.
The solution for this is to define the "register" the error block sizes with Axis2/C axutil_error.h so that there is no room to take over the range.

e.g.
#define AXUTIL_ERROR_MESSAGE_BLOCK_SIZE 2000
#define NEETHI_ERROR_CODES_START (AXIS2_ERROR_LAST + AXUTIL_ERROR_MESSAGE_BLOCK_SIZE) #define RAMPART_ERROR_CODES_START (NEETHI_ERROR_CODES_START + AXUTIL_ERROR_MESSAGE_BLOCK_SIZE) #define SANDESHA2_ERROR_CODES_START (RAMPART_ERROR_CODES_START + AXUTIL_ERROR_MESSAGE_BLOCK_SIZE) #define SAVAN_ERROR_CODES_START (SANDESHA2_ERROR_CODES_START + AXUTIL_ERROR_MESSAGE_BLOCK_SIZE) #define USER_ERROR_CODES_START (SAVAN_ERROR_CODES_START + AXUTIL_ERROR_MESSAGE_BLOCK_SIZE)

In the future, if we need to add another XYZ error block, we can
#define XYZ_ERROR_CODES_START (USER_ERROR_CODES_START + AXUTIL_ERROR_MESSAGE_BLOCK_SIZE)

BTW, what I am proposing is a future design to solve the situation.
With the current release, 1.1.0, you can use the following for a custom error:

axutil_error_set_error_message(env->error, error_message);
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_LAST + 1, AXIS2_FAILURE);

We need to improve our error model based on my earlier discussion.

Thanks,
Samisa...
Samisa...

Any help is greatly appreciated.

Subra



On 10/1/07, *Dimuthu Gamage* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> > wrote:

    Hi Sathya,

    Please check the attachment. This tries to use custom error codes.
    (mostly follow the way Sandhesha/C is using their custom error
    messages)
    Anyway still functions like  "axutil_error_get_message" are too
    inflexible to work with custom error codes. So we need to define
    our version of the same function.

    Thanks
    Dimuthu


    On 10/1/07, *Sathya Raghunathan* < [EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>> wrote:

        If i have build a soap fault based on an error code, should i
        create a global variable in axutil_error_init() function? Can
        i make use of the axutil_error_messages array?
                 Thanks
        Sathya

                 On 9/29/07, *Dimuthu Gamage* < [EMAIL PROTECTED]
        <mailto:[EMAIL PROTECTED]>> wrote:

            HI  Sathya,

            you can follow the attachments. I didnt test it, but it
            may give some hints to do your work.
            If you want to build a soap fault base on an error code,
            you need to keep a global variable to keep the error code
            and build the soap exception based on that.

            So It is clear we should have a better mechanism than this
            to do that, I think there was a discussion earlier in the
            same topic in the list sometime ago. We should quickly
            figure out a good way to do this and fix the code
            generation templates.

            Thanks
            Dimuthu



                /*axiom_element_set_text(error_ele, env,
            adb_MyFirstException_get_text(_MyFirstException,env),
                                    error_node); */

                    /** instead use following */

                    another_node =
            adb_MyFirstException_serialize(_MyFirstException, env,
            NULL, AXIS2_FALSE);
                    axiom_node_add_child(error_node, env, another_node);


            IN the client side axis2_stub_MyService.c should be
            changed like following.


            ret_node =  axis2_svc_client_send_receive_with_op_qname(
            svc_client, env, op_qname, payload);

            /** Just before this line, add following */

                        if(ret_node && axiom_node_get_data_element(
            ret_node, env) &&
                                axutil_strcmp("fault",
axiom_element_get_localname((axiom_element_t
            *)axiom_node_get_data_element( ret_node, env), env)))
                        {
                            /** adb_MyFirstException_t*
            _MyFirstException should be declared */
                            _MyFirstException =
            adb_MyFirstException_create(env);
adb_MyFirstException_deserialize(_MyFirstException, env,
            axiom_node_get_first_child( ret_node));

                            /** so you have the same _MyFirstException
            you created at
                             * onfault is here, just do the processing
            at here manually */

                        }

            On 9/29/07, *Sathya Raghunathan* <
            [EMAIL PROTECTED]
            <mailto:[EMAIL PROTECTED]>> wrote:

                If you just check the
                axis2_svc_skel_MyService_on_fault() in the attached
                file, please let me know if i have modified it
                correctly or not. Is this the way to do? If i test
                that out, the server crashes. If i comment out the
                object myfirstexception from it, i can see that a
                fault element is set in the output with some message
                that i hardcoded there.
Please guide me with the proper step of building the
                custom fault in that function.
                                 Thanks
                Sathya

                                 On 9/29/07, *Sathya Raghunathan*
                <[EMAIL PROTECTED]
                <mailto:[EMAIL PROTECTED]>> wrote:

                    Hi Dimuthu,
Do you have any example custom soap fault wsdl? I
                    am not clear with this concept I tried a new
                    example, since you found some problems with my
                    last wsdl file. I have attached the wsdl file. In
                    that, there is one myOperationRequest which is a
                    string, and a myOperationResponse which is also a
                    string. There are two custom faults here,
                    MyFirstException and MySecondException. With this
                    wsdl, the service function that was generated was
                    as below:
                                         adb_myOperationResponse_t*
                    axis2_skel_MyService_myOperation (const
                    axutil_env_t *env  ,
adb_myOperation_t* myOperation )
                            {
                                 adb_myOperationResponse_t *myResponse;
                              /* TODO fill this with the necessary
                    business logic */

                                    axis2_char_t *myInpMsg =
                    adb_myOperation_get_myInput(myOperation,env);
                                    printf("My input message =
                    %s\n",myInpMsg);
if (strcmp(myInpMsg,"Bad server")==0)
                                    {
                                           //What is the way to throw
                    the exception here?
                                            return NULL;
                                   }
                              // Assuming the myResponse object is
                    created
                              return myResponse;
                            }


                    You have told me to modify the
                    axis2_svc_skel_MyService_on_fault() function to
                    build custom faults. Does that mean that i have to
                    create an object of myFirstException inside that?
                    Should the service function just return NULL?
                    Suppose i call a function that has some business
                    logic that return error code inside
                    axis2_skel_MyService_myOperation, and i want to
                    throw an exception (with an error message) based
                    on that error code, how exactly should i do it?
                    Can you help me out?

                    Thanks
                    Sathya



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




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






--
Samisa Abeysinghe : WSO2 WSF/PHP
"http://wso2.org/projects/wsf/php?WSO2&nbsp;Web&nbsp;Services&nbsp;Framework%2FPHP&nbsp;-&nbsp;Open&nbsp;source&nbsp;PHP&nbsp;extention&nbsp;for&nbsp;providing&nbsp;and&nbsp;consuming&nbsp;Web&nbsp;services&nbsp;in&nbsp;PHP";


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




--
Samisa Abeysinghe : WSO2 WSF/PHP
"http://wso2.org/projects/wsf/php?WSO2&nbsp;Web&nbsp;Services&nbsp;Framework%2FPHP&nbsp;-&nbsp;Open&nbsp;source&nbsp;PHP&nbsp;extention&nbsp;for&nbsp;providing&nbsp;and&nbsp;consuming&nbsp;Web&nbsp;services&nbsp;in&nbsp;PHP";


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

Reply via email to