MEX error property is not set when MEX status is ERROR
------------------------------------------------------

                 Key: ODE-214
                 URL: https://issues.apache.org/jira/browse/ODE-214
             Project: ODE
          Issue Type: Bug
          Components: BPEL Runtime
    Affects Versions: 1.1
         Environment: Fuse 3.3.0.2 + ODE 1.1
            Reporter: Mateusz Nowakowski
            Priority: Critical


When there's exception thrown in the OdeService.invokeOde:

org.apache.ode.jbi.msgmap.MessageTranslationException: Could not find a mapper 
for request message for JBI MEX ID:10.136.44.164- 11681241c72-4:7; ODE MEX 
4611686018427387904 is failed.
        at org.apache.ode.jbi.OdeService.invokeOde(OdeService.java:240)
        at
org.apache.ode.jbi.OdeService.onJbiMessageExchange(OdeService.java:148)
        at
org.apache.ode.jbi.JbiMessageExchangeEventRouter.onJbiMessageExchange(Jb
iMessageExchangeEventRouter.java:47)
        at org.apache.ode.jbi.Receiver$1.run(Receiver.java:179)
        at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:417)
        at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
        at java.util.concurrent.FutureTask.run(FutureTask.java:123)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecuto
r.java:650)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.ja
va:675)
        at java.lang.Thread.run(Thread.java:595)

The exception is caught in onJbiMessageExchange, by the following code:

            try {
                invokeOde(jbiMex, ((InOut) jbiMex).getInMessage());
                success = true;
            } catch (Exception ex) {
                __log.error("Error invoking ODE.", ex);
                err = ex;
            } catch (Throwable t) {
                __log.error("Unexpected error invoking ODE.", t);
                err = new RuntimeException(t);
            } finally {
                // If we got an error that wasn't sent.  
                if (jbiMex.getStatus() == ExchangeStatus.ACTIVE &&
!success) {
                    if (err != null && jbiMex.getError() != null)  {
                        jbiMex.setError(err);
                    }
                    jbiMex.setStatus(ExchangeStatus.ERROR);     
                    _ode.getChannel().send(jbiMex);         
                }       
            }
The condition (err != null && jbiMex.getError() != null)   leads to a
situation,
that the status of the MEX is set to ExchangeStatus.ERROR, but the error of the 
MEX is not set (!)

At the end of the day, the endpoint that invoked ODE, gets following
error:
java.lang.Exception: Unkown error (exchange aborted ?)
        at
org.apache.servicemix.http.endpoints.HttpConsumerEndpoint.process(HttpCo
nsumerEndpoint.java:263)
        at
org.apache.servicemix.http.HttpBridgeServlet.doPost(HttpBridgeServlet.ja
va:71)

because it cannot find the error in the MEX.

--
Regards
Mateusz Nowakowski



-- 
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