Hi Subra,
On 10/4/07, Subra A Narayanan <[EMAIL PROTECTED]> 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 <[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]> 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]> 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] >
> > > > 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] >
> > > > > 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]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>