这是问题的变体,我在Camel's CXF component not catching onException(Exception.class)
中问道我已经实施了克劳斯在上面提出的解决方案,但它不起作用。 我不明白为什么在全球范围内设置HandleFault = true时会触发onCompletion。
我修改了代码A LOT,因此提出了相同的问题,但稍作修改。
My Route看起来像这样:路线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(特定路线)看起来像这样。
.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()
请帮忙。如果问题似乎重复,我道歉。非常绝望。
提前致谢。