Hi Martin Yeah the was my initial hunch that RuntimeCamelException was wrapping it.
Create a JIRA. It's the DefaultExceptionPolicyStrategy that should be enhanced to check the caused exception as well. Especially if it's a RuntimeCamelException that is just a wrapper. /Claus Ibsen Apache Camel Committer Blog: http://davsclaus.blogspot.com/ On Thu, Dec 4, 2008 at 11:09 AM, Martin Gilday <[EMAIL PROTECTED]> wrote: > Hi Claus, > > Exception.class works. So does RuntimeCamelException.class. When you > look at the log you can see that the IllegalArgumentException is being > wrapped by the RuntimeCamelException, so the onException handler is > probably getting given a RCE and not checking the root cause. I will > create a JIRA. > > Thanks, > Martin > > > ----- Original message ----- > From: "Claus Ibsen" <[EMAIL PROTECTED]> > To: [email protected] > Date: Thu, 4 Dec 2008 10:58:23 +0100 > Subject: Re: Handling converter failure > > Hi > > Could you try with onException(Exception.class) just to see if it > kicks-in then. > Otherwise we should make sure it catches any exception thrown whatever > happened during processing of the exchange. > > Feel free to create a ticket in JIRA with your unit test so we can try > to get it fixed in 1.5.1. > > > /Claus Ibsen > Apache Camel Committer > Blog: http://davsclaus.blogspot.com/ > > > > On Thu, Dec 4, 2008 at 10:42 AM, Martin Gilday <[EMAIL PROTECTED]> > wrote: >> How do you deal with exceptions thrown by a converter? I have set up >> some onException clauses but they only seem to kick in if an exception >> is thrown from a endpoint or a processor. >> >> When I run the following code I can see it retrying the default number >> of times and then the DeadLetterChannel kick in. My mock assertions >> fail as neither queue recieves any messages. I can see the sysout in >> the converter being printed, so it is being invoked. >> Am I doing something incorrect here? I would have thought that there >> was a strong posibility for a converter to need to throw an exception, >> in my case here it would be if the message was missing mandatory fields >> such as telephone number or email. >> >> >> /////Converter >> @Converter >> public static LocalDateTime toLocalDateTime(final Object localDateTime) >> { >> System.out.println("Converting to local date time"); >> throw new IllegalArgumentException("Bad data"); >> } >> >> /////Routes >> Routes routes = new RouteBuilder() { >> >> @Override >> public void configure() throws Exception { >> >> onException(IllegalArgumentException.class).handled(true).to("mock:exception"); >> from("direct:test").convertBodyTo(LocalDateTime.class).to("mock:end"); >> } >> }; >> >> >> /////Test >> MockEndpoint endpoint = (MockEndpoint) >> camelContext.getEndpoint("mock:end"); >> endpoint.expectedMessageCount(0); >> MockEndpoint endpoint2 = (MockEndpoint) >> camelContext.getEndpoint("mock:exception"); >> endpoint2.expectedMessageCount(1); >> >> camelContext.createProducerTemplate().sendBody("direct:test", "test"); >> >> endpoint.assertIsSatisfied(); >> endpoint2.assertIsSatisfied(); >> >
