将自定义对象绑定到JMS MapMessage

时间:2012-02-02 16:28:37

标签: java jboss jms

我是否有一种标准方法可以将自己的自定义对象添加到Map中,然后在MapMessage中正确编组?目前,我收到无效对象类型消息。我注意到WebSphere有一个解决方案,但我正在寻找一些没有绑定到特定AS的东西,如果没有这样的方法,JBoss支持的东西可能会起作用。

如何在WebSphere中执行此操作: http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/index.jsp?topic=/com.ibm.websphere.wesb.doc/ref/rwesb_jmscustombindings.html

2 个答案:

答案 0 :(得分:6)

JMS地图消息的地图仅支持基元和字符串(及其数组)作为值。 来自javadoc

  

名称是String对象,值是原始数据类型   用Java编程语言编写。

最好使用ObjectMessage并将序列化对象写入地图,然后将地图作为ObjectMessage的有效负载发送。这样,您仍然可以使用名称/值映射访问样式,但不限制类型。

答案 1 :(得分:1)

在Spring(2.5,3.1)中使用JsmTemplate,如果要通过Map发送地图包含非基本对象的jmsTemplate.convertAndSend(),可以将地图转换为Serializable并致电send(MessageCreator)。这条路:

//...some previous code here

final Map myMap = createYourSerializableMapHere();

jmsTemplate.send(new MessageCreator(){

    @Override
    public Message createMessage(Session session) throws JMSException {
        ObjectMessage objectMessage = session.createObjectMessage((Serializable) myMap);

        return objectMessage;
    }
});

这样jmsTemplate将与Map as Serializable一起使用,并通过网络发送ObjectMessage

请注意,使用消息的侦听器必须能够读取ObjectMessage,然后再将其转换为Map。请注意,您必须在电线的两侧都有相应的类,当然,Map中的对象必须是Serializable!