Repository: camel Updated Branches: refs/heads/camel-2.12.x a524500a1 -> d5e0389f3 refs/heads/camel-2.13.x 7d1cf3d86 -> b3df68b63 refs/heads/master 3a4822c19 -> b3377b16d
CAMEL-7568: OnComplete did not work with rollback Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b3377b16 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b3377b16 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b3377b16 Branch: refs/heads/master Commit: b3377b16d76e86fd794cd32904d516584c5e1d4b Parents: 3a4822c Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Sep 1 13:02:19 2014 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Sep 1 13:02:19 2014 +0200 ---------------------------------------------------------------------- .../camel/processor/OnCompletionProcessor.java | 8 ++++++++ .../camel/issues/OnCompletionIssueTest.java | 19 +++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/b3377b16/camel-core/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java index abbdcd0..6575cb2 100644 --- a/camel-core/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java +++ b/camel-core/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java @@ -131,6 +131,8 @@ public class OnCompletionProcessor extends ServiceSupport implements AsyncProces Object failureHandled = exchange.removeProperty(Exchange.FAILURE_HANDLED); Object caught = exchange.removeProperty(Exchange.EXCEPTION_CAUGHT); Object errorhandlerHandled = exchange.removeProperty(Exchange.ERRORHANDLER_HANDLED); + Object rollbackOnly = exchange.removeProperty(Exchange.ROLLBACK_ONLY); + Object rollbackOnlyLast = exchange.removeProperty(Exchange.ROLLBACK_ONLY_LAST); Exception cause = exchange.getException(); exchange.setException(null); @@ -153,6 +155,12 @@ public class OnCompletionProcessor extends ServiceSupport implements AsyncProces if (errorhandlerHandled != null) { exchange.setProperty(Exchange.ERRORHANDLER_HANDLED, errorhandlerHandled); } + if (rollbackOnly != null) { + exchange.setProperty(Exchange.ROLLBACK_ONLY, rollbackOnly); + } + if (rollbackOnlyLast != null) { + exchange.setProperty(Exchange.ROLLBACK_ONLY, rollbackOnlyLast); + } if (cause != null) { exchange.setException(cause); } http://git-wip-us.apache.org/repos/asf/camel/blob/b3377b16/camel-core/src/test/java/org/apache/camel/issues/OnCompletionIssueTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/issues/OnCompletionIssueTest.java b/camel-core/src/test/java/org/apache/camel/issues/OnCompletionIssueTest.java index 1509753..6f4dac0 100644 --- a/camel-core/src/test/java/org/apache/camel/issues/OnCompletionIssueTest.java +++ b/camel-core/src/test/java/org/apache/camel/issues/OnCompletionIssueTest.java @@ -18,6 +18,7 @@ package org.apache.camel.issues; import org.apache.camel.CamelExecutionException; import org.apache.camel.ContextTestSupport; +import org.apache.camel.RollbackExchangeException; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; @@ -28,15 +29,16 @@ public class OnCompletionIssueTest extends ContextTestSupport { end.expectedMessageCount(1); MockEndpoint complete = getMockEndpoint("mock:complete"); - complete.expectedBodiesReceivedInAnyOrder("finish", "stop", "ile"); + complete.expectedBodiesReceivedInAnyOrder("finish", "stop", "ile", "markRollback"); MockEndpoint failed = getMockEndpoint("mock:failed"); - failed.expectedBodiesReceivedInAnyOrder("faulted", "npe"); + failed.expectedBodiesReceivedInAnyOrder("faulted", "npe", "rollback"); template.sendBody("direct:input", "finish"); template.sendBody("direct:input", "stop"); template.sendBody("direct:input", "fault"); template.sendBody("direct:input", "ile"); + template.sendBody("direct:input", "markRollback"); try { template.sendBody("direct:input", "npe"); @@ -45,6 +47,13 @@ public class OnCompletionIssueTest extends ContextTestSupport { assertEquals("Darn NPE", e.getCause().getMessage()); } + try { + template.sendBody("direct:input", "rollback"); + fail("Should have thrown exception"); + } catch (CamelExecutionException e) { + assertIsInstanceOf(RollbackExchangeException.class, e.getCause()); + } + setAssertPeriod(2000); assertMockEndpointsSatisfied(); @@ -80,6 +89,12 @@ public class OnCompletionIssueTest extends ContextTestSupport { .when(simple("${body} == 'npe'")) .log("excepting") .throwException(new NullPointerException("Darn NPE")) + .when(simple("${body} == 'rollback'")) + .log("rollback") + .rollback() + .when(simple("${body} == 'markRollback'")) + .log("markRollback") + .markRollbackOnly() .end() .log("finishing") .to("mock:end");