1


Mule ESB と、着信 SOAP 要求への応答を操作する方法について質問があります。ユースケース シナリオは次のとおりです。
着信 SOAP 要求 --> 要求を受け取り、処理のために非同期フローに送信 --> Mule トランザクションのメッセージ ID を SOAP 応答で発信者に返す --> (元のリクエストは続行されます)
このシナリオでは、SOAP リクエスト処理の結果は呼び出し元には関係ありません。

<flow name="asyncTestFlow1" doc:name="asyncTestFlow1">
    <http:inbound-endpoint exchange-pattern="request-response"
        host="localhost" port="8088" doc:name="HTTP" />
    <logger message="F1: messageID:#[message:id]" level="INFO" />
    <async doc:name="Async">
        <flow-ref name="asyncTestFlow2" doc:name="Flow Reference" />
    </async>

    <!-- ### need to modify the request, add the message ID and send back to the client ### -->
</flow>

<flow name="asyncTestFlow2">
    <cxf:proxy-service payload="body" soapVersion="1.2" doc:name="SOAP" />
    <logger message="after cxf:proxy-service -> #[groovy:payload.getClass()]" level="INFO" />

    <cxf:proxy-client payload="body" enableMuleSoapHeaders="true" soapVersion="1.2" doc:name="SOAP" />

    <http:outbound-endpoint exchange-pattern="request-response"
        address="http://example.net/KnowYourClient/KYCService"
        doc:name="HTTP" />

    <logger message="SOAP response: #[payload:java.lang.String]" level="INFO" />
</flow>

9行目あたりに、リクエスト/レスポンスのペイロードを変更したいところにコメントを追加しました。カスタム メッセージ トランスフォーマーが必要だと考えていますが、どこから始めればよいかわかりません。入力を ContentLengthInputStream (デフォルトの受信) または DepthXMLStreamReader (cxf:proxy-service の呼び出し後) として取得できます。XML 形式の方が操作しやすいと思います。
その XML コンテンツの操作を開始する方法について、正しい方向を教えてもらえますか?

ありがとう、マーカス




--update--動作中の例今
は動作 していると思います..キーは、プライベートフローで受信メッセージを消費できるようにする配列トランスフォーマーの初期オブジェクトでした。

<flow name="asyncTestFlow1" doc:name="asyncTestFlow1">
    <http:inbound-endpoint exchange-pattern="request-response"  host="localhost" port="8088" doc:name="HTTP" />
    <object-to-byte-array-transformer />
    <logger message="F1: messageID:#[message:id]" level="INFO" doc:name="Logger" />
    <async doc:name="Async">
        <flow-ref name="asyncTestFlow2" doc:name="Flow Reference" />
    </async>
    <custom-transformer class="org.mule.examples.hello.SoapResponseTransformer" doc:name="Java" />
</flow>

<flow name="asyncTestFlow2" doc:name="asyncTestFlow2">
    <cxf:proxy-service payload="body" soapVersion="1.2" doc:name="SOAP"/> 
    <cxf:proxy-client payload="body" enableMuleSoapHeaders="true" soapVersion="1.2" doc:name="SOAP"/>
    <http:outbound-endpoint exchange-pattern="request-response"
        address="http://.../Service"
        doc:name="HTTP" />
    <logger message="SOAP response: #[payload:java.lang.String]" level="INFO" doc:name="Logger" />
</flow>
4

1 に答える 1

0

<object-to-string-transformer doc:name="Object to String"/>代わりに使用することもできます<object-to-byte-array-transformer />

于 2015-07-21T04:40:41.787 に答える