Spring Integration 4.1.0迁移问题

时间:2014-11-16 14:29:35

标签: java spring spring-integration

我在将应用程序从spring-integration 4.0.4迁移到最近的4.1.0版本时遇到问题。

更换jar后,我的集成上下文会为每个<recipient-list-router/>标记抛出异常。

抛出的异常是消息的java.lang.ClassCastException

Caused by: java.lang.ClassCastException: com.sun.proxy.$Proxy62 cannot be cast to org.springframework.integration.context.IntegrationObjectSupport
    at org.springframework.config.AbstractSimpleMessageHandlerFactoryBean.createHandlerInternal(AbstractSimpleMessageHandlerFactoryBean.java:130)
    at org.springframework.integration.config.AbstractSimpleMessageHandlerFactoryBean.getObject(AbstractSimpleMessageHandlerFactoryBean.java:102)
    at org.springframework.integration.config.AbstractSimpleMessageHandlerFactoryBean.getObject(AbstractSimpleMessageHandlerFactoryBean.java:44)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanReagistrySupport.java:168)
    ... 20 more

我正在使用Spring-Integration 4.1.0.RELEASE,spring-core 4.1.2.RELEASE,并在jdk1.8.0_05上运行。 我的Integration bean上下文包含两个<recipient-list-router/>标记,删除后不会抛出此错误。

1 个答案:

答案 0 :(得分:0)

AbstractSimpleMessageHandlerFactoryBean的代码说:

else if(!(this.handler instanceof AbstractReplyProducingMessageHandler)) {
    if (logger.isDebugEnabled()) {
            logger.debug("adviceChain can only be set to AbstractReplyProducingMessageHandler or its subclass, "
                    + ((IntegrationObjectSupport) this.handler).getComponentName() + " doesn't support it.");
                }
}

所以,让我们为debug类别切换org.springframework.integration

从另一方面我同意这是一个错误,因为如果我们的messageHandlerProxy,我们就不能简单地将其投放到IntegrationObjectSupport

所以,请随时就这件事提出JIRA票。

从另一方面来看,不清楚为什么删除<recipient-list-router/>会驱逐一个问题......

因为<recipient-list-router/>不支持<request-handler-advice-chain>

我同意我们已经在4.1中引入了RecipientListRouterManagement,如果你使用JMX,将为RecipientListRouter注册特殊MBean,最后一个将成为Proxy,但它不是克隆代理与request-handler-advice-chain日志消息的关系......

如果您可以从AbstractSimpleMessageHandlerFactoryBean调试该行并向我们展示Proxy的真实对象,那就太棒了。

请表示更多StackTrace。也许我们可以看到更多的背景来找出原因的根源。

谢谢!