0

私はmule3.2.0を使用しており、java-classでmuleclient.sendメソッドを呼び出しています。このメソッドは、soap-requestをmuleフロー(ここには存在しません)に送信します。このメソッドは、要求を受信するhttpエンドポイントに送信し、ログに記録します。私のdbはプ​​ロキシパターンを使用して、Dispatcherトランスフォーマーを持つ「ServiceFlow」に伝播します。Javaクラスは、MuleClient.send(String url、Objectpayload、MapmessageProperties)メソッドの呼び出しを使用してペイロード配列の1つのオブジェクトをエンドポイントにディスパッチします。次に、cxf:jax-ws-clientによって処理され、もう一度dbに記録され、Dispatcherの別のインスタンスに転送されます(着信ペイロードは再びObject []タイプです)。そこに、サービス呼び出しを行うhttpエンドポイントがあります。この部分は問題なく動作します。しかし、応答の受信時に問題が発生します。Test1(2,3、4)フロー内の呼び出しチェーンを出力するトランスフォーマー(System.out.println()を実行するだけです)、奇妙なシーケンスで呼び出されることを確認しました:1,3、次にTestTransformer(これもsysouter)次に、メインフロー「サービスフロー」の呼び出し元でエラー「NullPayload」が発生し、テスト4とテスト2の出力を受け取ります。「ServiceProxy」のように、パターン「1Proxy」のresponseTransformer-refは無視されます。私は今一週間ほど解決策を探していましたが、それを見つけることができません。デバッグでは、の「TestTransformer」というトランスフォーマーが期待されるペイロード(Object [])を持っていることがわかりますが、クラスの呼び出し元でそれを受け取ると、「NullPayload」として表示されます。エンドポイントの1つにrefではなくpath要素があることがわかります。これがフローに影響を与えるかどうかはわかりませんが、チェックします。また、「応答」ブロックを使用して、フローが期待どおりに実行されるようにしました。任意の提案をいただければ幸いです。ありがとう

これが私の設定のようです:

<http:endpoint  name="httpService"  address="${service.soap}" exchange-pattern="request-response" responseTimeout="${timeout}" />
<vm:endpoint  name="vmService"  path="vmService" exchange-pattern="request-response"/>

<pattern:web-service-proxy 
    name="ServiceProxy" 
    inboundEndpoint-ref="httpService" 
    transformer-refs="to-string logging" 
    responseTransformer-refs="to-string logging"
    outboundEndpoint-ref="vmService" />

<flow name="ServiceFlow" >
    <inbound-endpoint ref="vmService"/>
    <cxf:jaxws-service serviceClass="pkg.ServiceImpl" wsdlLocation="${service.wsdl}" enableMuleSoapHeaders="false" validationEnabled="true"/>
  <custom-transformer class="pkg.Dispatcher">
     <spring:property name="vmFlowPath" value="vm.logService"/>
  </custom-transformer>
  <custom-transformer name="TestTransformer" class="pkg.TestTransformer"/>
</flow>

<vm:endpoint  name="vm1In"  path="vm1In" exchange-pattern="request-response"/>
<vm:endpoint  name="vm1Out"  path="vm1Out" exchange-pattern="request-response"/>

<custom-transformer name="arrayGenerator" class="pkg.ArrayGenerator"/>
<custom-transformer name="objectExtractor" class="pkg.ObjectExtractor"/>
<custom-transformer name="faultChecker" class="pkg.FaultChecker"/>  
<custom-transformer name="objectLogging" class="pkg.ObjectLogger">

<pattern:web-service-proxy 
    name="1Proxy" 
    inboundEndpoint-ref="vm1In" 
    transformer-refs="arrayGenerator objectLogging" 
    responseTransformer-refs="objectLogging objectExtractor faultChecker"
    outboundEndpoint-ref="vm1Out" />

<flow name="logService">

<vm:inbound-endpoint path="vm.logService exchange-pattern="request-response"/>

<custom-transformer class="Test1"/>

<vm:outbound-endpoint ref="vm1In">
    <cxf:jaxws-client 
        serviceClass="pkg.ServiceImpl" 
        operation="import"
        enableMuleSoapHeaders="false"/>
    <object-to-string-transformer/>

</vm:outbound-endpoint>
<object-to-xml-transformer> 

<xm:xml-to-object-transformer returnClass="pkg.WSResponseClass"/>

<custom-transformer class="Test2"/>
</flow>

<flow name="DispatcherToServiceFlow">
    <custom-transformer class="Test3"/>
    <vm:inbound-endpoint path="vm1.Out"/>

    <custom-transformer class="pkg.Dispatcher">
        <spring:property name="vmFlowPath" value="vm.import"/>
    </custom-transformer>

</flow> 

<flow name="import">
    <vm:inbound-endpoint path="vm.import" exchange-pattern="request-response"/>

    <http:outbound-endpoint address="${importService}" responseTimeout="${timeout}" exchange-pattern="request-response" />

    <object-to-string-transformer/>
<custom-transformer class="Test4"/>
</flow>
4

1 に答える 1

1

さて、私の問題は、実際には、次のような「ref」要素を持つ既存のvmエンドポイントを参照するのではなく、「path」要素でした。

<inbound-endpoint ref="vm1Out"/>
于 2012-12-15T07:52:05.850 に答える