【问题标题】:Camel's CXF component not catching onException(Exception.class)Camel 的 CXF 组件未捕获 onException(Exception.class)
【发布时间】:2013-05-10 11:43:08
【问题描述】:

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

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

onException(Exception.class)。 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 层生成的异常离开该层而不被处理..

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢,克劳斯。我记得现在读过它。我很欣赏你与 Camel 的合作,这让我成为了粉丝,我想 :) 确实很棒.. 谢谢。
    • 嗨克劳斯,这不起作用。我有一个非常复杂的路线 Route1->Route2->Route3(这是引发异常的地方)。我抛出了一个 WebApplicationException 实例,它是一个运行时异常。我设计了全局 onException(Exception.class, MyWSException.class) 和一个本地的。 onCompletion 被触发,即使我设置了 HandleFault(true)。我不明白为什么 onCompletion 应该在明显的 onException 时被触发。请指导。
    • 嗨,我面临一个非常相似的问题。我正在为 CXF Web 服务使用 Apache Camel 2.12.2 API。我已经设置了camelContext 的handleFault=true,我在我的Web 服务路由的.to() 调用周围有.doTry() 和.doCatch(),但是我无法在我的Web 服务的路由配置中自己处理SOAPFaults。我也尝试过 .errorHandler(deadLetterChannel("wmq:SOME_QUEUE")) 但仍然只有 PhaseInterceptorChain 似乎在处理错误。这种机制是否真的按预期工作?是否有任何示例显示此 handleFault=true 机制在起作用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    相关资源
    最近更新 更多