You need try .. catch around the template when you send a message as you do NOT handle the exception and thus the client get this exception back.
On Fri, Aug 14, 2009 at 2:43 PM, Charles Moulliard<cmoulli...@gmail.com> wrote: > I have adapted the test case as you propose but it fails. > > org.apache.camel.CamelExecutionException: Exception occured during execution > on the exchange: Exchange[Message: Hello Willem] > at > org.apache.camel.util.ObjectHelper.wrapCamelExecutionException(ObjectHelper.java:1027) > at > org.apache.camel.util.ExchangeHelper.extractResultBody(ExchangeHelper.java:479) > at > org.apache.camel.impl.DefaultProducerTemplate.extractResultBody(DefaultProducerTemplate.java:431) > at > org.apache.camel.impl.DefaultProducerTemplate.extractResultBody(DefaultProducerTemplate.java:427) > at > org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:112) > at > org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:117) > at > org.apache.camel.processor.SplitterTryCatchErrorTest.testSplitWithError(SplitterTryCatchErrorTest.java:38) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at junit.framework.TestCase.runTest(TestCase.java:164) > at junit.framework.TestCase.runBare(TestCase.java:130) > at junit.framework.TestResult$1.protect(TestResult.java:106) > at junit.framework.TestResult.runProtected(TestResult.java:124) > at junit.framework.TestResult.run(TestResult.java:109) > at junit.framework.TestCase.run(TestCase.java:120) > at junit.framework.TestSuite.runTest(TestSuite.java:230) > at junit.framework.TestSuite.run(TestSuite.java:225) > at > org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) > at > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) > Caused by: java.lang.Exception: This is a dummy error James! > at > org.apache.camel.processor.SplitterTryCatchErrorTest$GenerateError.dummyException(SplitterTryCatchErrorTest.java:73) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:193) > at > org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:115) > at > org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:122) > at > org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:95) > at > org.apache.camel.impl.ProcessorEndpoint$1.process(ProcessorEndpoint.java:65) > at > org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:81) > at > org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:78) > at > org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:141) > at > org.apache.camel.processor.SendProcessor.process(SendProcessor.java:78) > at > org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:148) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:74) > at org.apache.camel.processor.TryProcessor.process(TryProcessor.java:63) > at > org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:61) > at > org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:61) > at > org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:186) > at > org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:155) > at > org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88) > at > org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) > at > org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:148) > at > org.apache.camel.processor.MulticastProcessor.doProcessSequntiel(MulticastProcessor.java:189) > at > org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:126) > at > org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:186) > at > org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:155) > at > org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88) > at > org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) > at > org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:148) > at > org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:54) > at > org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48) > at > org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:45) > at > org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:170) > at > org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:155) > at > org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:141) > at > org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:155) > at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:93) > at > org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:97) > at > org.apache.camel.impl.DefaultProducerTemplate.sendBody(DefaultProducerTemplate.java:110) > ... 20 more > > > > CODE ******************************************************** > > import org.apache.camel.ContextTestSupport; > import org.apache.camel.Exchange; > import org.apache.camel.builder.RouteBuilder; > import org.apache.camel.component.mock.MockEndpoint; > import org.apache.camel.impl.JndiRegistry; > > /** > * @version $Revision: 736555 $ > */ > public class SplitterTryCatchErrorTest extends ContextTestSupport { > > public void testSplitWithError() throws Exception { > MockEndpoint error = getMockEndpoint("mock:error"); > error.expectedBodiesReceived("James"); > error.message(0).property(Exchange.EXCEPTION_CAUGHT).contains("This > is a dummy error James!"); > > MockEndpoint result = getMockEndpoint("mock:result"); > result.expectedBodiesReceived("Hello Claus", "Hello Willem"); > > template.sendBody("direct:startWithError", "cl...@james@Willem"); > > assertMockEndpointsSatisfied(); > } > > protected JndiRegistry createRegistry() throws Exception { > JndiRegistry jndi = super.createRegistry(); > jndi.bind("error", new GenerateError()); > return jndi; > } > > protected RouteBuilder createRouteBuilder() { > return new RouteBuilder() { > public void configure() { > from("direct:startWithError") > .split(body().tokenize("@")) > .doTry() > // GENERATE A DUMMY ERROR > .to("bean:error") > .to("mock:result") > .doCatch(java.lang.Exception.class).handled(false) > > .to("log:org.apache.camel.processor?level=INFO&multiline=true&showException=true&showCaughtException=true&showStackTrace=false") > .to("mock:error") > .end(); > } > }; > } > > public static final class GenerateError { > public GenerateError() { > // Helper Class > } > > public String dummyException(String payload) throws Exception { > if (payload.equals("James")) { > throw new Exception("This is a dummy error James!"); > } > return "Hello " + payload; > } > > } > > > } > > ******************************************** > > Here is the trace of the log > > 2009-08-14 14:34:57,726 [main ] INFO > DefaultCamelContext - JMX enabled. Using > InstrumentationLifecycleStrategy. > 2009-08-14 14:34:57,882 [main ] DEBUG > SplitterTryCatchErrorTest - Using created route builder: Routes: [] > 2009-08-14 14:34:57,882 [main ] DEBUG > DefaultCamelContext - Adding routes from builder: Routes: [] > 2009-08-14 14:34:58,132 [main ] INFO > DefaultCamelContext - Apache Camel (CamelContext:camel-1) is > starting > 2009-08-14 14:34:58,132 [main ] DEBUG > DefaultProducerServicePool - Starting service pool: > org.apache.camel.impl.defaultproducerservicep...@b02efa > 2009-08-14 14:34:58,601 [main ] DEBUG > DefaultComponentResolver - Found component: direct via type: > org.apache.camel.component.direct.DirectComponent via: > META-INF/services/org/apache/camel/component/direct > 2009-08-14 14:34:58,601 [main ] DEBUG > DefaultComponent - Creating endpoint > uri=[direct://startWithError], path=[startWithError], parameters=[{}] > 2009-08-14 14:34:58,616 [main ] DEBUG > DefaultCamelContext - direct://startWithError converted to > endpoint: Endpoint[direct://startWithError] by component: > org.apache.camel.component.direct.directcompon...@1e0f2f6 > 2009-08-14 14:34:58,695 [main ] DEBUG > DefaultComponentResolver - Found component: bean via type: > org.apache.camel.component.bean.BeanComponent via: > META-INF/services/org/apache/camel/component/bean > 2009-08-14 14:34:58,710 [main ] DEBUG > DefaultComponent - Creating endpoint uri=[bean://error], > path=[error], parameters=[{}] > 2009-08-14 14:34:58,726 [main ] DEBUG > DefaultCamelContext - bean://error converted to endpoint: > Endpoint[bean://error] by component: > org.apache.camel.component.bean.beancompon...@1c0f2e5 > 2009-08-14 14:34:58,773 [main ] DEBUG > DefaultComponentResolver - Found component: mock via type: > org.apache.camel.component.mock.MockComponent via: > META-INF/services/org/apache/camel/component/mock > 2009-08-14 14:34:58,773 [main ] DEBUG > DefaultComponent - Creating endpoint uri=[mock://result], > path=[result], parameters=[{}] > 2009-08-14 14:34:58,788 [main ] DEBUG > DefaultCamelContext - mock://result converted to endpoint: > Endpoint[mock://result] by component: > org.apache.camel.component.mock.mockcompon...@1977b9b > 2009-08-14 14:34:58,835 [main ] DEBUG > DefaultComponentResolver - Found component: log via type: > org.apache.camel.component.log.LogComponent via: > META-INF/services/org/apache/camel/component/log > 2009-08-14 14:34:58,851 [main ] DEBUG > DefaultComponent - Creating endpoint > uri=[log://org.apache.camel.processor?level=INFO&multiline=true&showCaughtException=true&showException=true&showStackTrace=false], > path=[org.apache.camel.processor], parameters=[{level=INFO, multiline=true, > showCaughtException=true, showException=true, showStackTrace=false}] > 2009-08-14 14:34:58,882 [main ] DEBUG > DefaultCamelContext - > log://org.apache.camel.processor?level=INFO&multiline=true&showCaughtException=true&showException=true&showStackTrace=false > converted to endpoint: > Endpoint[log://org.apache.camel.processor?level=INFO&multiline=true&showCaughtException=true&showException=true&showStackTrace=false] > by component: org.apache.camel.component.log.logcompon...@1a7ddcf > 2009-08-14 14:34:58,882 [main ] DEBUG > DefaultComponent - Creating endpoint uri=[mock://error], > path=[error], parameters=[{}] > 2009-08-14 14:34:58,882 [main ] DEBUG > DefaultCamelContext - mock://error converted to endpoint: > Endpoint[mock://error] by component: > org.apache.camel.component.mock.mockcompon...@1977b9b > 2009-08-14 14:34:58,976 [main ] DEBUG > DefaultCamelContext - Starting routes > 2009-08-14 14:34:59,116 [main ] DEBUG > DirectConsumer - Starting consumer: > Consumer[direct://startWithError] > 2009-08-14 14:34:59,116 [main ] DEBUG > DefaultCamelContext - Route 0: > EventDrivenConsumerRoute[Endpoint[direct://startWithError] -> > UnitOfWork(Channel[Splitter[on: tokenize(body, @) to: Channel[Try > {Pipeline[Channel[sendTo(Endpoint[bean://error])], > Channel[sendTo(Endpoint[mock://result])]]} [Catch[[class > java.lang.Exception] -> > Pipeline[Channel[sendTo(Endpoint[log://org.apache.camel.processor?level=INFO&multiline=true&showCaughtException=true&showException=true&showStackTrace=false])], > Channel[sendTo(Endpoint[mock://error])]]]]] aggregate: > useLatestAggregationStrategy]])] > 2009-08-14 14:34:59,116 [main ] DEBUG > DefaultCamelContext - Started routes > 2009-08-14 14:34:59,116 [main ] INFO > DefaultCamelContext - Apache Camel (CamelContext:camel-1) > started > 2009-08-14 14:34:59,163 [main ] DEBUG > DirectProducer - Starting producer: > Producer[direct://startWithError] > 2009-08-14 14:34:59,179 [main ] DEBUG > ProducerCache - Adding to producer cache with key: > Endpoint[direct://startWithError] for producer: > Producer[direct://startWithError] > 2009-08-14 14:34:59,304 [main ] DEBUG > ProducerCache - >>>> Endpoint[direct://startWithError] > Exchange[Message: cl...@james@Willem] > 2009-08-14 14:34:59,413 [main ] DEBUG > ProcessorEndpoint$1 - Starting producer: Producer[bean://error] > 2009-08-14 14:34:59,413 [main ] DEBUG > ProducerCache - Adding to producer cache with key: > Endpoint[bean://error] for producer: Producer[bean://error] > 2009-08-14 14:35:00,726 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.component.file.GenericFileConverter > 2009-08-14 14:35:00,757 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.InstanceMethodWithExchangeTestConverter > 2009-08-14 14:35:00,757 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.StaticMethodWithExchangeTestConverter > 2009-08-14 14:35:00,757 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.CamelConverter > 2009-08-14 14:35:00,757 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.CollectionConverter > 2009-08-14 14:35:00,757 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.IOConverter > 2009-08-14 14:35:00,773 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.jaxp.DomConverter > 2009-08-14 14:35:00,773 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.jaxp.StaxConverter > 2009-08-14 14:35:00,788 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.jaxp.StreamSourceConverter > 2009-08-14 14:35:00,788 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.jaxp.XmlConverter > 2009-08-14 14:35:00,788 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.NIOConverter > 2009-08-14 14:35:00,788 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.ObjectConverter > 2009-08-14 14:35:00,804 [main ] DEBUG > AnnotationTypeConverterLoader - Loading converter class: > org.apache.camel.converter.stream.StreamCacheConverter > 2009-08-14 14:35:00,804 [main ] DEBUG > BeanProcessor - Setting bean invocation result on the IN > message: Hello Claus > 2009-08-14 14:35:00,804 [main ] DEBUG > BeanProcessor - Setting bean invocation result on the IN > message: Hello Claus > 2009-08-14 14:35:00,804 [main ] DEBUG > MockEndpoint$1 - Starting producer: Producer[mock://result] > 2009-08-14 14:35:00,804 [main ] DEBUG > ProducerCache - Adding to producer cache with key: > Endpoint[mock://result] for producer: Producer[mock://result] > 2009-08-14 14:35:00,820 [main ] DEBUG > MockEndpoint - mock://result >>>> 1 : Exchange[Message: > Hello Claus] with body: Hello Claus > 2009-08-14 14:35:00,820 [main ] DEBUG > Pipeline - Message exchange has failed so breaking out > of pipeline: Exchange[Message: James] Exception: java.lang.Exception: This > is a dummy error James! > 2009-08-14 14:35:00,820 [main ] DEBUG > ProcessorEndpoint$1 - Starting producer: > Producer[log://org.apache.camel.processor?level=INFO&multiline=true&showCaughtException=true&showException=true&showStackTrace=false] > 2009-08-14 14:35:00,820 [main ] DEBUG > ProducerCache - Adding to producer cache with key: > Endpoint[log://org.apache.camel.processor?level=INFO&multiline=true&showCaughtException=true&showException=true&showStackTrace=false] > for producer: > Producer[log://org.apache.camel.processor?level=INFO&multiline=true&showCaughtException=true&showException=true&showStackTrace=false] > 2009-08-14 14:35:00,835 [main ] INFO > processor - Exchange[ > , BodyType:String > , Body:James > , CaughtExceptionType:java.lang.Exception, CaughtExceptionMessage:This is a > dummy error James!] > 2009-08-14 14:35:00,835 [main ] DEBUG > MockEndpoint$1 - Starting producer: Producer[mock://error] > 2009-08-14 14:35:00,835 [main ] DEBUG > ProducerCache - Adding to producer cache with key: > Endpoint[mock://error] for producer: Producer[mock://error] > 2009-08-14 14:35:00,835 [main ] DEBUG > MockEndpoint - mock://error >>>> 1 : Exchange[Message: > James] with body: James > 2009-08-14 14:35:00,835 [main ] DEBUG > TryProcessor - The exception is handled: false for the > exception: java.lang.Exception caused by: This is a dummy error James! > 2009-08-14 14:35:00,835 [main ] DEBUG > DefaultErrorHandler - Failed delivery for exchangeId: > ID-dell-charles-2915-1250253299195-0-2. On delivery attempt: 0 caught: > java.lang.Exception: This is a dummy error James! > 2009-08-14 14:35:00,835 [main ] DEBUG > DefaultErrorHandler - This exchange is not handled so its marked > as failed: Exchange[Message: James] > 2009-08-14 14:35:00,835 [main ] DEBUG > BeanProcessor - Setting bean invocation result on the IN > message: Hello Willem > 2009-08-14 14:35:00,835 [main ] DEBUG > BeanProcessor - Setting bean invocation result on the IN > message: Hello Willem > 2009-08-14 14:35:00,835 [main ] DEBUG > MockEndpoint - mock://result >>>> 2 : Exchange[Message: > Hello Willem] with body: Hello Willem > 2009-08-14 14:35:00,835 [main ] DEBUG > MulticastProcessor - Done sequientel processing 3 exchanges > 2009-08-14 14:35:00,835 [main ] DEBUG > DefaultErrorHandler - Failed delivery for exchangeId: > ID-dell-charles-2915-1250253299195-0-4. On delivery attempt: 0 caught: > java.lang.Exception: This is a dummy error James! > 2009-08-14 14:35:00,835 [main ] DEBUG > DefaultErrorHandler - This exchange is not handled so its marked > as failed: Exchange[Message: Hello Willem] > 2009-08-14 14:35:00,835 [main ] DEBUG > SplitterTryCatchErrorTest - tearDown test: testSplitWithError > 2009-08-14 14:35:00,835 [main ] INFO > DefaultCamelContext - Apache Camel (CamelContext:camel-1) is > stopping > 2009-08-14 14:35:00,835 [main ] DEBUG > DirectConsumer - Stopping consumer: > Consumer[direct://startWithError] > 2009-08-14 14:35:00,835 [main ] DEBUG > DefaultProducerServicePool - Stopping service pool: > org.apache.camel.impl.defaultproducerservicep...@b02efa > 2009-08-14 14:35:00,835 [main ] INFO > DefaultCamelContext - Apache Camel (CamelContext:camel-1) > stopped > > Regards, > > Charles Moulliard > Senior Enterprise Architect > Apache Camel Committer > > ***************************** > blog : http://cmoulliard.blogspot.com > > > On Fri, Aug 14, 2009 at 10:50 AM, Claus Ibsen <claus.ib...@gmail.com> wrote: > >> Hi >> >> But Camel is smart and flexible so it allows you to lower the handled >> flag on doCatch (noticed handled(false)) so you can do like this, in >> which the client will get the exception back in his face. And the >> mock:error can see the caused exception from a property on the >> exchange >> >> MockEndpoint error = getMockEndpoint("mock:error"); >> error.expectedBodiesReceived("James"); >> error.message(0).property(Exchange.EXCEPTION_CAUGHT).isNotNull(); >> >> >> from("direct:start") >> .split(body().tokenize("@")) >> .doTry() >> .to("bean:error") >> .to("mock:result") >> .doCatch(Exception.class).handled(false) >> .to("mock:error") >> .end(); >> >> >> On Fri, Aug 14, 2009 at 10:44 AM, Claus Ibsen<claus.ib...@gmail.com> >> wrote: >> > Hi >> > >> > Works fine I will commit an unit test later when Hadrian is done with >> > the build of Camel 2.0 release. >> > >> > 2 messages goes to mock:result >> > 1 message go to mock:error >> > >> > All as expected. >> > >> > Since you use doTry .. doCatch the client will not receive any >> > exception as he will not do that either when you do >> > >> > try { >> > >> > } catch (Exception e) { >> > .. do something >> > } >> > >> > Since you do NOT rethrow the exception in the catch block. Catching an >> > exception is like handling it = NO MORE AN EXCEPTION >> > >> > >> > >> > >> > On Wed, Aug 12, 2009 at 2:53 PM, Charles Moulliard<cmoulli...@gmail.com> >> wrote: >> >> Hi, >> >> >> >> I'm back again with try/catch and split. I have created the following >> unit >> >> test who seems to work but I don't understand why the try/catch block of >> the >> >> test does not receive the error ? >> >> >> >> Code >> >> >> >> package org.apache.camel.processor; >> >> >> >> import org.apache.camel.ContextTestSupport; >> >> // import org.apache.camel.RuntimeCamelException; >> >> import org.apache.camel.builder.RouteBuilder; >> >> import org.apache.camel.component.mock.MockEndpoint; >> >> import org.apache.camel.impl.JndiRegistry; >> >> >> >> public class SplitterTryCatchErrorTest extends ContextTestSupport { >> >> >> >> public void testSplitWithError() throws Exception { >> >> MockEndpoint resultEndpoint = getMockEndpoint("mock:error"); >> >> resultEndpoint.expectedBodiesReceived("James"); >> >> >> >> try { >> >> template.sendBody("direct:startWithError", "cl...@james >> >> @Willem"); >> >> //fail("Should have thrown an exception"); >> >> } catch (Exception e) { >> >> assertTrue(e.getCause().getMessage().startsWith("This is a >> dummy >> >> error James!")); >> >> } >> >> >> >> assertMockEndpointsSatisfied(); >> >> } >> >> >> >> >> >> protected JndiRegistry createRegistry() throws Exception { >> >> JndiRegistry jndi = super.createRegistry(); >> >> jndi.bind("error", new GenerateError()); >> >> return jndi; >> >> } >> >> >> >> protected RouteBuilder createRouteBuilder() { >> >> return new RouteBuilder() { >> >> public void configure() { >> >> from("direct:startWithError") >> >> .split(body().tokenize("@")) >> >> .doTry() >> >> // GENERATE A DUMMY ERROR >> >> .to("bean:error") >> >> .to("mock:result") >> >> .doCatch(java.lang.Exception.class) >> >> .to("mock:error") >> >> .end(); >> >> >> >> } >> >> >> >> public static final class GenerateError { >> >> public GenerateError() { >> >> // Helper Class >> >> } >> >> >> >> public String dummyException(String payload) throws Exception { >> >> if (payload.equals("James")) { >> >> throw new Exception("This is a dummy error James!"); >> >> } >> >> return "Hello " + payload; >> >> } >> >> >> >> } >> >> >> >> >> >> } >> >> >> >> What I observe in the log is that the split of the body is done and each >> >> message is processed individually : one for Claus, one for Willem. For >> >> James, a dummy exception is throwed. >> >> >> >> 2009-08-12 14:41:06,701 [main ] DEBUG >> >> ProducerCache - >>>> Endpoint[direct://startWithError] >> >> Exchange[Message: cl...@james@Willem] >> >> 2009-08-12 14:41:06,811 [main ] DEBUG >> >> ProcessorEndpoint$1 - Starting producer: >> Producer[bean://error] >> >> 2009-08-12 14:41:06,811 [main ] DEBUG >> >> ProducerCache - Adding to producer cache with key: >> >> Endpoint[bean://error] for producer: Producer[bean://error] >> >> 2009-08-12 14:41:09,233 [main ] DEBUG >> >> BeanProcessor - Setting bean invocation result on the >> IN >> >> message: Hello Claus >> >> 2009-08-12 14:41:09,233 [main ] DEBUG >> >> BeanProcessor - Setting bean invocation result on the >> IN >> >> message: Hello Claus >> >> 2009-08-12 14:41:09,248 [main ] DEBUG >> >> MockEndpoint$1 - Starting producer: >> Producer[mock://result] >> >> 2009-08-12 14:41:09,248 [main ] DEBUG >> >> ProducerCache - Adding to producer cache with key: >> >> Endpoint[mock://result] for producer: Producer[mock://result] >> >> 2009-08-12 14:41:09,248 [main ] DEBUG >> >> MockEndpoint - mock://result >>>> 1 : >> Exchange[Message: >> >> Hello Claus] with body: Hello Claus >> >> 2009-08-12 14:41:09,248 [main ] DEBUG >> >> Pipeline - Message exchange has failed so breaking >> out >> >> of pipeline: Exchange[Message: James] Exception: java.lang.Exception: >> This >> >> is a dummy error James! >> >> 2009-08-12 14:41:09,264 [main ] DEBUG >> >> MockEndpoint$1 - Starting producer: >> Producer[mock://error] >> >> 2009-08-12 14:41:09,264 [main ] DEBUG >> >> ProducerCache - Adding to producer cache with key: >> >> Endpoint[mock://error] for producer: Producer[mock://error] >> >> 2009-08-12 14:41:09,264 [main ] DEBUG >> >> MockEndpoint - mock://error >>>> 1 : Exchange[Message: >> >> James] with body: James >> >> 2009-08-12 14:41:09,264 [main ] DEBUG >> >> TryProcessor - The exception is handled: true for the >> >> exception: java.lang.Exception caused by: This is a dummy error James! >> >> 2009-08-12 14:41:09,264 [main ] DEBUG >> >> BeanProcessor - Setting bean invocation result on the >> IN >> >> message: Hello Willem >> >> 2009-08-12 14:41:09,264 [main ] DEBUG >> >> BeanProcessor - Setting bean invocation result on the >> IN >> >> message: Hello Willem >> >> 2009-08-12 14:41:09,264 [main ] DEBUG >> >> MockEndpoint - mock://result >>>> 2 : >> Exchange[Message: >> >> Hello Willem] with body: Hello Willem >> >> 2009-08-12 14:41:09,264 [main ] DEBUG >> >> MulticastProcessor - Done sequientel processing 3 exchanges >> >> 2009-08-12 14:41:09,264 [main ] INFO >> >> MockEndpoint - Asserting: Endpoint[mock://result] is >> >> satisfied >> >> 2009-08-12 14:41:09,264 [main ] INFO >> >> MockEndpoint - Asserting: Endpoint[mock://error] is >> >> satisfied >> >> 2009-08-12 14:41:09,264 [main ] DEBUG >> >> SplitterTryCatchErrorTest - tearDown test: testSplitWithError >> >> >> >> The test succeeds but the exception is not catched in the try/catch >> block of >> >> testSplitWithError. What is wrong ? >> >> >> >> Regards, >> >> >> >> Charles >> >> >> > >> > >> > >> > -- >> > Claus Ibsen >> > Apache Camel Committer >> > >> > Open Source Integration: http://fusesource.com >> > Blog: http://davsclaus.blogspot.com/ >> > Twitter: http://twitter.com/davsclaus >> > >> >> >> >> -- >> Claus Ibsen >> Apache Camel Committer >> >> Open Source Integration: http://fusesource.com >> Blog: http://davsclaus.blogspot.com/ >> Twitter: http://twitter.com/davsclaus >> > -- Claus Ibsen Apache Camel Committer Open Source Integration: http://fusesource.com Blog: http://davsclaus.blogspot.com/ Twitter: http://twitter.com/davsclaus