java - 升级 Spring Integration 版本后出现类转换异常

标签 java spring spring-integration

我有一个 Spring 集成应用程序,它从 AS400 DB 轮询数据并选择它,然后经过一些修改将其传输到 MQ。
它运行良好,直到我决定升级 Spring Integration 版本。
从版本 - spring-integration-core-2.2.3.RELEASE 升级到 spring-integration-core-3.0.1.RELEASE 后,我收到以下错误。

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [tcm-hosttrade-inbound-adapter.xml]; nested exception is java.lang.ClassCastException: org.springframework.beans.factory.config.RuntimeBeanReference cannot be cast to org.springframework.beans.factory.config.BeanDefinition
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:250)
    ... 21 more
Caused by: java.lang.ClassCastException: org.springframework.beans.factory.config.RuntimeBeanReference cannot be cast to org.springframework.beans.factory.config.BeanDefinition
    at org.springframework.integration.config.xml.AbstractPollingInboundChannelAdapterParser.doParse(AbstractPollingInboundChannelAdapterParser.java:50)
    at org.springframework.integration.config.xml.AbstractChannelAdapterParser.parseInternal(AbstractChannelAdapterParser.java:66)
    at org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:59)
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:73)
    at org.springframework.integration.config.xml.AbstractIntegrationNamespaceHandler.parse(AbstractIntegrationNamespaceHandler.java:94)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1438)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:195)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
    ... 26 more

我检查了类的代码 - org.springframework.integration.config.xml.AbstractPollingInboundChannelAdapterParser 我刚刚发现这 3 行代码与早期版本不同 -

String channelAdapterId = this.resolveId(element, adapterBuilder.getRawBeanDefinition(), parserContext);
        String sourceBeanName = channelAdapterId + ".source";
        parserContext.getRegistry().registerBeanDefinition(sourceBeanName, (BeanDefinition) source);

所以错误是因为这一行 - parserContext.getRegistry().registerBeanDefinition(sourceBeanName, (BeanDefinition) source);

如何使这段代码正常工作?以下是我的 bean ,可供引用 -
入站 channel Bean -

  <inbound-channel-adapter id="inboundAdapter" 
            ref="readFromMessageStore"
            channel="inboundChannel" auto-startup="false" />

最佳答案

是的,3.0.1版本有问题。在 3.0.2 版本中已解决。您可以查看此链接了解详细信息:https://jira.spring.io/browse/INT-3300 .

页面链接的小摘要:


Summary Class cast exception using DefaultInboundChannelAdapterParser 
Regression: Class cast exception using DefaultInboundChannelAdapterParser Fix Version/s 3.0.2 [ 14362 ] Fix Version/s 4.0 M4 [ 14361 ] Affects Version/s 3.0.1 [ 14309 ]

关于java - 升级 Spring Integration 版本后出现类转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30799349/

相关文章:

java - Spring Integration - 公开重载方法的消息传递网关

Java Spring : JDBC Connection getting closed

java - 如何在使用 Stream API 通过函数更改字符串变量时跟踪它?

java - Spring方法替换final方法

java - 上下文初始化失败 - Alfresco

java - Java 中的一些方法或现有设计模式可防止因参数检查而出现大量 if/else 条件

java - Java类是对象吗?

java - Dagger 2 在 Application 类中构建组件的良好实践

java - Spring 集成: gateway bean not found

java - Spring 集成 : Persistent and transactional QueueChannel