[ 
https://issues.apache.org/jira/browse/ODE-578?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12698989#action_12698989
 ] 

Alexis Midon edited comment on ODE-578 at 4/14/09 5:07 PM:
-----------------------------------------------------------

Now, in case of failure, the details passed to MessageExchangeImpl#setFailure 
are persisted in a message. In addition,  
BpelRuntimeContextImpl#registerActivityForRecovery releases all outstanding 
MyRoleMessageExchange and pass them the failure information received from 
ACTIVITYGUARD. Finally axis2.OdeService builds a fault based on the failure 
informaiton and send it to the WS client.

For instance, if an invoke fails, the client will receive a fault like:

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";><soapenv:Body><soapenv:Fault
 
xmlns:soapenv="http://incubator.apache.org/ode";><faultcode>soapenv:Fault</faultcode><faultstring>Message
 exchange failure due to: The service cannot be found for the endpoint 
reference (EPR) 127.0.0.1/processes/DummyService</faultstring><detail><Fault 
xmlns="http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";><faultcode 
xmlns="">soapenv:Client</faultcode><faultstring xmlns="">The service cannot be 
found for the endpoint reference (EPR) 
127.0.0.1/processes/DummyService</faultstring><detail 
xmlns=""><Exception>org.apache.axis2.AxisFault: The service cannot be found for 
the endpoint reference (EPR) 127.0.0.1/processes/DummyService
        at 
org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.java:62)
        at org.apache.axis2.engine.Phase.invoke(Phase.java:308)
        at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:212)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:132)
        at 
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
        at 
org.apache.axis2.transport.http.HTTPWorker.service(HTTPWorker.java:256)
        at 
org.apache.axis2.transport.http.server.AxisHttpService.doService(AxisHttpService.java:259)
        at 
org.apache.axis2.transport.http.server.AxisHttpService.handleRequest(AxisHttpService.java:166)
        at 
org.apache.axis2.transport.http.server.HttpServiceProcessor.run(HttpServiceProcessor.java:85)
        at 
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:987)
        at 
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:528)
        at java.lang.Thread.run(Thread.java:595)
</Exception></detail></Fault></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>

The details can be muted by setting the new endpoint property 
'mex.failure.verbose' to false. If false, the returned fault becomes:

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";><soapenv:Body><soapenv:Fault
 
xmlns:soapenv="http://incubator.apache.org/ode";><faultcode>soapenv:Fault</faultcode><faultstring>Message
 exchange 
failure</faultstring><detail><Exception>org.apache.ode.axis2.OdeFault: Message 
exchange failure
</Exception></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>




      was (Author: alexismidon):
    Now, in case of failure, the details passed to 
MessageExchangeImpl#setFailure are persisted in a message. In addition,  
BpelRuntimeContextImpl#registerActivityForRecovery releases all outstanding 
MyRoleMessageExchange and pass them the failure information received from 
ACTIVITYGUARD. Finally axis2.OdeService builds a fault based on the failure 
informaiton and send it to the WS client.

For instance, if an invoke fails, the client will received a fault like:

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";><soapenv:Body><soapenv:Fault
 
xmlns:soapenv="http://incubator.apache.org/ode";><faultcode>soapenv:Fault</faultcode><faultstring>Message
 exchange failure due to: The service cannot be found for the endpoint 
reference (EPR) 127.0.0.1/processes/DummyService</faultstring><detail><Fault 
xmlns="http://schemas.xmlsoap.org/soap/envelope/"; 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";><faultcode 
xmlns="">soapenv:Client</faultcode><faultstring xmlns="">The service cannot be 
found for the endpoint reference (EPR) 
127.0.0.1/processes/DummyService</faultstring><detail 
xmlns=""><Exception>org.apache.axis2.AxisFault: The service cannot be found for 
the endpoint reference (EPR) 127.0.0.1/processes/DummyService
        at 
org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.java:62)
        at org.apache.axis2.engine.Phase.invoke(Phase.java:308)
        at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:212)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:132)
        at 
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
        at 
org.apache.axis2.transport.http.HTTPWorker.service(HTTPWorker.java:256)
        at 
org.apache.axis2.transport.http.server.AxisHttpService.doService(AxisHttpService.java:259)
        at 
org.apache.axis2.transport.http.server.AxisHttpService.handleRequest(AxisHttpService.java:166)
        at 
org.apache.axis2.transport.http.server.HttpServiceProcessor.run(HttpServiceProcessor.java:85)
        at 
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:987)
        at 
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:528)
        at java.lang.Thread.run(Thread.java:595)
</Exception></detail></Fault></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>

The details can be muted by setting the new endpoint property 
'mex.failure.verbose' to false. If false, the returned fault becomes:

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";><soapenv:Body><soapenv:Fault
 
xmlns:soapenv="http://incubator.apache.org/ode";><faultcode>soapenv:Fault</faultcode><faultstring>Message
 exchange 
failure</faultstring><detail><Exception>org.apache.ode.axis2.OdeFault: Message 
exchange failure
</Exception></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>



  
> Better error reporting for WS clients
> -------------------------------------
>
>                 Key: ODE-578
>                 URL: https://issues.apache.org/jira/browse/ODE-578
>             Project: ODE
>          Issue Type: Improvement
>            Reporter: Alexis Midon
>            Assignee: Alexis Midon
>             Fix For: 1.3.1, 2.0
>
>
> Currently, when a process is called and some error happens during processing, 
> the error is not communicated back to the client. Instead, all the client 
> gets is a timeout exception which can be confusing.
> Here is an example:
> 2009-03-05 19:30:06,873 ERROR [org.apache.ode.axis2.ODEService] Timeout or
> execution error when waiting for response to MEX {MyRoleMex#632 [Client
> 96038a45-1409-4bda-ab33-81fd29de4a48-3] calling
> {http://www.intalio.com/bpms/workflow/ib4p_20051115}UIFWService.completeTask(...)}
> java.util.concurrent.TimeoutException: Message exchange
> org.apache.ode.bpel.engine.myrolemessageexchangeimpl$responsefut...@e8b20a
> timed out when waiting for a response!
> java.util.concurrent.TimeoutException: Message exchange
> org.apache.ode.bpel.engine.myrolemessageexchangeimpl$responsefut...@e8b20a
> timed out when waiting for a response!
>        at
> org.apache.ode.bpel.engine.MyRoleMessageExchangeImpl$ResponseFuture.get(MyRoleMessageExchangeImpl.java:241)
>        at
> org.apache.ode.axis2.ODEService.onAxisMessageExchange(ODEService.java:152)
>        at
> org.apache.ode.axis2.hooks.ODEMessageReceiver.invokeBusinessLogic(ODEMessageReceiver.java:67)
>        at
> org.apache.ode.axis2.hooks.ODEMessageReceiver.invokeBusinessLogic(ODEMessageReceiver.java:50)
>        at
> org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:96)
>        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:145)
> The proposal is to report back to the client any error during processing of 
> the request (by default). This feature could be turned off for security 
> reasons since it may create a risk of information disclosure.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to