Author: davsclaus
Date: Wed Dec  9 07:39:50 2009
New Revision: 888719

URL: http://svn.apache.org/viewvc?rev=888719&view=rev
Log:
CAMEL-2269: doCatch should validate at least one exception configured to catch.

Added:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryCatchMustHaveExceptionConfiguredTest.java
      - copied, changed from r888706, 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryCatchContinueToRouteTest.java
Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java?rev=888719&r1=888718&r2=888719&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
 Wed Dec  9 07:39:50 2009
@@ -87,6 +87,11 @@
 
     @Override
     public CatchProcessor createProcessor(RouteContext routeContext) throws 
Exception {
+        // must have at least one exception
+        if (getExceptionClasses().isEmpty()) {
+            throw new IllegalArgumentException("At least one Exception must be 
configured to catch");
+        }
+
         Processor childProcessor = routeContext.createProcessor(this);
 
         Predicate when = null;

Copied: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryCatchMustHaveExceptionConfiguredTest.java
 (from r888706, 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryCatchContinueToRouteTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryCatchMustHaveExceptionConfiguredTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryCatchMustHaveExceptionConfiguredTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryCatchContinueToRouteTest.java&r1=888706&r2=888719&rev=888719&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryCatchContinueToRouteTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/TryCatchMustHaveExceptionConfiguredTest.java
 Wed Dec  9 07:39:50 2009
@@ -17,48 +17,39 @@
 package org.apache.camel.processor;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
+import org.apache.camel.FailedToCreateRouteException;
 import org.apache.camel.builder.RouteBuilder;
 
 /**
  * @version $Revision$
  */
-public class TryCatchContinueToRouteTest extends ContextTestSupport {
+public class TryCatchMustHaveExceptionConfiguredTest extends 
ContextTestSupport {
 
-    public void testTryCatchContinueToRoute() throws Exception {
-        getMockEndpoint("mock:a").expectedBodiesReceived("Hello World");
-        getMockEndpoint("mock:b").expectedBodiesReceived("Hello World");
-        getMockEndpoint("mock:catch").expectedBodiesReceived("Hello World");
-        
getMockEndpoint("mock:catch").message(0).property(Exchange.EXCEPTION_CAUGHT).isInstanceOf(IllegalArgumentException.class);
-        getMockEndpoint("mock:c").expectedBodiesReceived("Hello World");
-        
getMockEndpoint("mock:c").message(0).property(Exchange.EXCEPTION_CAUGHT).isInstanceOf(IllegalArgumentException.class);
-
-        template.sendBody("direct:a", "Hello World");
-
-        assertMockEndpointsSatisfied();
-    }
-
-    @Override
-    protected RouteBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
+    public void testTryCatchMustHaveExceptionConfigured() throws Exception {
+        context.addRoutes(new RouteBuilder() {
             @Override
             public void configure() throws Exception {
                 from("direct:a")
-                    .to("mock:a")
-                    .to("direct:b")
-                    .to("direct:c");
-
-                from("direct:b")
                     .doTry()
                         .to("mock:b")
                         .throwException(new IllegalArgumentException("Damn"))
-                    .doCatch(Exception.class)
+                    .doCatch()
                         .to("mock:catch")
                     .end();
-
-                from("direct:c")
-                    .to("mock:c");
             }
-        };
+        });
+
+        try {
+            context.start();
+            fail("Should throw exception");
+        } catch (FailedToCreateRouteException e) {
+            assertIsInstanceOf(IllegalArgumentException.class, e.getCause());
+            assertEquals("At least one Exception must be configured to catch", 
e.getCause().getMessage());
+        }
+    }
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
     }
-}
+}
\ No newline at end of file


Reply via email to