我有一个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离开该层而不进行处理..
提前致谢。
答案 0 :(得分:3)
如果有异常,Camel的onException只有triggeres。 SOAP Fault表示为具有fault flag = true的Message。
您可以做的是在CamelContext上设置handleFault = true,然后它会将SOAP错误消息转换为onException可以响应的异常。