0

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を使用しています

4

1 に答える 1

3

同じクラスにキャストする場合は ClassCastExceptionを参照してください。これはほぼ確実にクラスローダーの問題です。モジュールのクラス パスから spring-social を削除し、xd/lib に追加して、同じクラス ローダーによってロードされるようにしてください。

于 2015-09-13T13:09:46.197 に答える