这是问题的一个变体,我在Camel 的 CXF 组件中问过没有捕获 onException(Exception.class)
我已经实施了克劳斯在上面提出的解决方案,但它不起作用。我不明白为什么在全局级别设置 HandleFault = true 时会触发 onCompletion。
我已经修改了很多代码,因此提出了同样的问题,但做了一些更改。
我的路线如下所示:路线 1(camel-cxf 端点)-> 路线 2(直接)-> 路线 3(直接)。在 Route 3 中,我抛出了一个 WebApplicationException(我再次将其包装在 MyWSException 中),这是一个运行时异常。
我已在上下文级别将 HandleFault 设置为 true。
getContext().setHandleFault(true);
我在全局级别的 onException 句柄如下所示:
onException(Exception.class, MyWSException.class)
.process(new Processor(){
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("In onException Exception and IServicesWSException");
}
})
.to("direct:IServicesWSExceptionHandler");
我也有一个本地的(特定于路线的),看起来像这样。
from("cxf:bean:ordermanagementservice")
.routeId("ordermanagementservice")
.startupOrder(2)
.onException(Throwable.class)
.handled(true)
.setBody().simple(PROCESS_RESULT_FAILED)
.process(new Processor(){
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(AuditConstants.AUDIT_MAP_KEY.getValue(), AuditParam.AUDIT_ATTR_STATUS_ORDER);
}
})
.beanRef("AuditManager", "audit")
.to("direct:IServicesWSExceptionHandler")
.end()
我的 onCompletion(Route specific) 看起来像这样。
.onCompletion()
.setBody().simple(PROCESS_RESULT_SUCCESS)
.process(new Processor(){
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(AuditConstants.AUDIT_MAP_KEY.getValue(), AuditParam.AUDIT_ATTR_STATUS_ORDER);
}
})
.beanRef("AuditManager", "audit")
.end()
请帮忙。如果问题似乎重复,我深表歉意。很绝望。
提前致谢。