You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/09/22 18:26:44 UTC

svn commit: r1174245 - in /camel/trunk/camel-core/src/main/java/org/apache/camel: impl/DefaultExchange.java processor/UnitOfWorkProcessor.java processor/interceptor/DefaultChannel.java

Author: davsclaus
Date: Thu Sep 22 16:26:43 2011
New Revision: 1174245

URL: http://svn.apache.org/viewvc?rev=1174245&view=rev
Log:
CAMEL-4447: Fixing potential NPE in access to UnitOfWork on Exchange.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/UnitOfWorkProcessor.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java?rev=1174245&r1=1174244&r2=1174245&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java Thu Sep 22 16:26:43 2011
@@ -323,7 +323,12 @@ public final class DefaultExchange imple
     }
 
     public boolean isTransacted() {
-        return getUnitOfWork() != null && getUnitOfWork().isTransacted();
+        UnitOfWork uow = getUnitOfWork();
+        if (uow != null) {
+            return uow.isTransacted();
+        } else {
+            return false;
+        }
     }
 
     public boolean isRollbackOnly() {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/UnitOfWorkProcessor.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/UnitOfWorkProcessor.java?rev=1174245&r1=1174244&r2=1174245&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/UnitOfWorkProcessor.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/UnitOfWorkProcessor.java Thu Sep 22 16:26:43 2011
@@ -152,19 +152,23 @@ public class UnitOfWorkProcessor extends
     private void doneUow(UnitOfWork uow, Exchange exchange) {
         // unit of work is done
         try {
-            if (exchange.getUnitOfWork() != null) {
-                exchange.getUnitOfWork().done(exchange);
+            if (uow != null) {
+                uow.done(exchange);
             }
         } catch (Throwable e) {
             LOG.warn("Exception occurred during done UnitOfWork for Exchange: " + exchange
                     + ". This exception will be ignored.", e);
         }
         try {
-            uow.stop();
+            if (uow != null) {
+                uow.stop();
+            }
         } catch (Throwable e) {
             LOG.warn("Exception occurred during stopping UnitOfWork for Exchange: " + exchange
                     + ". This exception will be ignored.", e);
         }
+
+        // remove uow from exchange as its done
         exchange.setUnitOfWork(null);
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java?rev=1174245&r1=1174244&r2=1174245&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultChannel.java Thu Sep 22 16:26:43 2011
@@ -35,6 +35,7 @@ import org.apache.camel.processor.Interc
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.RouteContext;
+import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.AsyncProcessorConverterHelper;
 import org.apache.camel.util.AsyncProcessorHelper;
@@ -302,11 +303,17 @@ public class DefaultChannel extends Serv
         AsyncProcessor async = AsyncProcessorConverterHelper.convert(processor);
         boolean sync = async.process(exchange, new AsyncCallback() {
             public void done(boolean doneSync) {
-                // pop the route context we just used
-                if (exchange.getUnitOfWork() != null) {
-                    exchange.getUnitOfWork().popRouteContext();
+                try {
+                    UnitOfWork uow = exchange.getUnitOfWork();
+                    // pop the route context we just used
+                    if (uow != null) {
+                        uow.popRouteContext();
+                    }
+                } catch (Exception e) {
+                    exchange.setException(e);
+                } finally {
+                    callback.done(doneSync);
                 }
-                callback.done(doneSync);
             }
         });