Spring Social for Twitter を使用し、Tweet オブジェクトを出力するカスタム Spring XD ソース モジュールがあります。これはうまく機能しています。ソースの出力をログに記録し、リストされた Tweet オブジェクトを確認できます。そのストリームのソースの出力タイプを application/json に変更して、JSON で出力を確認できます。これは期待どおりに機能します。
次に、そのツイートから新しいオブジェクトを作成して出力するプロセッサ モジュールを作成しました。変換メッセージは、ペイロードとして Tweet オブジェクトを含む GenericMessage を想定しています (メソッド引数を単に Tweet にすることも試みましたが、これもうまくいきませんでした)。
@Transformer
public OtherThing<Tweet> transform(GenericMessage<Tweet> message) {
// ... snip ...
}
ただし、2つのモジュールをリンクすると
stream create --name test --definition 'my-tweet-source-module | my-tweet-processor | log' --deploy
ソースモジュールからツイートが出力され、クラスキャスト例外が発生します。
java.lang.ClassCastException: org.springframework.social.twitter.api.Tweet cannot be cast to org.springframework.social.twitter.api.Tweet
両方のモジュールが同じバージョンの Spring Social Twitter を使用していることを確認したので、問題はないはずです。現在、モジュールはローカル トランスポートを介して通信しているため、これはクラス ローディングの問題でもありません (最終的には非ローカル トランスポートを介して通信する必要があります)。
ソースモジュールの出力タイプをストリームで定義しapplication/json
、入力文字列ペイロードから JSON を読み取ろうとするなどの回避策も試しましたが、Spring Social Tweet オブジェクトの性質上、Jackson は準拠していません。 .
なぜこれが起こっているのか、どうすれば解決できるのか疑問に思っています。間違いなく悪いことをしている気がします。これを行うことが許可されていない場合は、その理由と適切な対応を知りたいです。
どんな助けでも大歓迎です。
ありがとうございました
編集:Spring XD 1.2.1.RELEASEを使用しています