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で期待どおりに機能したため、新しいリリースのラクダでリグレッションまたは何かが変更されたように見えますか?
もう1つの興味深い瞬間は、Webサーバーが利用できない場合、ラクダがorg.apache.cxf.interceptor.Faultを生成するため、例外として処理できないことです。
キャメルバージョン:2.10.0.fuse-71-047