You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by ms...@apache.org on 2007/02/28 03:03:33 UTC

svn commit: r512562 - /incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeService.java

Author: mszefler
Date: Tue Feb 27 18:03:32 2007
New Revision: 512562

URL: http://svn.apache.org/viewvc?view=rev&rev=512562
Log:
Fixed ERROR exchange handling.

Modified:
    incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeService.java

Modified: incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeService.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeService.java?view=diff&rev=512562&r1=512561&r2=512562
==============================================================================
--- incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeService.java (original)
+++ incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeService.java Tue Feb 27 18:03:32 2007
@@ -133,9 +133,11 @@
             } finally {
                 if (!success) {
                     jbiMex.setStatus(ExchangeStatus.ERROR);
-                    jbiMex.setError(err);
+                    if (err != null && jbiMex.getError() != null)
+                        jbiMex.setError(err);
                 } else {
-                    jbiMex.setStatus(ExchangeStatus.DONE);
+                    if (jbiMex.getStatus() == ExchangeStatus.ACTIVE)
+                        jbiMex.setStatus(ExchangeStatus.DONE);
                 }
             }
         } else if (jbiMex.getPattern().equals(org.apache.ode.jbi.MessageExchangePattern.IN_OUT)) {
@@ -147,11 +149,18 @@
             } 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 (!success) {
-                    jbiMex.setError(err);
-                    jbiMex.setStatus(ExchangeStatus.ERROR);
-                }
+                // 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);         
+                }       
             }
         } else {
             __log.error("JBI MessageExchange " + jbiMex.getExchangeId() + " is of an unsupported pattern "
@@ -244,7 +253,7 @@
                 }
             } else {
                 __log.error("ODE MEX " + odeMex + " was unroutable.");
-                jbiMex.setError(new IllegalArgumentException("Unroutable invocation."));
+                sendError(jbiMex, new IllegalArgumentException("Unroutable invocation."));
             }
 
             success = true;