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:

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>

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?

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 <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> 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: [EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>
    > For additional commands, e-mail: [EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>
    >

    ---------------------------------------------------------------------
    To unsubscribe, e-mail: [EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>
    For additional commands, e-mail: [EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to