我想从路线中捕捉所有异常。
我添加了这个OnExeption:
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);
}
}
不幸的是,它不起作用,我不知道为什么。
如果有异常,程序必须停止。
我怎么知道为什么这段代码不起作用!!
感谢。
答案 0 :(得分:1)
我在路线上使用了这个:
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");
}
}
并在我的 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");
}
}
我希望它有所帮助
答案 1 :(得分:0)
请记住,如果您在多个RouteBuilder类中有路由,则此路由中的onExcpetion将仅影响此RouteBuilder下的所有路由
查看此answer
此外,如果路由中发生异常并在此路由内处理,则不会将其传播到原始调用方路由,您需要使用noErrorHandler()即from(direct:start).errorHandler(noErrorHandler())
将异常处理传播回调用方