Java ApacheCamelOneException

Java ApacheCamelOneException,java,apache,esb,onexception,Java,Apache,Esb,Onexception,我想捕获路由中的所有异常 我添加此选项: onException(Exception.class).process(new MyFunctionFailureHandler()).stop(); 然后,我创建MyFunctionFailureHandler类 public class MyFunctionFailureHandler implements Processor { @Override public void process(Exchange exchange) throws

我想捕获路由中的所有异常

我添加此选项:

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

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

如果出现异常,程序必须停止

我怎么知道为什么这个代码不起作用


谢谢。

请记住,如果您在多个RouteBuilder类中有路由,则在此路由中有一个OneXpetion将仅影响此RouteBuilder下的所有路由

回顾这一点


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

我在路由上使用了以下方法:

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");
   }
}
在我的错误处理器中

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

我希望这能有所帮助

我得问问。。。为什么不将onException(Exception.class).to(“mock:myerror”)?为什么只使用处理器转发到另一个端点?如果没有在内部路由中处理,If将不会传播到调用方,除非使用您描述的解决方法。但是我从来没有让解决方法起作用……从Camel 2.10开始,需要在路由的顶部指定onException,并且onException子句需要以end()结尾