如何将使用Message Listener接收的JMS消息转换为域对象

时间:2012-08-07 20:44:04

标签: spring jms

我正在使用:

  • Spring 3.1.1
  • ActiveMQ 5.6.0

我有两个JMS应用程序:

  • App A使用JmsTemplate使用jmsTemplate.convertAndSend(msg)发送域对象;
  • App B使用Message Listener并注册了Message Converter

转换收到的消息时,将提取空值。

我知道这一定相当简单,但我得到的是空值,我没有找到一个例子来看我做错了什么。

有人可以解释一下这是如何工作的吗?

域对象

public class MyDomainObj implements Serializable {

private static final long serialVersionUID = -5411260096045103654L;
private String name;
private String msg;

public MyDomainObj() {

}

public MyDomainObj(String name, String msg) {
    this.name = name;
    this.msg = msg;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}

}

App A

@Component
public class MessageSender {

    @Autowired
    private JmsTemplate jmsTemplate;

    public MessageSender() {

    }

    public void sendMessage(MyDomainObj msg) {
        jmsTemplate.convertAndSend(msg);
    }
}

App B

@Component
public class MyReceiverConverter implements MessageConverter {

    @Override
    public Object fromMessage(Message msg) throws JMSException,
            MessageConversionException {

        MyDomainObj myDomainObj = new MyDomainObj(msg.getStringProperty("name"), msg.getStringProperty("msg"));


        return myDomainObj;
    }

    @Override
    public Message toMessage(Object msg, Session session) throws JMSException,
            MessageConversionException {

        ....
    }
}

1 个答案:

答案 0 :(得分:3)

解决方案是:

@Override
public Object fromMessage(Message msg) throws JMSException,
        MessageConversionException {

    MyDomainObj myDomainObj = (MyDomainObj)((ObjectMessage)msg).getObject();

    return myDomainObj;
}