我是否有一种标准方法可以将自己的自定义对象添加到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
答案 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!