Author: davsclaus Date: Tue Dec 21 06:43:04 2010 New Revision: 1051386 URL: http://svn.apache.org/viewvc?rev=1051386&view=rev Log: CAMEL-3448: Added more tests.
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategy.java camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/RouteScopedOnExceptionSameTypeTest.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategy.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategy.java?rev=1051386&r1=1051385&r2=1051386&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategy.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategy.java Tue Dec 21 06:43:04 2010 @@ -185,6 +185,7 @@ public class DefaultExceptionPolicyStrat candidates.put(candidateDiff, candidate); } else { // we have an existing candidate already which we should prefer to use + // for example we check route scope before context scope (preferring route scopes) if (LOG.isTraceEnabled()) { LOG.trace("Existing candidate " + candidates.get(candidateDiff) + " takes precedence over " + candidate + " at level " + candidateDiff); Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/RouteScopedOnExceptionSameTypeTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/RouteScopedOnExceptionSameTypeTest.java?rev=1051386&r1=1051385&r2=1051386&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/RouteScopedOnExceptionSameTypeTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/RouteScopedOnExceptionSameTypeTest.java Tue Dec 21 06:43:04 2010 @@ -16,6 +16,7 @@ */ package org.apache.camel.processor.onexception; +import java.io.FileNotFoundException; import java.io.IOException; import org.apache.camel.ContextTestSupport; @@ -297,4 +298,58 @@ public class RouteScopedOnExceptionSameT assertMockEndpointsSatisfied(); } + public void testOnExceptionRouteAndOnlyGlobalBestMatchType() throws Exception { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + onException(IOException.class) + .handled(true) + .to("mock:foo"); + + from("direct:start") + .onException(Exception.class) + .handled(true) + .to("mock:damn") + .end() + .throwException(new FileNotFoundException("unknown.txt")); + } + }); + context.start(); + + // this time we pick global scoped as its the best match, so foo should get the message + getMockEndpoint("mock:damn").expectedMessageCount(0); + getMockEndpoint("mock:foo").expectedMessageCount(1); + + template.sendBody("direct:start", "Hello World"); + + assertMockEndpointsSatisfied(); + } + + public void testOnExceptionRouteBestMatchAndGlobalSameType() throws Exception { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + onException(IOException.class) + .handled(true) + .to("mock:foo"); + + from("direct:start") + .onException(IOException.class) + .handled(true) + .to("mock:damn") + .end() + .throwException(new FileNotFoundException("unknown.txt")); + } + }); + context.start(); + + // route scope is preferred over context scoped + getMockEndpoint("mock:damn").expectedMessageCount(1); + getMockEndpoint("mock:foo").expectedMessageCount(0); + + template.sendBody("direct:start", "Hello World"); + + assertMockEndpointsSatisfied(); + } + }