Author: davsclaus
Date: Wed Apr 11 07:16:17 2012
New Revision: 1324599
URL: http://svn.apache.org/viewvc?rev=1324599&view=rev
Log:
CAMEL-5162: OnException handled/continued predicates should only be evaluate
once per exception, instead of twice.
Added:
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionContinuePredicateTest.java
- copied unchanged from r1324598,
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionContinuePredicateTest.java
camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionContinueTwoPredicateTest.java
- copied unchanged from r1324598,
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionContinueTwoPredicateTest.java
Modified:
camel/branches/camel-2.9.x/ (props changed)
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Merged /camel/trunk:r1324598
Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified:
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java?rev=1324599&r1=1324598&r2=1324599&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
(original)
+++
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
Wed Apr 11 07:16:17 2012
@@ -712,9 +712,12 @@ public abstract class RedeliveryErrorHan
// clear exception as we let the failure processor handle it
exchange.setException(null);
- boolean handled = false;
+ final boolean shouldHandle = shouldHandled(exchange, data);
+ final boolean shouldContinue = shouldContinue(exchange, data);
// regard both handled or continued as being handled
- if (shouldHandled(exchange, data) || shouldContinue(exchange, data)) {
+ boolean handled = false;
+
+ if (shouldHandle || shouldContinue) {
// its handled then remove traces of redelivery attempted
exchange.getIn().removeHeader(Exchange.REDELIVERED);
exchange.getIn().removeHeader(Exchange.REDELIVERY_COUNTER);
@@ -759,7 +762,7 @@ public abstract class RedeliveryErrorHan
public void done(boolean sync) {
log.trace("Failure processor done: {} processing Exchange:
{}", processor, exchange);
try {
- prepareExchangeAfterFailure(exchange, data);
+ prepareExchangeAfterFailure(exchange, data,
shouldHandle, shouldContinue);
// fire event as we had a failure processor to handle
it, which there is a event for
boolean deadLetterChannel = processor ==
data.deadLetterProcessor && data.deadLetterProcessor != null;
EventHelper.notifyExchangeFailureHandled(exchange.getContext(), exchange,
processor, deadLetterChannel);
@@ -773,7 +776,7 @@ public abstract class RedeliveryErrorHan
} else {
try {
// no processor but we need to prepare after failure as well
- prepareExchangeAfterFailure(exchange, data);
+ prepareExchangeAfterFailure(exchange, data, shouldHandle,
shouldContinue);
} finally {
// callback we are done
callback.done(data.sync);
@@ -793,7 +796,8 @@ public abstract class RedeliveryErrorHan
return sync;
}
- protected void prepareExchangeAfterFailure(final Exchange exchange, final
RedeliveryData data) {
+ protected void prepareExchangeAfterFailure(final Exchange exchange, final
RedeliveryData data,
+ final boolean shouldHandle,
final boolean shouldContinue) {
// we could not process the exchange so we let the failure processor
handled it
ExchangeHelper.setFailureHandled(exchange);
@@ -813,10 +817,10 @@ public abstract class RedeliveryErrorHan
return;
}
- if (shouldHandled(exchange, data)) {
+ if (shouldHandle) {
log.trace("This exchange is handled so its marked as not failed:
{}", exchange);
exchange.setProperty(Exchange.ERRORHANDLER_HANDLED, Boolean.TRUE);
- } else if (shouldContinue(exchange, data)) {
+ } else if (shouldContinue) {
log.trace("This exchange is continued: {}", exchange);
// okay we want to continue then prepare the exchange for that as
well
prepareExchangeForContinue(exchange, data);