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


Reply via email to