Author: davsclaus Date: Mon Nov 29 15:14:40 2010 New Revision: 1040143 URL: http://svn.apache.org/viewvc?rev=1040143&view=rev Log: Camel fails if onCompletion has been mis configured from Java DSL.
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionInvalidConfiguredTest.java - copied, changed from r1040114, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionTest.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java?rev=1040143&r1=1040142&r2=1040143&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java Mon Nov 29 15:14:40 2010 @@ -141,6 +141,9 @@ public class OnCompletionDefinition exte * @return the builder */ public OnCompletionDefinition onCompleteOnly() { + if (onFailureOnly) { + throw new IllegalArgumentException("Both onCompleteOnly and onFailureOnly cannot be true. Only one of them can be true. On node: " + this); + } // must define return type as OutputDefinition and not this type to avoid end user being able // to invoke onFailureOnly/onCompleteOnly more than once setOnCompleteOnly(Boolean.TRUE); @@ -154,6 +157,9 @@ public class OnCompletionDefinition exte * @return the builder */ public OnCompletionDefinition onFailureOnly() { + if (onCompleteOnly) { + throw new IllegalArgumentException("Both onCompleteOnly and onFailureOnly cannot be true. Only one of them can be true. On node: " + this); + } // must define return type as OutputDefinition and not this type to avoid end user being able // to invoke onFailureOnly/onCompleteOnly more than once setOnCompleteOnly(Boolean.FALSE); Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionInvalidConfiguredTest.java (from r1040114, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionInvalidConfiguredTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionInvalidConfiguredTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionTest.java&r1=1040114&r2=1040143&rev=1040143&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/OnCompletionInvalidConfiguredTest.java Mon Nov 29 15:14:40 2010 @@ -16,79 +16,32 @@ */ package org.apache.camel.processor; -import org.apache.camel.CamelExecutionException; import org.apache.camel.ContextTestSupport; -import org.apache.camel.Exchange; -import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.component.mock.MockEndpoint; /** * @version $Revision$ */ -public class OnCompletionTest extends ContextTestSupport { +public class OnCompletionInvalidConfiguredTest extends ContextTestSupport { - public void testSynchronizeComplete() throws Exception { - getMockEndpoint("mock:sync").expectedBodiesReceived("Bye World"); - getMockEndpoint("mock:sync").expectedPropertyReceived(Exchange.ON_COMPLETION, true); - - MockEndpoint mock = getMockEndpoint("mock:result"); - mock.expectedBodiesReceived("Bye World"); - - template.sendBody("direct:start", "Hello World"); - - assertMockEndpointsSatisfied(); + @Override + public boolean isUseRouteBuilder() { + return false; } - public void testSynchronizeFailure() throws Exception { - getMockEndpoint("mock:sync").expectedMessageCount(1); - getMockEndpoint("mock:sync").expectedPropertyReceived(Exchange.ON_COMPLETION, true); - - MockEndpoint mock = getMockEndpoint("mock:result"); - mock.expectedMessageCount(0); - + public void testInvalidConfigured() throws Exception { try { - template.sendBody("direct:start", "Kabom"); + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + onCompletion().onFailureOnly().onCompleteOnly().to("mock:foo"); + + from("direct:start").to("mock:result"); + } + }); fail("Should throw exception"); - } catch (CamelExecutionException e) { - assertEquals("Kabom", e.getCause().getMessage()); - } - - assertMockEndpointsSatisfied(); - } - - @Override - protected RouteBuilder createRouteBuilder() throws Exception { - return new RouteBuilder() { - @Override - public void configure() throws Exception { - // START SNIPPET: e1 - from("direct:start") - .onCompletion() - // this route is only invoked when the original route is complete as a kind - // of completion callback - .to("log:sync") - .to("mock:sync") - // must use end to denote the end of the onCompletion route - .end() - // here the original route contiues - .process(new MyProcessor()) - .to("mock:result"); - // END SNIPPET: e1 - } - }; - } - - public static class MyProcessor implements Processor { - - public MyProcessor() { - } - - public void process(Exchange exchange) throws Exception { - if ("Kabom".equals(exchange.getIn().getBody())) { - throw new IllegalArgumentException("Kabom"); - } - exchange.getIn().setBody("Bye World"); + } catch (IllegalArgumentException e) { + assertEquals("Both onCompleteOnly and onFailureOnly cannot be true. Only one of them can be true. On node: onCompletion[[]]", e.getMessage()); } } }