0

ws へのサービス呼び出しを処理するゲートウェイが与えられます。私の目標は、複数のメソッドを追加し、1 つだけを利用したいので、 http:outbound-gateway's reply-channelusingを提供することです。header-enrichergatewayhttp:outbound-gateway

現在、groovy スクリプト (2) までの応答を受け取ることができますが、サービスを呼び出す実際のメソッドに結果を返したくないようです

どんな助けでも大歓迎です。ありがとう!

<gateway id="registryService" service-interface="RegistryService">
<method name="create" request-channel="create-request-channel"
        reply-channel="create-reply-channel" />
</gateway>

<chain input-channel="create-request-channel" output-channel="create-request-fulfillment-channel">
 <transformer>
   // groovy script that contains the method to be called in the ws (1)
 </transformer>
 <object-to-json-transformer/>
 <header-enricher>
   <reply-channel overwrite="true" ref="create-reply-fulfillment-channel" />
 </header-enricher>
</chain>

<http:outbound-gateway request-channel="create-request-fulfillment-channel"
                       extract-request-payload="true"
                       expected-response-type="java.lang.String"
                       url="http://localhost:4567" http-method="POST" />

<chain input-channel="create-reply-fulfillment-channel"
       output-channel="create-reply-channel">
       <json-to-object-transformer type="JsonRpcResponse"/>
       <transformer>
           //groovy script to manipulate response (2)
       </transformer>
</chain>
4

1 に答える 1

1

以下をせよ:

ゲートウェイの各メソッドは、一意の「ルーティング」ヘッダー値でメッセージを強化する必要があります。

<gateway id="registryService" service-interface="RegistryService">
  <method name="create" request-channel="http-request-channel"
        reply-channel="registryService-create-responseChannel">
    <header name="routingHeader" value="registryService-create" />
  </method>
</gateway>

次に、メッセージを送信ゲートウェイに直接送信します。

<http:outbound-gateway request-channel="http-request-channel"
                       response-channel="http-response-channel"
                       extract-request-payload="true"
                       expected-response-type="java.lang.String"
                       url="http://localhost:4567" http-method="POST" />

HTTP アウトバウンド ゲートウェイは、リクエストをリモート サーバーに送信し、レスポンスを に転送しhttp-response-channelます。このチャネルには、ルーティング ヘッダーの値に基づいて、適切なチャネルにメッセージを送信 (ルーティング) するヘッダー値ルーターが接続されています。

<header-value-router input-channel="http-response-channel" header-name="routingHeader">
  <mapping value="registryService-create" channel="registryService-create-responseChannel" />
  <mapping value="someOtherService-otherMethod" channel="someOtherService-otherMethod-responseChannel" />
</header-value-router>

もちろん、ゲートウェイに直接送り返す必要はありません。これらのコンポーネント間に追加の処理を追加でき、常にヘッダー値に基づいてメッセージをルーティングできます。

groovy でハックするよりも簡単で、私自身も使用しています - 動作することが証明されています ;)

于 2011-08-20T20:25:16.127 に答える