2017-04-14 5 views
1

としてメッセージを受け付けません。 ExpressionEvaluatingRequestHandlerAdviceの成功チャンネルはAdviceMessageです。 Javaの7バージョンでは、と罰金働いていた:変圧器は、私はちょうど私達は、Java 7から8に我々のプロジェクトのために使用されてきた、と私は奇妙な問題に直面していたJava DSLの移行を開始しまし入力

.transform(new GenericTransformer<AdviceMessage, Message<?>>() { 
    @Override 
    public Message<?> transform(AdviceMessage source) { 
     return source.getInputMessage(); 
    } 
}) 

しかし、私は、Java 8に変換する場合:

.<AdviceMessage, Message<?>>transform(advice -> advice.getInputMessage()) 

それは私に例外与える:

org.springframeworkを.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice $ MessageHandlingExpressionEvaluatingAdviceException: ハンドラが失敗しました。入れ子になった例外は です。org.springframework.integration.transformer.MessageTransformationException: メッセージの変換に失敗しました。 ネストされた例外はorg.springframework.messaging.MessageHandlingExceptionです:ネスト 例外java.lang.ClassCastExceptionがある:java.lang.Booleanのはorg.springframework.integration.message.AdviceMessageに キャストをすることはできません

ブールました私が与えた成功表現の結果、このメソッドはペイロードを期待しており、メッセージ全体を保持することはできません。

私がフローの他の部分を変更しようとすると、メッセージのペイロードの代わりにMessage<?>を期待している一般的な引数を置こうとしたところでエラーが一貫してポップアップを開始しました。

私が間違っていたJava 8の構文のいずれかをやっている場合、私は理解できない、またはJava 7のバージョンが完璧に働いているので、誤差は、完全に他の何かが原因です。

私は一般的なメッセージへのキャストの代わりに、ペイロードがあったウェブ上の任意のJava DSLの例を見つけることができませんでしたので、動作するようになっていますならば私も知りません。

ありがとうございました。

答えて

0

遺伝学的消失の問題。そのメッセージはObjectになるので、メッセージから​​だけを抽出しない限り、選択肢はありません。これは、最も一般的な使用事例であるためです。あなたが最初の引数としてAdviceMesaage.classで過負荷.transform()バージョンを使用する必要があり、あなたの懸念を解決するために

。我々が予期される型を知っているし、適切な引数を呼び出してメソッドの呼び出しを行うことができる方法

関連する問題