2016-11-03 4 views
1

ちょっと、@MessagingGatewayに複数のメソッドの既定のヘッダーを設定しようとしています。これらのメソッドはすべて同じメソッドチャネルに入っているので、メソッド名を使ってメッセージがどこから来たのかを判断しようとしています。デフォルトのヘッダーにメソッド名を割り当てるために、私は私が中に見つけたものにつきとしてのspel式#methodNameを使用しています:@MessageGatewayに設定されている既定のヘッダーがメッセージに表示されない

https://github.com/spring-projects/spring-integration/pull/929

ここゲートウェイです:

@MessagingGateway(defaultHeaders={@GatewayHeader(name="statusMethod", expression="#methodName")}) 
public interface LoggingGateway { 

    @Gateway(requestChannel="logStatusChannel") 
    public void logTokenStatus(@Header("pairInfo") PairInfo info, @Payload String status); 

    @Gateway(requestChannel="logStatusChannel") 
    public void logDataMessageStatus(@Header("pairInfo") PairInfo info, @Payload String status); 

} 

しかし、ダウンフロー、さらにヘッダーにアクセスしようとすると、エラーが表示され、デフォルトのヘッダーが見つからないことがわかります。

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 18): Property or field 'statusMethod' cannot be found on object of type 'org.springframework.messaging.MessageHeaders' - maybe not public? 

私はさらに、デフォルトのヘッダーを削除し、それぞれのメソッドにヘッダーを追加しようとしました。それでも助けにならなかった。代わりに#methodStringを使ってみましたが、どちらも見つかりませんでした。

私が使用しているJava Beanがリンクのxml設定で見たものの正確な翻訳であれば、Dunnoはダンノーです。

ヘルプを評価してください。

答えて

1

実際、あなたは間違ったソースを読んでいます。 公式Documentationに見てみましょう:

<header/>要素は、値の代わりとして表現をサポートしています。 SpEL式はヘッダーの値を決定するために評価されます。そこには#rootオブジェクトはありませんが、以下の変数を使用することができます。

#args - []メソッドの引数

#gatewayMethodを含むオブジェクト - 呼び出されたサービス・インタフェースのメソッドを表すjava.reflect.Methodオブジェクト。この変数を含むヘッダーは、たとえばルーティングのためにフローの後半で使用できます。たとえば、単純なメソッド名をルーティングする場合は、式#gatewayMethod.nameのヘッダーを追加することができます。

このPRの記述は現実を反映していません。

artembilanメソッドの周りそんなに変数を持ってする理由がないように2013年10月23日にバネ部材

が見える:ターゲットに#gatewayMethodソリューションを率いて、このようなdiscussionは、あります。最後のものがあれば十分です。 「 表現= "#1 method.name" 表現= "#1 method.toString()" 2013年10月23日スプリング部材

真の

garyrussellを、その後私はドン:その他のSpeIを介して抽出することができますmethodObjectと似ていますが、メソッドを単純な名前として保持する必要があります(マイグレーションガイドでそれを文書化できますが、私はむしろ痛みを最小限に抑えるでしょう)。

多分serviceMethod?10月23日に

artembilan、2013年春のメンバー2013年10月23日スプリング部材

その後gatewayMethod

garyrussell:1:ところで

。 SpEL #methodNamenullを返すため、カスタムのグローバルstatusMethodヘッダーはありません。したがって、そのようなヘッダーにはデータが入力されません。

+0

'#gatewayMethod.name'はトリックに感謝しました:-) – alokraop

関連する問題