1

将 SI 从 v 2.2 升级到 v 3.0.5 后,我收到以下网关的错误。v 3.x 中网关接口的行为是否已更改为不接受消息类型?任何提示将不胜感激为什么会发生这种情况。

org.springframework.expression.spel.SpelEvaluationException: EL1004E:(pos 8): Method call: Method sendStat(my.domain.ReplyStatEvent) can not be found on com.sun.proxy.$Proxy22 type]

void sendStat(@Payload Message<? extends LiveStatEvent> message);

ReplyStatEvent 扩展了 LiveStatEvent 并且使用如下服务激活器定义调用网关:

<int:service-activator ref="liveStatsGateway" method="sendStat" />

将界面更改为以下内容后,它可以正常工作。

void sendStat(@Payload LiveStatEvent message);
4

1 回答 1

0

即使它以前有效,也不意味着它是正确的语法。

如果您的网关的参数标有@Payload,则假定框架将注入 的 arg a payloadMessage但不是整个Message

我们刚刚解决了这种歧义,现在向您展示您的用例不正确。

因此,如果您想使用 just payload,您将能够为 param 指定仅有效负载类型。@Payload没有必要是这种情况。如果您的方法有多个参数并且 Framewrok 无法确定哪一个用于有效负载,则它是必需的。

如果您想处理 whole Message,那么拥有该类型的 arg 就足够了。

无论如何组合@Payload Message<?>是不正确的。因此,您只需要修复那些迁移指南案例。

于 2014-10-23T07:41:26.303 回答