2016-04-20 6 views
1
<int:gateway id="com_java__TestService" service-interface="com.java.svc.TestService"> 
    <int:method name="testOperation" payload-expression="@convertObjectToMap.transformer(#args[0],#args[1])" reply-channel="replyChannel_testOperation" request-channel="requestChannel_testOperation"/> 

    </int:gateway> 

上記のコードでは、2つのパラメータがゲートウェイのtestOpeartionメソッドから来ており、このゲートウェイのリプライチャネルがマップを予期しています。そこで、オブジェクト型のパラメータをマップに変換する必要があります。バネ統合のゲートウェイ上にtranformerクラスを作成しないでマップを作成できますか?

帰りの地図が書いてあります。そして、春の設定XML自体で地図を作成する必要があります。私は変換マップを変換するためのトランスクラスを作成したくありません。

現在、2つのパラメータを必要とするトランスメソッドを持つカスタムのconvertObjectToMap Beanを作成し、マップを返します。

javaトランスを使用してマップを作成することはできますか?

答えて

0

あなたのトランスフォーマーが実際に何をしているのか、どのような引数があるのか​​を説明する必要があります。

それは単に#args[0]なら鍵であり、動作するはず#args[1]は値であり、それは

"T(java.util.Collections).singletonMap(#args[0], #args[1])" 

そしてちょうど1値のマップです。

+0

TransformerはtestOperationメソッドから2つの引数をとり、マップに変換します。引数の型はオブジェクト型です。 私はあなたが提案していたコードをaplliedしてきたが、我々はそれがエラーを下回る org.springframework.expression.spel.SpelEvaluationException与え実行すると:EL1005E:(POS 0):タイプは「java.utils.Collections」が見つかりません –

+0

Sorry - typo - 'java.util.Collections'。 –

0

いくつかのr & dを実行した後、上記の問題の解決策が見つかりました。 見つけてくださいコードは

<int:gateway id="com_java__TestService" service-interface="com.java.svc.TestService"> 
    <int:method name="testOperation" payload-expression="#args[0]" reply-channel="replyChannel_testOperation" request-channel="requestChannel_testOperation"> 
<int:header expression="#args[0]" name="fxlPayload"/> 
     <int:header expression="#args[1]" name="fxlHeader"/> 
    </int:method> 
    </int:gateway> 

下に切り取らはまた、我々はチェーン内の1つのトランスとenricherを追加します。 このチェーンはゲートウェイの後に実行を開始します

<int:transformer expression="new java.util.HashMap()"/> 
    <int:enricher> 
     <int:property expression="headers['fxlPayload']" name="Payload"/> 
     <int:property expression="headers['fxlHeader']" name="Header"/> 
    </int:enricher> 
関連する問題