我在使用 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&showCaughtException=true&showStackTrace=true&showBody=true&showProperties=true&showHeaders=true&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