有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将自定义对象绑定到JMS映射消息

有没有一种标准方法可以让我将自己的自定义对象添加到映射中,然后在MapMessage中对其进行正确编组?当前我收到无效的对象类型消息。我注意到WebSphere有一个解决方案,但我正在寻找不绑定到某个特定方法的方法,因为如果没有这样的方法,也许JBoss支持的方法可以工作

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


共 (2) 个答案

  1. # 1 楼答案

    JMS映射消息的映射仅支持原语和字符串(及其数组)作为值。 从javadoc开始:

    The names are String objects, and the values are primitive data types in the Java programming language.

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

  2. # 2 楼答案

    使用Spring中的^{}(2.5,3.1),如果您想通过jmsTemplate.convertAndSend()发送一个映射包含非基本对象的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将以可序列化的方式处理映射,并通过线路发送ObjectMessage

    请注意,使用消息的侦听器必须能够读取ObjectMessage,然后再次将其转换为Map。请注意,您必须在连接的两侧都有相应的类,当然,映射中的对象必须是可序列化的