0

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

请帮忙。如果问题似乎重复,我深表歉意。很绝望。

提前致谢。

4

0 回答 0