1

我在使用 Fuse ESB 7.1.0 时遇到了一个非常奇怪的问题:当一个 cxf 端点产生故障时,这个故障看起来不像异常,所以我无法使用 doCatch 构造来处理它。cxf 端点定义如下:

<cxf:cxfEndpoint id="cxf-ep" address="${ws.url}" serviceClass="MyServiceClass">
    <cxf:properties>
        <entry key="dataFormat" value="POJO" />
    </cxf:properties>
</cxf:cxfEndpoint>

这是一个简短的代码片段,我预计会出现异常:

<doTry>
    <to uri="cxf:bean:cxf-ep" />
    <doCatch>
        <exception>org.apache.cxf.interceptor.Fault</exception>
        <handled>
            <constant>true</constant>
        </handled>
        <to uri="log:exceptions?multiline=true&amp;showCaughtException=true&amp;showStackTrace=true&amp;showBody=true&amp;showProperties=true&amp;showHeaders=true&amp;level=ERROR" />
    </doCatch>
</doTry>

我尝试将 handleFault="true" 属性添加到骆驼上下文和路线,但没有成功。具有相似参数和路由的包在 Fuse ESB/ServiceMix 4.4.1 上按预期工作,所以它看起来像回归,或者在新版本中骆驼发生了一些变化?

另一个有趣的时刻是,当一个 web 服务器不可用时,camel 会产生 org.apache.cxf.interceptor.Fault,所以不能作为异常处理!

骆驼版:2.10.0.fuse-71-047

4

0 回答 0