将自定义对象绑定到JMS MapMessage

有没有一种标准的方法让我将自己的自定义对象添加到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

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

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

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

使用Spring中的JsmTemplateJsmTemplate ),如果要通过jmsTemplate.convertAndSend()发送Map ,其中Map包含非基本对象,则可以将Map转换为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作为Serializable一起使用,并将通过线路发送ObjectMessage

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