Camel Users: I have the following route:
from("activemq:{{in.queue}}") .process(new MyInputProcessor()) .beanRef("myBeanProcessor") .process(new MyOutputProcessor()") .to("activemq:{{out.queue}}"); In my beanRef, I change the body of the Exchange to a different type after processing the incoming message from the Exchange (from the activemq queue). In my route I have the following defined for the exception handling: onException(Exception.class).maximumRedeliveries(0) .useOriginalMessage() .process(exceptionHandler) .convertBodyTo(String.class) .wireTap("activemq:alert"); My requirement is that if in my myBeanProcessor, any Exception occurs, I need to handle it differently in the sense that I cannot use the .useOriginalMessage(), but rather, I need to get the actual body in the exchange after the MyInputProcessor() has run (which I already know), and then do some processing, and then I need to send it to the exceptionHandler. But this time when I send it to the exceptionHandler, I need to get the original message that I got from the "activemq:{{in.queue}}". Here is what I have so far: onException(Exception.class).maximumRedeliveries(0).useOriginalMessage() // When I use this, simple("${body} is com.test.generated.MyType") is evaluated to false .choice() .when(simple("${body} is com.test.generated.MyType")) .log(LoggingLevel.INFO, getClass().getName(), "ExceptionHandling: Routing to direct:sendErrorResponse route").to("direct:sendErrorResponse") .otherwise() .log(LoggingLevel.INFO, getClass().getName(), "ExceptionHandling: Routing to direct:handleExceptionHandler") route") .to("direct:handleExceptionHandler").routeId("exceptionHandler"); // If an exception occurs during the creation of TradeBuilder xml from("direct:sendErrorResponse") .process(new Processor() { @Override public void process(Exchange exchange) throws Exception { MyType myType = exchange.getIn().getBody(MyType.class); // Get and set values into another object MyResponseType resp = new MyResponseType(); resp.setField1(myType.getField1()); resp.setField2(...); resp.setField3(...); exchange.getIn().setBody(resp); } }) .marshal(jaxb). .to("activemq:{{out.queue}}") // Send it also to the exceptionHandler appender .to("direct:handleExceptionHandler").routeId("responseHandler"); from("direct:handleExceptionHandler") // I always want to use the original message that I get from the in.queue in my route above .process(new ExceptionHandler()) .convertBodyTo(String.class) .wireTap("activemq:alert"); Any suggestions? -- View this message in context: http://camel.465427.n5.nabble.com/Exception-Handling-Scenario-Suggestions-Needed-tp5732623.html Sent from the Camel - Users mailing list archive at Nabble.com.