Author: davsclaus
Date: Thu Feb 28 07:04:19 2013
New Revision: 1451119
URL: http://svn.apache.org/r1451119
Log:
CAMEL-6109: Camel now validates if try catch finally has been mis configured
when used in routes.
Added:
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.java
- copied, changed from r1451097,
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.java
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredFinallyTest.xml
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.xml
- copied, changed from r1451097,
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.xml
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/CatchDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/FinallyDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryDefinition.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=1451119&r1=1451118&r2=1451119&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
Thu Feb 28 07:04:19 2013
@@ -95,6 +95,11 @@ public class CatchDefinition extends Pro
throw new IllegalArgumentException("At least one Exception must be
configured to catch");
}
+ // parent must be a try
+ if (!(getParent() instanceof TryDefinition)) {
+ throw new IllegalArgumentException("This doCatch should have a
doTry as its parent on " + this);
+ }
+
// do catch does not mandate a child processor
Processor childProcessor = this.createChildProcessor(routeContext,
false);
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/FinallyDefinition.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/FinallyDefinition.java?rev=1451119&r1=1451118&r2=1451119&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/model/FinallyDefinition.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/model/FinallyDefinition.java
Thu Feb 28 07:04:19 2013
@@ -49,6 +49,11 @@ public class FinallyDefinition extends O
@Override
public Processor createProcessor(RouteContext routeContext) throws
Exception {
+ // parent must be a try
+ if (!(getParent() instanceof TryDefinition)) {
+ throw new IllegalArgumentException("This doFinally should have a
doTry as its parent on " + this);
+ }
+
// do finally does mandate a child processor
return this.createChildProcessor(routeContext, true);
}
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java?rev=1451119&r1=1451118&r2=1451119&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/model/TryDefinition.java
Thu Feb 28 07:04:19 2013
@@ -20,7 +20,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
-
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@@ -89,6 +88,11 @@ public class TryDefinition extends Outpu
}
}
+ // must have either a catch or finally
+ if (finallyClause == null && catchClauses == null) {
+ throw new IllegalArgumentException("doTry must have one or more
catch or finally blocks on " + this);
+ }
+
return new TryProcessor(tryProcessor, catchProcessors,
finallyProcessor);
}
Copied:
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.java
(from r1451097,
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.java&r1=1451097&r2=1451119&rev=1451119&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.java
(original)
+++
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.java
Thu Feb 28 07:04:19 2013
@@ -22,23 +22,32 @@ import org.apache.camel.FailedToCreateRo
import static
org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
-public class SpringTryCatchMustHaveExceptionConfiguredTest extends
ContextTestSupport {
+public class SpringTryCatchMisconfiguredTest extends ContextTestSupport {
protected CamelContext createCamelContext() throws Exception {
try {
- createSpringCamelContext(this,
"org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.xml");
+ createSpringCamelContext(this,
"org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.xml");
fail("Should have thrown exception");
} catch (Exception e) {
assertIsInstanceOf(FailedToCreateRouteException.class,
e.getCause());
assertIsInstanceOf(IllegalArgumentException.class,
e.getCause().getCause());
- assertEquals("At least one Exception must be configured to catch",
e.getCause().getCause().getMessage());
+ assertEquals("This doCatch should have a doTry as its parent on
DoCatch[ [class java.io.IOException] -> [To[mock:fail]]]",
e.getCause().getCause().getMessage());
+ }
+
+ try {
+ createSpringCamelContext(this,
"org/apache/camel/spring/processor/SpringTryCatchMisconfiguredFinallyTest.xml");
+ fail("Should have thrown exception");
+ } catch (Exception e) {
+ assertIsInstanceOf(FailedToCreateRouteException.class,
e.getCause());
+ assertIsInstanceOf(IllegalArgumentException.class,
e.getCause().getCause());
+ assertEquals("This doFinally should have a doTry as its parent on
DoFinally[[To[mock:finally]]]", e.getCause().getCause().getMessage());
}
// return a working context instead, to let this test pass
return createSpringCamelContext(this,
"org/apache/camel/spring/processor/SpringTryProcessorHandledTest.xml");
}
- public void testTryCatchMustHaveExceptionConfigured() {
+ public void testTryCatchMisconfigured() {
// noop
}
Added:
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredFinallyTest.xml
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredFinallyTest.xml?rev=1451119&view=auto
==============================================================================
---
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredFinallyTest.xml
(added)
+++
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredFinallyTest.xml
Thu Feb 28 07:04:19 2013
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+ <route>
+ <from uri="direct:start"/>
+ <doTry>
+ <to uri="mock:result"/>
+ </doTry>
+ <doFinally>
+ <to uri="mock:finally"/>
+ </doFinally>
+ </route>
+ </camelContext>
+
+</beans>
Copied:
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.xml
(from r1451097,
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.xml)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.xml&r1=1451097&r2=1451119&rev=1451119&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMustHaveExceptionConfiguredTest.xml
(original)
+++
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/SpringTryCatchMisconfiguredTest.xml
Thu Feb 28 07:04:19 2013
@@ -27,10 +27,11 @@
<from uri="direct:start"/>
<doTry>
<to uri="mock:result"/>
- <doCatch>
- <to uri="mock:fail"/>
- </doCatch>
</doTry>
+ <doCatch>
+ <exception>java.io.IOException</exception>
+ <to uri="mock:fail"/>
+ </doCatch>
</route>
</camelContext>