Java 升级Spring集成版本后获取类强制转换异常

Java 升级Spring集成版本后获取类强制转换异常,java,spring,spring-integration,Java,Spring,Spring Integration,我有一个Spring集成应用程序,它轮询来自AS400 DB的数据,然后在一些修改后将其传输到MQ。 在我决定升级Spring集成版之前,它一直运行良好。 从版本-spring-integration-core-2.2.3.RELEASE升级到spring-integration-core-3.0.1.RELEASE Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exce

我有一个Spring集成应用程序,它轮询来自AS400 DB的数据,然后在一些修改后将其传输到MQ。
在我决定升级Spring集成版之前,它一直运行良好。
从版本-
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.AbstractPollingBoundChannelAdapterParser
我发现这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,可供参考-
入站通道Bean-

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

是,
3.0.1
版本有问题。它在
3.0.2
版本中解决。您可以查看此链接以了解详细信息:

页面链接中的小摘要:

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 ] 使用DefaultInboundChannelAdapterParser的摘要类强制转换异常
回归:使用DefaultInboundChannelAdapterParser的类强制转换异常 修复版本/s 3.0.2[14362] 修复版本/s 4.0 M4[14361] 影响版本/s 3.0.1[14309]
升级到新版本时,一般建议使用该行的最新版本;我很好奇为什么您选择了
3.0.1
,而该行的最新版本是
3.0.7
。当前版本为
4.1.5
;有关完整的版本信息,请参阅。通常,point发行版(3.0.2、3.0.3等)只包含bug修复。另外,请注意。

非常感谢,我在搜索解决方案时在您提供的链接上看到了该错误,但dumb me没有注意到它在3.0.2中已修复。升级到新版本时,通常建议使用该行的最新版本;我很好奇为什么您选择了
3.0.1
,而该行的最新版本是
3.0.7
。当前版本为
4.1.5
;有关完整的版本信息,请参阅。通常,point发行版(3.0.2、3.0.3等)只包含bug修复。另外,请注意。事实上,我们作为一个团队使用一个中央团队提供的标准包。所以目前正在使用这个版本的spring框架。我现在只手动更改了spring-integration版本。该团队目前正在升级spring版本,将很快更新。谢谢你的意见。