2015-06-12 26 views
1

我有一個Spring集成應用程序,它查詢來自AS400 DB的數據,然後進行一些修改將其傳輸到MQ。
它運行良好,直到我決定升級Spring集成版本。
從版本 - spring-integration-core-2.2.3.RELEASE升級到spring-integration-core-3.0.1.RELEASE後,我出現了以下錯誤。

在升級Spring集成版本後獲取類轉換異常

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

我該如何使這個代碼工作?下面是我的豆子,其可用於參考 -
入站通道豆 -

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

回答

2

是,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 ]
+0

非常感謝,我在閱讀這個解決方案之前給出的鏈接上的錯誤,但是我沒有注意到它在3.0.2中被修復了。 –

+1

升級到新版本時,通常建議使用該行中的最新版本;我很好奇你爲什麼在該行最新版本是3.0.7時選擇了'3.0.1'。當前版本是'4.1.5';有關完整的版本信息,請參見[項目頁面](http://projects.spring.io/spring-integration/)。通常,點發布(3.0.2,3.0.3等)只包含錯誤修復。另外,請注意[遷移指南](https://github.com/spring-projects/spring-integration/wiki)。 –

0

當升級到新版本,通常建議使用該行的最新版本;我很好奇你爲什麼選擇3.0.1時,該行的最新版本是3.0.7。當前版本爲4.1.5;有關完整的版本信息,請參見the project page。通常,點發布(3.0.2,3.0.3等)只包含錯誤修復。另外請注意migration guides

+0

事實上,我們作爲一個團隊使用中央團隊提供的標準軟件包。所以目前使用這個版本的spring框架。我現在隻手動更改了彈簧集成版本。該團隊目前正在升級春季版本,將於近期更新。感謝您的輸入。 –

相關問題