Author: hadrian Date: Wed Jun 1 17:21:47 2011 New Revision: 1130232 URL: http://svn.apache.org/viewvc?rev=1130232&view=rev Log: CAMEL-4022. Added test showing the problem. The resolution will depend on feedback
Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ExceptionTest.java Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ExceptionTest.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ExceptionTest.java?rev=1130232&r1=1130231&r2=1130232&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ExceptionTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ExceptionTest.java Wed Jun 1 17:21:47 2011 @@ -21,6 +21,8 @@ import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; +import org.junit.Ignore; +import org.junit.Test; /** * @version @@ -89,12 +91,43 @@ public class ExceptionTest extends Conte assertMockEndpointsSatisfied(); } + public void testExceptionWithFatalException() throws Exception { + MockEndpoint resultEndpoint = getMockEndpoint("mock:result"); + MockEndpoint exceptionEndpoint = getMockEndpoint("mock:exception"); + MockEndpoint fatalEndpoint = getMockEndpoint("mock:fatal"); + MockEndpoint errorEndpoint = getMockEndpoint("mock:error"); + + fatalEndpoint.expectedMessageCount(0); + exceptionEndpoint.expectedMessageCount(0); + resultEndpoint.expectedMessageCount(0); + errorEndpoint.expectedMessageCount(1); + // TODO: CAMEL-4022. Message should probably not go to DLC for this scenario + // We need agree on a solution and implement it. See jira for more details. + errorEndpoint.expectedBodiesReceived("<some-value/>"); + + try { + template.sendBody("direct:start2", "<body/>"); + } catch (Exception e) { + // expected + } + + assertMockEndpointsSatisfied(); + } + @Override protected RouteBuilder createRouteBuilder() throws Exception { final Processor exceptionThrower = new Processor() { public void process(Exchange exchange) throws Exception { - exchange.getIn().setBody("<exception/>"); - throw new IllegalArgumentException("Exception thrown intentionally."); + String body = exchange.getIn().getBody(String.class); + body = body.substring(1, body.length() - 2); + boolean fatal = body.equals("exception") || body.indexOf(' ') != -1; + String message = fatal ? "FATAL " : ""; + body = fatal ? message + body : "exception"; + + // TODO: CAMEL-4022. Set a breakpoint here and see the body growing "FATAl FATAL ... Exception thrown" + // See discussion in the issue above for solution found (which will probably lead to changing this test + exchange.getIn().setBody("<" + body + "/>"); + throw new IllegalArgumentException(message + "Exception thrown"); } }; @@ -109,6 +142,9 @@ public class ExceptionTest extends Conte } else if (getName().endsWith("WithHandler")) { log.debug("Using exception handler"); onException(IllegalArgumentException.class).to("mock:exception"); + } else if (getName().endsWith("WithFatalException")) { + log.debug("Using fatal exception"); + onException(IllegalArgumentException.class).process(exceptionThrower).to("mock:fatal"); } from("direct:start").process(exceptionThrower).to("mock:result"); from("direct:start2").to("direct:intermediate").to("mock:result");