4

我有一个 camel-cxf 网络服务。我用来处理 CXF 的 SOAP 故障拦截器机制中的所有 SOAP 故障。那运作良好。

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

onException(异常。类)。to("direct: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 层生成的异常离开该层而不被处理..

提前致谢。

4

1 回答 1

4

Camel 的 onException 仅在有异常时触发。SOAP 故障表示为带有故障标志 = true 的消息。

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

于 2013-05-10T13:47:51.933 回答