axis-c-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sen...@wso2.com
Subject Re: custom error message with c server
Date Wed, 14 Nov 2007 17:46:12 GMT
Hello Michael,

> Hello Dimuthu,
>
> thanks for your reply. I tested it - but it also throws no exception in
> the Java client. I only see the null return value in the client. In the
> service implementation I used:

Well, couldn't this have something to do with the Java Client? (If I'm
wrong, someone please correct me.)

>
> AXIS2_ERROR_SET(...)
> return NULL;
>
> to use the on_fault method of axis2_svc_skel_TestService. Is this right?
> In the on fault method only
> ns1 = axiom_namespace_create(env, "
> http://www.w3.org/2003/05/soap-envelope", "ns1");
> works. If I use the other way the server crashs with Segmentation fault.
> The soap message of the response is:
>
> <soapenv:Envelope
> xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Header/><soapenv:Body><ns1:fault
> xmlns:ns1=" http://www.w3.org/2003/05/soap-envelope">My error message to
> be thrown!</ns1:fault></soapenv:Body></soapenv:Envelope>
>

Wont you get the response you mentioned above in your Java Client? If so,
you can extract the fault that is returned. The fault is,

<ns1:fault xmlns:ns1=" http://www.w3.org/2003/05/soap-envelope">My error
message to be thrown!</ns1:fault>

If you have XML processing capabilities in your Java Client, extracting
the error wouldn't be that much of work.

> where I can see the fault - but maybe there is still something wrong?
>
> But I have another question left. When I use this way I only can send
> one exception to the client - defined in the on fault method? There is
> no direct way to send different exceptions to the client depending on
> the state of the service? When I want to do such I think I have to use
> the way Samisa told?

I think Samisa's way seems to be better.

Regards,
Senaka

>
> Regards Michael
>
> Dimuthu Gamage wrote:
>> Hi Micheal,
>>
>> Your set_custom_error function only write the error message to the log
>> file, and not to the soap message, so to send a custom soap fault you
>> have to manually edit the axis2_svc_skel_TestService_on_fault. Please
>> edit it as the following and test.
>>
>> Java doesn't throw exception because the fault element is in wrong
>> namespace. So It is corrected here.
>>
>>     axiom_node_t* AXIS2_CALL
>>     axis2_svc_skel_TestService_on_fault(axis2_svc_skeleton_t
>> *svc_skeleton,
>>                   const axutil_env_t *env, axiom_node_t *node)
>>     {
>>         axiom_node_t *error_node = NULL;
>>         axiom_element_t *error_ele = NULL;
>>         axiom_namespace_t *ns1 = NULL;
>>
>>         /* you can use either of following method to get the namespace
>> */
>>         ns1 = axiom_namespace_create(env, "
>> http://www.w3.org/2003/05/soap-envelope",
>>                                                    "ns1");
>>
>>         /* or extract the samenmespace as the parent */
>>
>>         ns1 = axiom_element_get_namespace(
>>                     axiom_node_get_data_element(node, env),
>>                     env,
>>                     node);
>>
>>         error_ele = axiom_element_create(env, node, "fault", ns1,
>>                         &error_node);
>>         axiom_element_set_text(error_ele, env, "*Whatever your custom
>> faul*t",
>>                         error_node);
>>         return error_node;
>>     }
>>
>> Thanks
>> Dimuthu
>>
>>
>> On Nov 13, 2007 4:33 PM, Michael Sutter <Michael.Sutter@ipe.fzk.de
>> <mailto:Michael.Sutter@ipe.fzk.de>> wrote:
>>
>>     Hello,
>>
>>     I read your links but they don't solved my problem. Maybe I've done
>>     something wrong - so I explain exactly what I'm doing. In the
>>     service I
>>     implemented what I've found in Jira AXIS2C-678
>>     (https://issues.apache.org/jira/browse/AXIS2C-678?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
>>     <https://issues.apache.org/jira/browse/AXIS2C-678?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel>)
>>     and the echo example of the c server implementation. I implemented a
>>     custom error message method:
>>
>>      void set_custom_error(const axutil_env_t *env, axis2_char_t
>>     *error_message)
>>            {
>>              axutil_error_set_error_message(env->error, error_message);
>>              AXIS2_ERROR_SET(env->error, AXIS2_ERROR_LAST + 1,
>>     AXIS2_FAILURE);
>>            }
>>
>>     and call it from the service method. But then there is no custom
>> error
>>     message delivered to the client. I only found the custom message
>>     in the
>>     log file of the axis server where it is not reachable from the
>>     client. I
>>     also monitored the SOAP messages and the custom error message is not
>>     inside the response:
>>
>>     <soapenv:Envelope
>>     xmlns:soapenv="
>>     http://www.w3.org/2003/05/soap-envelope"><soapenv:Header/><soapenv:Body><fault>TestService|http://auger.fzk.org
>>     failed</fault></soapenv:Body></soapenv:Envelope>
>>
>>     With this response message the java client throws no exception. I
>>     found
>>     that the response is exactly what the on_fault method of the service
>>     creates.
>>
>>     I also read the link from Samisa
>>     (
>>     http://www.nabble.com/Help-needed-on-building-custom-soap-fault-in-axis2c-tf4538948.html#a13053097)
>>     but it has another content - I think. In the link the wsdl has
>> defined
>>     two exceptions and the author wanted to know how to use them. The
>>     solution was to implement them in the on_fault method.
>>
>>     Now to my questions: Have I done something wrong in the
>> implementation
>>     of the service or is it not possible to send custom error messages
>> to
>>     the client with my custom error method? Or have I always to define
>>     the
>>     exceptions in the wsdl and implement them in the on_fault method
>>     of the
>>     service?
>>
>>     I have attached my service - maybe someone can help me.
>>
>>     Kind regards
>>     Michael
>>
>>     Samisa Abeysinghe wrote:
>>     > Subra A Narayanan wrote:
>>     >> Michael,
>>     >>
>>     >> If you are setting the soap fault correctly on your server
>>     side, your
>>     >> java client when it receives the soap response back with the soap
>>     >> fault in it, should automatically throw an exception. You can
>> then
>>     >> retrieve the exception using ex.message.
>>     >>
>>     >> May be someone from the Axis2 team can correct me if I am wrong.
>>     >>
>>     > You are absolutely correct.
>>     > BTW, please follow this thread for further information:
>>     >
>>     http://www.nabble.com/Help-needed-on-building-custom-soap-fault-in-axis2c-tf4538948.html#a13053097
>>     >
>>     >
>>     > Thanks,
>>     > Samisa...
>>     >
>>     >
>>     >
>>     ---------------------------------------------------------------------
>>     > 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-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


Mime
View raw message