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