axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Damitha Kumarage <damith...@gmail.com>
Subject Re: [Axis2] Improving design of error [Was][Fwd: Re: Help needed on building custom soap fault in axis2c]
Date Thu, 11 Oct 2007 06:14:39 GMT
Hi Samisa,
Shall we get this finalized and implemented. Defining error blocks of 
size 2000 is reasonable for the core and axis2c modules. I have 
implemented this model already for sandesha2c except that the block 
allocated for Sandesha2 is taken arbitrarily there. When this is 
finalized I need to implement it for Savan
Damitha
Samisa Abeysinghe 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>
>>>
>>>
>>
>>
>
>


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