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);
}
});