Spring集成+ JMS +在服务激活器

时间:2016-08-26 11:15:25

标签: spring spring-integration spring-jms

我使用Spring集成连接到JMS Messaging队列。 我正在使用的JMS提供程序是Apache ActiveMQ。

我有以下类读取JMS消息(具有ServiceActivator方法):

@Component
public class MessageReader
{

@ServiceActivator
public Entity onMessage(Message<Entity> inboundMessage) {

    System.out.println(" -------Message Read Start--------");

    System.out.println(inboundMessage.getHeaders());

    System.out.println(" -------Message Headers Reading completed--------");

    Entity payload = null;


    try{

        payload = inboundMessage.getPayload();
        System.out.println(" -------Message Read End--------");
    }catch(Exception e){
        e.printStackTrace();
    }


    return payload;
}
}

在这里,Entity在我的应用程序中是一个POJO。

在从JMS队列中读取消息时,我得到以下异常:

java.lang.ClassCastException: org.apache.activemq.command.ActiveMQObjectMessage cannot be cast to com.poc.pojo.Entity

我该如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:0)

查看你的stacktrace,ClassCastException,

  • 首先看看你的实体,实现了什么界面?
  • 第二个inboundMessage.getPayload()。getClass(),实现所需的ActiveMQ接口?

    • 这两个类的解决方案实现相同的接口。
    • 其他读者一类使转换器成为其他类。
    • 其他问题,弹簧配置正确使用集成ActiveMQ

答案 1 :(得分:0)

看起来您的<int-jms:message-driver-channel-adapter>配置了`extract-payload =“false”。

在这种情况下,整个JmsMessage呈现为Spring集成消息的payload。但正如您所看到的那样ServiceActivator完全符合JmsMessage的正文。