Hi Michael,
There is a bug in the codegen template in processing faults. It is calling
'on_fault' method explicitly, but the correct way is to allow the engine to
call that method.
please check replacing explicit calls of
'return axis2_svc_skel_TestService_on_fault(....)'
to
'return NULL'
inside the axis2_svc_skel_TestService.c file.
The idea is when you return NULL from the business logic, the engine will
create the fault element and insert you custom fault inside the detail tag,
So the response would look like,
<soapenv:Fault>
<faultcode>env:Sender</faultcode>
<faultstring>Undefined error returned by business logic
implementation</faultstring>
<detail>
your custom fault
</detail>
</soapenv:Fault>
I will try to figure out the others issues and try to fix the tool to
support custom soap faults asap.
Thanks
Dimuthu
On Nov 14, 2007 5:30 PM, Michael Sutter <[EMAIL PROTECTED]> wrote:
> 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]
>
>