我有一个自定义Spring XD源模块,它使用Spring Social for Twitter并输出Tweet对象。这工作得很好。我可以记录源的输出并查看列出的Tweet对象。我可以将该流的源的输出类型更改为application / json以查看JSON的输出。这可以按预期工作。
然后我创建了一个处理器模块,它将从该Tweet创建一个新对象并输出它。转换消息需要一个包含Tweet对象的GenericMessage作为其有效负载(我也试过让方法参数只是Tweet,但这也没有用)。
@Transformer
public OtherThing<Tweet> transform(GenericMessage<Tweet> message) {
// ... snip ...
}
然而,当我将两个模块链接在一起时
stream create --name test --definition 'my-tweet-source-module | my-tweet-processor | log' --deploy
从源模块输出一个Tweet,我得到一个类转换异常:
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 XD 1.2.1.RELEASE