NIVESH SENGAR
NIVESH SENGAR

Reputation: 1333

Getting Class cast exception after upgrading Spring Integration version

I have a Spring Integration Application which polls for data from AS400 DB picks it and then after some modification transmit it to MQ.
It was running fine until I decided to upgrade Spring Integration version.
I am getting below error after upgrading from version - spring-integration-core-2.2.3.RELEASE to 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

I checked the code of class - org.springframework.integration.config.xml.AbstractPollingInboundChannelAdapterParser I just found these 3 lines of code different from earlier version -

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

So error is because of this line - parserContext.getRegistry().registerBeanDefinition(sourceBeanName, (BeanDefinition) source);

How can I make this code working? Below are my beans which could be used for reference -
Inbound Channel Bean -

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

Upvotes: 1

Views: 1091

Answers (2)

Gary Russell
Gary Russell

Reputation: 174584

When upgrading to a new version, it is generally recommended to use the latest version in that line; I am intrigued as to why you selected 3.0.1 when the latest version in that line is 3.0.7. The current version is 4.1.5; see the project page for complete version information. Generally, point releases (3.0.2, 3.0.3 etc) contain just bug fixes. Also, please pay attention to the migration guides.

Upvotes: 0

shruti1810
shruti1810

Reputation: 4047

Yes, 3.0.1 version has the problem. It is resolved in 3.0.2 version. You can check this link for the details : https://jira.spring.io/browse/INT-3300.

A small summary from the page link:


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 ]

Upvotes: 2

Related Questions