【问题标题】:Gateway interface breaking after upgrading from SI v 2.2 to v 3.0.5从 SI v 2.2 升级到 v 3.0.5 后网关接口中断
【发布时间】:2014-12-18 18:45:32
【问题描述】:

将 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);

【问题讨论】:

    标签: spring-integration spelevaluationexception


    【解决方案1】:

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

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

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

    因此,如果您只想使用payload,您可以只为参数指定有效负载类型。 在这种情况下,@Payload 不是必需的。如果您的方法有多个 args 并且 Framewrok 无法确定哪一个用于有效负载,则它是必需的。

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

    无论如何,@Payload Message&lt;?&gt; 的组合是不正确的。因此,您只需要修复那些 Migration Guide 案例。

    【讨论】:

    • 谢谢阿特姆。现在你这么说似乎很明显。我不知道为什么它被注释为@Payload。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2016-05-11
    • 2019-05-28
    • 2016-03-22
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    相关资源
    最近更新 更多