service-activator在接收Rabbit消息时抛出ClassCastException

时间:2013-09-09 16:42:02

标签: spring-integration

我正在使用Spring与RabbitMQ AMQP集成并面临奇怪的行为。

我通过外部服务通过rabbitMQ接收消息,但服务激活器抛出:
    java.lang.ClassCastException:org.springframework.context.expression.MapAccessor无法强制转换为org.springframework.expression.PropertyAccessor

我的代码在部署到Jboss的EAR文件中运行。 当我从单元测试中运行相同的上下文XML时,可以完美地接收消息。

设置窃听记录器会显示按预期收到的消息。

我将非常感谢能够指导我完成此任务的任何建议或想法。

我正在使用:

  1. spring-expression-3.2.4
  2. 弹簧整合-AMQP-2.2.4
  3. 弹簧一体化芯-2.2.4
  4. 弹簧兔1.1.4
  5. 应用程序上下文是:

    <int-amqp:inbound-channel-adapter
        id="firedJobInboundChannelAdapter"
        channel="firedNotificationChannel" 
        queue-names="firedJob-jboss-Q"      
        connection-factory="rabbitConnectionFactory" 
        mapped-request-headers="*" />
    
     <int:channel id="firedNotificationChannel" />          
    
     <int:json-to-object-transformer 
        input-channel="firedNotificationChannel" 
        output-channel="firedNotificationChannelObject"
        type="com.company.scheduling.JobStringDataMap"/>
    
    <int:channel id="firedNotificationChannelObject" />
    
    
    <int:service-activator  input-channel="firedNotificationChannelObject" >
         <bean id="firedSchedulerJobReciverBean" class="com.company.notifications.scheduler.gateway.FiredSchedulerJobReciver"/>         
    </int:service-activator>    
    

    例外是(错误原因以粗体显示):

      

    引起:java.lang.ClassCastException:org.springframework.context.expression.MapAccessor无法强制转换为org.springframework.expression.PropertyAccessor   在org.springframework.expression.spel.ast.PropertyOrFieldReference.getPropertyAccessorsToTry(PropertyOrFieldReference.java:330)   在org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:220)   在org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:112)   在org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:107)   在org.springframework.expression.spel.ast.MethodReference.getValueRef(MethodReference.java:72)   在org.springframework.expression.spel.ast.CompoundExpression.getValueRef(CompoundExpression.java:63)   在org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:82)   在org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:102)   在org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:103)   在org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:126)   在org.springframework.integration.util.MessagingMethodInvokerHelper.processInternal(MessagingMethodInvokerHelper.java:227)   在org.springframework.integration.util.MessagingMethodInvokerHelper.process(MessagingMethodInvokerHelper.java:127)   在org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:73)   ......还有37个

1 个答案:

答案 0 :(得分:1)

好吧,看起来JBOSS类路径中有较旧版本的 spring-context.jar 。 它也应该是 3.2.4 。并确保所有弹簧罐都是相同的版本,并且没有任何副本。