我有一个简单的Spring Integration 2.0.1聚合器设置,使用SimpleMessageStore和定义的Spring MessageGroupStoreReaper定义,以便能够实现分组超时机制(在Spring中它只是作为聚合器'timeout'参数工作整合1.0.4)。
我已经调试并验证了消息是在SimpleMessageStore中基于groupId正确聚合的,但是在超时时MessageGroupStoreReaper失败,“无法通过getter访问属性'消息'”AccessException。精确错误位于MessagingMethodInvokerHelper class内,它声明消息字段不为空。似乎在某种程度上聚合的消息在执行Invoker期间不可用,导致消息的“”无效方法参数:期望单个有效负载。“IllegalStateException。
这个问题可能是什么原因以及如何解决?
我已经尝试过更新到2.0.6,但问题仍然存在。
*** EDIT 我将我的SI依赖关系更新为2.2.5,但这并没有解决我的问题。我使用的是Spring 3.0.7。
答案 0 :(得分:1)
只有一个解决方案可以修复它只是为了升级到最新版本的Spring Integration - 2.2.6。 2.0现在不再支持了。遗憾
答案 1 :(得分:0)
我解决了这个问题,似乎以前的设置适用于SI 1.0.4需要修改服务激活器端 - 输出通道需要List<Message<?>>
,而实际的聚合类型是Message<List<Message<?>>>
。修改激活器的方法签名以匹配后一种类型后,SI能够正确匹配签名候选。这可能也可以通过修改聚合器添加方法来修复,以对特定的Message而不是List进行操作,而不对激活器进行任何修改。