I want to catch all Exception from routes.
I add this OnExeption :
onException(Exception.class).process(new MyFunctionFailureHandler()).stop();
Then, I create the class MyFunctionFailureHandler.
public class MyFunctionFailureHandler  implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
    Throwable caused;
    caused = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
    exchange.getContext().createProducerTemplate().send("mock:myerror", exchange);
   }
}
Unfortunately, it doesn't work and I don't know why.
if there is an Exception, the program must stop.
How can I know why this code doesn't work!!
Thanks.
I used this on my route:
public class MyCamelRoute extends RouteBuilder {
   @Override
   public void configure() throws Exception {
        from("jms:start")
           .process(testExcpProcessor)
       // -- Handle Exceptions
       .onException(Exception.class)
         .process(errorProcessor)
         .handled(true)
       .to("jms:start");
   }
}
and in my errorProcessor
public class ErrorProcessor implements Processor {
  @Override
  public void process(Exchange exchange) throws Exception {
    Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
    if(cause != null){
        log.error("Error has occurred: ", cause);
        // Sending Error message to client
        exchange.getOut().setBody("Error");
    }else
        // Sending response message to client
        exchange.getOut().setBody("Good");
  }
}
I hope it helps
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With