Exception handling 正在触发的完成,而不是一个异常
“这是一个问题的变体,”我在一次采访中问道 我已经实施了克劳斯在上面提出的解决方案,但它不起作用我不明白为什么在全局级别设置HandleFault=true时会触发onCompletion。 我对代码做了很多修改,因此提出了相同的问题,但做了一些修改 我的路线如下所示:路线1(骆驼cxf端点)->路线2(直接)->路线3(直接)。在路由3中,我抛出一个WebApplicationException(我再次在MyWSException中包装它),这是一个运行时异常 我已经在上下文级别将HandleFault设置为trueException handling 正在触发的完成,而不是一个异常,exception-handling,cxf,apache-camel,onexception,Exception Handling,Cxf,Apache Camel,Onexception,“这是一个问题的变体,”我在一次采访中问道 我已经实施了克劳斯在上面提出的解决方案,但它不起作用我不明白为什么在全局级别设置HandleFault=true时会触发onCompletion。 我对代码做了很多修改,因此提出了相同的问题,但做了一些修改 我的路线如下所示:路线1(骆驼cxf端点)->路线2(直接)->路线3(直接)。在路由3中,我抛出一个WebApplicationException(我再次在MyWSException中包装它),这是一个运行时异常 我已经在上下文级别将Handle
getContext().setHandleFault(true);
全局级别的OneException句柄如下所示:
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()
.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()
我的onCompletion(特定于路线)如下所示
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()
.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()
请帮忙。如果这个问题似乎是重复的,我道歉。非常绝望
提前感谢。我知道无论是成功还是失败,都会调用onCompletion。但是,我想叫一个例外……我知道发生了什么。路由1的策略不适用于路由3,即使路由1是原始呼叫方。现在,在每个被调用的路由上设置一个OneException,它现在运行良好。