Apache Camel onException



我想从路由中捕获所有异常。

添加onexception:

onException(Exception.class).process(new MyFunctionFailureHandler()).stop();

然后,我创建类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);
   }
}

不幸的是,它不起作用,我不知道为什么。

如果有异常,程序必须停止。

我怎么知道为什么这个代码不工作!!

谢谢。

我在我的路由上使用了这个:

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");
   }
}

和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");
  }
}

希望能有所帮助

请记住,如果你在多个RouteBuilder类中有路由,那么在这个路由中使用onexception只会影响这个RouteBuilder下的所有路由

复习这个答案

另外,如果在路由中发生异常并在此路由中处理,则不会传播到原始调用者路由,您需要使用noErrorHandler()即from(direct:start).errorHandler(noErrorHandler())将异常处理传播回调用者

相关内容

  • 没有找到相关文章