我正在尝试使用Camel构建集中式错误处理。
我希望所有暴露REST端点的路由都具有透明的错误处理,将异常转换为一段代码即可转换成HTTP错误代码。
目前,我通过在其构造函数中定义onException路由的Abstract RouteBuilder实现了此目的。当我在具体的RouteBuilder中继承它时,它可以正常工作。 但是,这不是透明的,因为我必须知道必须从抽象类继承才能使它起作用。
骆驼中是否有类似于Jersey ExceptionMapper的机制?
我需要的是Camel框架中的一个地方,我可以在其中配置错误处理,而无需确保任何团队成员都必须记住继承抽象错误处理类。
我目前有什么
public abstract class ErrorHandlerRoute extends RouteBuilder {
public ErrorHandlerRoute () {
super();
onException().handled(true)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
//handle exceptions here
exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, HttpStatus.SC_INTERNAL_SERVER_ERROR);
exchange.getOut().setFault(false);
});
}
}
public class MyBusinessRoute extends ErrorHandlerRoute {
@Override
public void configure() throws Exception {
//OK, I know that my errors will be handled
rest()
.get("/{param}")
to("http4://backend");
}
}