0

私はラバに比較的慣れておらず、SOAPベースのWebサービスを介してリクエストXMLを受け取るラバフローを定義しようとしています。XMLは複雑なスキーマに基づいており、WSDL2Javaを使用してクラスを生成しました

リクエストを受信した後、cxf:jaxws-serviceはメソッドsubmitOrder(SubmitOrderRequestparameters)を実行します。このメソッドの実行後、リクエストXMLを少し異なる形式に変換したいと思います。次に、このXMLを別のWebサービスに転送する必要があります。問題は、ServiceImplから出力されるラバメッセージにSubmitOrderResponseが含まれているのに、SubmitOrderRequestで作業したいということです。

<flow name="testService">
    <http:inbound-endpoint address="http://localhost:62005/test"
        exchange-pattern="request-response">
        <cxf:jaxws-service serviceClass="com.test.ServicePortType" />
    </http:inbound-endpoint>
    <component class="com.test.ServiceImpl" />
    <!--  transformer ref="MVIRequestTransformer" / -->
    <!--  xm:object-to-xml-transformer / -->
    <!-- logger message="XML payload is #[payload]" level="INFO" / -->
    <!-- SEND TRASNFORMED MESSAGE TO ANOTHER SERVICE -->
</flow>


@WebService(endpointInterface = "com.pennmutual.services.mvi.MVIServicePort")
public class ServiceImpl implements ServicePortType {
    ...
    @Override
    public SubmitOrderResponse submitOrder(SubmitOrderRequest parameters) {
    ...
    }
...
}

私の選択肢は何ですか。次のように考えることができます– 1.リクエストオブジェクトをコンテキストのどこかに置き、後で処理のために取得します。2. submitOrderの戻りタイプをObjectに変更し、SubmitOrderResponseの代わりにSubmitOrderRequestを返します。

この状況に対処するための最善の方法を提案してください。私はラバ3.2を使用しています。

4

1 に答える 1

0

これを行うには2つのエレガントな方法があると思います(Webサービスインターフェイスの変更を伴う方法を除く)

リクエストをセッション変数に保存し、後で復元します。フローは次のようになります。

<flow name="testService">
<http:inbound-endpoint address="http://localhost:62005/test" exchange-pattern="request-response">
<cxf:jaxws-service serviceClass="com.test.ServicePortType" />
</http:inbound-endpoint>
<message-properties-transformer scope="session">
<add-message-property value="payload" key="originalPayload" />
</message-properties-transformer>
<component class="com.test.ServiceImpl" />
</flow>

コンポーネントの周囲のエンリッチャーを使用して、戻り値を変数に格納し、フローのペイロードにならないようにします。これを達成する方法の例に従って

<flow name="Echo" doc:name="Echo">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="6090" path="echo" encoding="UTF-8" />
<cxf:jaxws-service serviceClass="org.mule.example.echo.Echo" />
<enricher target="#[variable:echo]">
<component class="org.mule.example.echo.Echo" />
</enricher>
<logger level="ERROR" message="#[variable:echo]"/>
</flow>

エンリッチャーの詳細については、こちらをご覧ください。

于 2012-07-01T09:40:25.457 に答える