Spring 迁移到 spring 后出现集成错误 5
Spring integration errors after migration to spring 5
我使用 Spring 与 Spring 4 的集成(不同类型的频道)已有一段时间了。在我尝试将我的环境升级到 Spring 5 后,他们停止工作并出现如下错误:
org.springframework.messaging.MessageHandlingException:处理'MethodInvokingMessageProcessor'中的消息时出错[org.springframework.integration.handler.MethodInvokingMessageProcessor@c192373];嵌套异常是 java.lang.IllegalArgumentException:BeanFactory 不能为 null,failedMessage=GenericMessage
示例频道creation/registration如下:
deltaupdatedchannel = new DirectChannel();
deltaupdatedchannel.setBeanName("deltaupdatedcontroller");
serviceActivator = new ServiceActivatingHandler(deltaSummaryController, "updateDelta2");
handlerlist.add(serviceActivator);
beanFactory.registerSingleton("deltaupdatedcontroller", deltaupdatedchannel);
beanFactory.initializeBean(deltaupdatedchannel, "deltaupdatedcontroller");
deltaupdatedchannel.subscribe(serviceActivator);
通道用于进行以下调用:
this.deltaupdatedcontrollerchannel.send(MessageBuilder.withPayload(summarydto).build());
频道调用以下代码:
public void updateDelta2(DeltaSummaryDTO dto) {
this.messagingTemplate.convertAndSend(
"/topic/updatedelta", dto);
}
这里的messagingTemplate是org.springframework.messaging.core.MessageSendingOperations.
我怎样才能让它们重新工作?
请与我们分享这样做的原因 registerSingleton()
。为什么仅简单的 bean 注册对您来说还不够?
要解决该问题,您还需要在 registerSingleton()
之后调用 initializeBean(Object existingBean, String beanName)
。
但是,不能保证错误就此结束。我建议修改设计以支持普通的 bean 定义,而不是手动定义的...
我使用 Spring 与 Spring 4 的集成(不同类型的频道)已有一段时间了。在我尝试将我的环境升级到 Spring 5 后,他们停止工作并出现如下错误:
org.springframework.messaging.MessageHandlingException:处理'MethodInvokingMessageProcessor'中的消息时出错[org.springframework.integration.handler.MethodInvokingMessageProcessor@c192373];嵌套异常是 java.lang.IllegalArgumentException:BeanFactory 不能为 null,failedMessage=GenericMessage
示例频道creation/registration如下:
deltaupdatedchannel = new DirectChannel(); deltaupdatedchannel.setBeanName("deltaupdatedcontroller");
serviceActivator = new ServiceActivatingHandler(deltaSummaryController, "updateDelta2");
handlerlist.add(serviceActivator);
beanFactory.registerSingleton("deltaupdatedcontroller", deltaupdatedchannel);
beanFactory.initializeBean(deltaupdatedchannel, "deltaupdatedcontroller");
deltaupdatedchannel.subscribe(serviceActivator);
通道用于进行以下调用: this.deltaupdatedcontrollerchannel.send(MessageBuilder.withPayload(summarydto).build());
频道调用以下代码:
public void updateDelta2(DeltaSummaryDTO dto) {
this.messagingTemplate.convertAndSend(
"/topic/updatedelta", dto);
}
这里的messagingTemplate是org.springframework.messaging.core.MessageSendingOperations.
我怎样才能让它们重新工作?
请与我们分享这样做的原因 registerSingleton()
。为什么仅简单的 bean 注册对您来说还不够?
要解决该问题,您还需要在 registerSingleton()
之后调用 initializeBean(Object existingBean, String beanName)
。
但是,不能保证错误就此结束。我建议修改设计以支持普通的 bean 定义,而不是手动定义的...