axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dimuthu Gamage" <dimut...@gmail.com>
Subject Re: [Axis2] Improving design of error [Was][Fwd: Re: Help needed on building custom soap fault in axis2c]
Date Tue, 13 Nov 2007 08:09:21 GMT
Hi devs,

Currently there are no error codes defined specific to codegen or
adb-codegen.
Most of the adb error codes will be related to validation of xml with xml
schemas.

So my questions are,

Should we specify codegen or adb-codegen specific error codes?

where adb codegen specific error codes should be defined?
 That is, should they place inside axis2/c range or in a separate range?


Thanks
Dimuthu



On Oct 5, 2007 12:24 PM, Samisa Abeysinghe <samisa@wso2.com> wrote:

> 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* <dimuthuc@gmail.com
> >> <mailto: dimuthuc@gmail.com> > 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* < pappu.raghunathan@gmail.com
> >>     <mailto: pappu.raghunathan@gmail.com>> 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* < dimuthuc@gmail.com
> >>         <mailto:dimuthuc@gmail.com>> 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* <
> >>             pappu.raghunathan@gmail.com
> >>             <mailto:pappu.raghunathan@gmail.com>> 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*
> >>                 < pappu.raghunathan@gmail.com
> >>                 <mailto:pappu.raghunathan@gmail.com>> 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:
> >>             axis-c-user-unsubscribe@ws.apache.org
> >>             <mailto:axis-c-user-unsubscribe@ws.apache.org>
> >>             For additional commands, e-mail:
> >>             axis-c-user-help@ws.apache.org
> >>             <mailto:axis-c-user-help@ws.apache.org>
> >>
> >>
> >>
> >>
> >>
> >> ---------------------------------------------------------------------
> >>     To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
> >>     <mailto:axis-c-user-unsubscribe@ws.apache.org>
> >>     For additional commands, e-mail: axis-c-user-help@ws.apache.org
> >>     <mailto:axis-c-user-help@ws.apache.org>
> >>
> >>
> >
> >
>
>
> --
> 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
>
> <http://wso2.org/projects/wsf/php?WSO2%C2%A0Web%C2%A0Services%C2%A0Framework%2FPHP%C2%A0-%C2%A0Open%C2%A0source%C2%A0PHP%C2%A0extention%C2%A0for%C2%A0providing%C2%A0and%C2%A0consuming%C2%A0Web%C2%A0services%C2%A0in%C2%A0PHP>
> "
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-c-user-help@ws.apache.org
>
>
>
>
> --
> 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
>
> <http://wso2.org/projects/wsf/php?WSO2%C2%A0Web%C2%A0Services%C2%A0Framework%2FPHP%C2%A0-%C2%A0Open%C2%A0source%C2%A0PHP%C2%A0extention%C2%A0for%C2%A0providing%C2%A0and%C2%A0consuming%C2%A0Web%C2%A0services%C2%A0in%C2%A0PHP>
> "
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-c-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-c-dev-help@ws.apache.org
>
>

Mime
View raw message