SpringXD:流中模块之间相同 class 的 ClassCastException
SpringXD: ClassCastException of same class between modules in a stream
我有一个自定义 Spring XD 源模块,它使用 Spring Social for Twitter 并输出 Tweet 对象。这工作得很好。我可以记录源的输出并查看列出的推文对象。我可以将该流的源输出类型更改为 application/json,以查看 JSON 处的输出。这按预期工作。
然后我创建了一个处理器模块,它将根据该推文创建一个新对象并将其输出。转换消息需要一个包含 Tweet 对象的 GenericMessage 作为其有效负载(我也尝试过让方法参数只是 Tweet,但这也没有用)。
@Transformer
public OtherThing<Tweet> transform(GenericMessage<Tweet> message) {
// ... snip ...
}
但是,当我link两个模块在一起时
stream create --name test --definition 'my-tweet-source-module | my-tweet-processor | log' --deploy
并且源模块输出了一条推文,我得到一个 class 转换异常:
java.lang.ClassCastException: org.springframework.social.twitter.api.Tweet cannot be cast to org.springframework.social.twitter.api.Tweet
我已经确认这两个模块使用的是相同版本的 Spring Social Twitter,所以应该没有问题。目前,模块正在通过本地传输进行通信,因此这也不应该是任何 class 加载问题(它们最终将需要通过非本地传输进行通信)。
我也尝试过变通方法,例如在流中定义源模块的输出类型应为 application/json
,然后尝试从输入字符串有效负载中读取 JSON,但是由于 Spring 社交推文对象的性质,Jackson 不遵守。
我想知道为什么会这样,我应该如何解决这个问题?我觉得我无疑做错了什么。如果不允许我这样做,我想知道为什么会这样以及应该做什么。
如有任何帮助,我们将不胜感激。
谢谢
编辑:我正在使用 Spring XD 1.2。1.RELEASE
参见 ClassCastException when casting to the same class。这几乎可以肯定是 class 加载程序问题。尝试从模块的 class 路径中删除 spring-social 并将其添加到 xd/lib 以便它由相同的 class 加载程序加载。
我有一个自定义 Spring XD 源模块,它使用 Spring Social for Twitter 并输出 Tweet 对象。这工作得很好。我可以记录源的输出并查看列出的推文对象。我可以将该流的源输出类型更改为 application/json,以查看 JSON 处的输出。这按预期工作。
然后我创建了一个处理器模块,它将根据该推文创建一个新对象并将其输出。转换消息需要一个包含 Tweet 对象的 GenericMessage 作为其有效负载(我也尝试过让方法参数只是 Tweet,但这也没有用)。
@Transformer
public OtherThing<Tweet> transform(GenericMessage<Tweet> message) {
// ... snip ...
}
但是,当我link两个模块在一起时
stream create --name test --definition 'my-tweet-source-module | my-tweet-processor | log' --deploy
并且源模块输出了一条推文,我得到一个 class 转换异常:
java.lang.ClassCastException: org.springframework.social.twitter.api.Tweet cannot be cast to org.springframework.social.twitter.api.Tweet
我已经确认这两个模块使用的是相同版本的 Spring Social Twitter,所以应该没有问题。目前,模块正在通过本地传输进行通信,因此这也不应该是任何 class 加载问题(它们最终将需要通过非本地传输进行通信)。
我也尝试过变通方法,例如在流中定义源模块的输出类型应为 application/json
,然后尝试从输入字符串有效负载中读取 JSON,但是由于 Spring 社交推文对象的性质,Jackson 不遵守。
我想知道为什么会这样,我应该如何解决这个问题?我觉得我无疑做错了什么。如果不允许我这样做,我想知道为什么会这样以及应该做什么。
如有任何帮助,我们将不胜感激。
谢谢
编辑:我正在使用 Spring XD 1.2。1.RELEASE
参见 ClassCastException when casting to the same class。这几乎可以肯定是 class 加载程序问题。尝试从模块的 class 路径中删除 spring-social 并将其添加到 xd/lib 以便它由相同的 class 加载程序加载。