onCompletion被触发,而不是onException

时间:2013-05-17 09:06:48

标签: exception-handling cxf apache-camel onexception

这是问题的变体,我在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()

请帮忙。如果问题似乎重复,我道歉。非常绝望。

提前致谢。

0 个答案:

没有答案