Camel的CXF组件没有捕获onException(Exception.class)

时间:2013-05-10 11:43:08

标签: apache exception-handling cxf apache-camel onexception

我有一个camel-cxf webservice。我用来处理CXF的SOAP Fault Interceptor机制中的所有SOAP Faults。这很有效。

我认为最好处理在同一层的Camel层抛出的Exception,并编写一个简单的onException场景,如下所示:

onException的(Exception.class)。             到("直接:MyWSExceptionHandler&#34);

每当抛出一个自定义异常时,我都希望onException能够启动(记住我也有一个SOAP Fault Interceptor),但它并没有。 CXF正在接管并且消息正在穿过拦截器,而不是Camel Route。

这是预期的方式,还是我做错了什么?

我的CXF故障拦截器如下所示:

@Component("SOAPFaultInterceptor")
public class SOAPFaultInterceptor extends AbstractPhaseInterceptor {

    public SOAPFaultInterceptor() {
        super(Phase.MARSHAL);
    }

    public void handleMessage(Message message) throws Fault {
     // The message is coming here directly, instead of going to the route defined by onException.
    }
}

有人可以告诉我们如何解决这个问题吗?我不希望在Camel层生成的Exception离开该层而不进行处理..

提前致谢。

1 个答案:

答案 0 :(得分:3)

如果有异常,Camel的onException只有triggeres。 SOAP Fault表示为具有fault flag = true的Message。

您可以做的是在CamelContext上设置handleFault = true,然后它会将SOAP错误消息转换为onException可以响应的异常。