Exception handling 正在触发的完成,而不是一个异常

Exception handling 正在触发的完成,而不是一个异常,exception-handling,cxf,apache-camel,onexception,Exception Handling,Cxf,Apache Camel,Onexception,“这是一个问题的变体,”我在一次采访中问道 我已经实施了克劳斯在上面提出的解决方案,但它不起作用我不明白为什么在全局级别设置HandleFault=true时会触发onCompletion。 我对代码做了很多修改,因此提出了相同的问题,但做了一些修改 我的路线如下所示:路线1(骆驼cxf端点)->路线2(直接)->路线3(直接)。在路由3中,我抛出一个WebApplicationException(我再次在MyWSException中包装它),这是一个运行时异常 我已经在上下文级别将Handle

“这是一个问题的变体,”我在一次采访中问道

我已经实施了克劳斯在上面提出的解决方案,但它不起作用我不明白为什么在全局级别设置HandleFault=true时会触发onCompletion。

我对代码做了很多修改,因此提出了相同的问题,但做了一些修改

我的路线如下所示:路线1(骆驼cxf端点)->路线2(直接)->路线3(直接)。在路由3中,我抛出一个WebApplicationException(我再次在MyWSException中包装它),这是一个运行时异常

我已经在上下文级别将HandleFault设置为true

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,它现在运行良好。