Thx.

With the following syntax, it works :

   public void testSplitWithError() throws Exception {
        MockEndpoint error = getMockEndpoint("mock:error");
        error.expectedBodiesReceived("James");
        error.message(0).property(Exchange.EXCEPTION_CAUGHT).isNotNull();

        MockEndpoint result = getMockEndpoint("mock:result");
        result.expectedBodiesReceived("Hello Claus", "Hello Willem");

        try {
            template.sendBody("direct:startWithError", "cl...@james
@Willem");
            fail("Exception has been throwed");
        } catch (CamelExecutionException ex) {
            // Nothing to do
        }

        assertMockEndpointsSatisfied();
    }

Regards,

Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

*****************************
blog : http://cmoulliard.blogspot.com


On Fri, Aug 14, 2009 at 2:52 PM, Claus Ibsen <claus.ib...@gmail.com> wrote:

> 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
>

Reply via email to