我有一个camel-cxf webservice。我用来处理CXF的SOAP故障拦截器机制中的所有SOAP故障。
我认为最好在同一层处理骆驼层抛出的异常,并编写了一个简单的onException场景,如下所述:
onException (Exception.class)。("直接:MyWSExceptionHandler");
每当一个自定义异常被抛出时,我期望onException会启动(记住我也有一个SOAP故障拦截器),但它没有。CXF正在接管,消息将通过拦截器,而不是骆驼路由。
这是预期的方式,还是我做错了什么?
我的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在没有处理的情况下离开该层。
Camel的onException只在出现异常时触发。SOAP错误表示为带有错误标志= true的消息。
您可以做的是在CamelContext上设置handleFault=true,然后它将SOAP错误消息转换为onException可以响应的异常。