You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-user@axis.apache.org by Sathya Raghunathan <pa...@gmail.com> on 2007/10/01 07:03:59 UTC

Re: Help needed on building custom soap fault in axis2c

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 <di...@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> 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 > 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
> For additional commands, e-mail: axis-c-user-help@ws.apache.org
>
>

Re: Help needed on building custom soap fault in axis2c

Posted by Dimuthu Gamage <di...@gmail.com>.
Hi Subra,

On 10/4/07, Subra A Narayanan <as...@gmail.com> 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 whenever  you upgrade the  axis2/c (  if the upgrade have changed the
AXIS2_ERROR_LAST) you need to recompile the service with the new axis2/c
headers(No need to change the code). But I think still it is a issue for
binary compatibility.

Sandesha/C uses AXIS2_ERROR_LAST + 1000 range. Neethi/c which is part of
axis2/c distribution define error codes within AXIS2_ERROR_LAST range. Code
generation need to reserve some error code range (for codegen errors, adb
erros and custom faults) to avoid the conflicts with future extensions.

This is the approach currently used in Axis2.  But in future as more
extensions developed, we need to move for a better approach.

Thanks
Dimuthu

Any help is greatly appreciated.
>
> Subra
>
>
>
> On 10/1/07, Dimuthu Gamage <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> 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> 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 >
> > > > 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 >
> > > > > 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
> > > > For additional commands, e-mail: axis-c-user-help@ws.apache.org
> > > >
> > > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
> > For additional commands, e-mail: axis-c-user-help@ws.apache.org
> >
> >
>

RE: Help needed on building custom soap fault in axis2c

Posted by Dave Meier <DM...@SERENA.com>.
I tried the proposed solution for 1.1.0, but it didn't work.  I am using
1.2.0 so the code may have changed.

Anyway, the following code worked well for me to get my custom error
message sent in the faultstring:

  // status.GetMessage() returns a const char*
  axis2_char_t* msg = (axis2_char_t*) axutil_strdup( env,
const_cast<char*>( status.GetMessage() ) );
  axutil_error_set_error_message( env->error, msg );
  AXIS2_ERROR_SET( env->error,  (enum axutil_error_codes)
AXUTIL_ERROR_MAX, AXIS2_FAILURE );

The code in axutil_error_get_message() (error.c) will only use
error->message if the code is > AXUTIL_ERROR_MAX.

Note that I had to cast to (enum axutil_error_codes) because I have this
code in a .cpp file.

-Dave.

-----Original Message-----
From: Samisa Abeysinghe [mailto:samisa@wso2.com] 
Sent: Thursday, October 04, 2007 11:18 PM
To: Apache AXIS C User List
Subject: Re: Help needed on building custom soap fault in axis2c


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 
>> <ma...@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
>>     <ma...@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
>>         <ma...@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
>>             <ma...@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
>>                 <ma...@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
>>             <ma...@ws.apache.org>
>>             For additional commands, e-mail:
>>             axis-c-user-help@ws.apache.org
>>             <ma...@ws.apache.org>
>>
>>
>>
>>
>>     
>> ---------------------------------------------------------------------
>>     To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
>>     <ma...@ws.apache.org>
>>     For additional commands, e-mail: axis-c-user-help@ws.apache.org
>>     <ma...@ws.apache.org>
>>
>>
>
>


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


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-user-help@ws.apache.org


**********************************************************************
This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply e-mail and destroy all copies of the original message. 
**********************************************************************


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-user-help@ws.apache.org


Re: Help needed on building custom soap fault in axis2c

Posted by Samisa Abeysinghe <sa...@wso2.com>.
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 
>> <ma...@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
>>     <ma...@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
>>         <ma...@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
>>             <ma...@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
>>                 <ma...@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
>>             <ma...@ws.apache.org>
>>             For additional commands, e-mail:
>>             axis-c-user-help@ws.apache.org
>>             <ma...@ws.apache.org>
>>
>>
>>
>>
>>     
>> ---------------------------------------------------------------------
>>     To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
>>     <ma...@ws.apache.org>
>>     For additional commands, e-mail: axis-c-user-help@ws.apache.org
>>     <ma...@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"


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-user-help@ws.apache.org


Re: Help needed on building custom soap fault in axis2c

Posted by Samisa Abeysinghe <sa...@wso2.com>.
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)

Samisa...
>
> Any help is greatly appreciated.
>
> Subra
>
>
>
> On 10/1/07, *Dimuthu Gamage* <dimuthuc@gmail.com 
> <ma...@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
>     <ma...@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
>         <ma...@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
>             <ma...@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
>                 <ma...@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
>             <ma...@ws.apache.org>
>             For additional commands, e-mail:
>             axis-c-user-help@ws.apache.org
>             <ma...@ws.apache.org>
>
>
>
>
>     ---------------------------------------------------------------------
>     To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
>     <ma...@ws.apache.org>
>     For additional commands, e-mail: axis-c-user-help@ws.apache.org
>     <ma...@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"


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-c-user-help@ws.apache.org


Re: Help needed on building custom soap fault in axis2c

Posted by Subra A Narayanan <as...@gmail.com>.
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?

Any help is greatly appreciated.

Subra



On 10/1/07, Dimuthu Gamage <di...@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 <pa...@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> 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 > 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 >
> > > > 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
> > > For additional commands, e-mail: axis-c-user-help@ws.apache.org
> > >
> > >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-c-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-c-user-help@ws.apache.org
>
>

Re: Help needed on building custom soap fault in axis2c

Posted by Dimuthu Gamage <di...@gmail.com>.
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 <pa...@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 <di...@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 > 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 > 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
> > For additional commands, e-mail: axis-c-user-help@ws.apache.org
> >
> >
>