0

Web サービスからデータを取得するためにキャメルと cxf コンポーネントを使用しています。場合によっては、Web サービスが標準の soap:fault を返します。次のステップがあります。

<camel:route id="someId">
    <camel:onException useOriginalMessage="false">
            <camel:exception>java.lang.Exception</camel:exception>
            <camel:handled>
                <camel:constant>false</camel:constant>
            </camel:handled>
            <camel:process ref="defaultNaoIntegrationErrorHandler" />
            <camel:to uri="ref:naointegration.checkAvailability.jms.error.queue" />
    </camel:onException>
    <camel:from uri="direct:naoCheckAvailabilityOut" />
    <camel:marshal ref="soapjaxbSAP" />
    <camel:to id="naoCheckAvailabilityEndpoint" uri="cxf:bean:naoCheckAvailabilityEndpoint" />
    <camel:unmarshal ref="soapjaxbSAP" />
</camel:route>

ここで、naoCheckAvailabilityEndpoint は次のとおりです。

<cxf:cxfEndpoint id="naoCheckAvailabilityEndpoint"
        address="${naointegration.I011.CheckAvailability.soap.address}"
        endpointName="s:checkAvailabilityEndpoint" serviceName="s:SOAPService"
        xmlns:s="http://www.example.com/test">
        <cxf:properties>
            <entry key="dataFormat" value="MESSAGE" />
            <entry key="setDefaultBus" value="true" />
        </cxf:properties>
        <cxf:outInterceptors>
            <ref bean="logOutbound" />
        </cxf:outInterceptors>

        <cxf:inFaultInterceptors>
            <ref bean="logOutbound" />
        </cxf:inFaultInterceptors>
    </cxf:cxfEndpoint>

通常の SOAP メッセージが表示される場合は、すべて問題ありません。そして、soap foalt/http 500 を取得しているときは、soap 障害のある SOAP メッセージ (xml) を含む文字列メッセージしかありません。

同様の問題でcxfとcamelのメールリストを読んでいると、cxfエンドポイントがorg.apache.cxf.binding.soap.SoapFaultタイプの例外であるsoap foaltがある場合に例外をスローする必要があることを理解しましたが、取得できません。目標は、onException 句で SOAP エラー例外の処理を行うことです。

助言がありますか?

4

1 に答える 1

2

MESSAGE データ形式を使用しています。つまり、camel-cxf エンドポイントはトランスポートからストリームを渡すだけで、下層のメッセージを読み取らないため、camel-cxf エンドポイントはどのメッセージが通常の SOAP メッセージか SOAP 障害メッセージかを判断できません。 .

camel ルートに SOAP 障害を処理させたい場合は、PAYLOAD または POJO データ形式を使用する必要があります。

于 2013-08-18T13:25:01.413 に答える