• weblogic.jms.common.messageFormatException:[JMSClientException:] Invalid property value


    Error:

    weblogic.jms.common.messageFormatException:[JMSClientException:055123] Invalid property value, com.jms.BHR@164dbd5

    Description:

    今天学习JMS,其中我想发送一个 Object 对象,代码如下:

     1 public static void send(String key, Object obj){
     2         InitialContext ctx = null;
     3         ctx = JMSUtil.getInitialContext();
     4         ConnectionFactory cf = null;
     5         Connection conn = null;
     6         Session session = null;
     7         try {
     8             cf = (ConnectionFactory) ctx.lookup("jms-jndi-cf-orient");
     9             conn = cf.createConnection();
    10             session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
    11             Destination dest = (Destination)ctx.lookup("jms-jndi-queue-orient");
    12             MessageProducer producer = null;
    13             producer = session.createProducer(dest);
    14             Message msg = session.createObjectMessage();
    15             msg.setObjectProperty(key, obj);
    16             msg.setJMSDeliveryMode(1);
    17             producer.send(msg);
    18         } catch (NamingException e) {
    19             e.printStackTrace();
    20         } catch (JMSException e) {
    21             e.printStackTrace();
    22         } finally{
    23             JMSUtil.close(session);
    24             JMSUtil.close(conn);
    25         }
    26     }
    27 
    28     public static void main(String[] args){       
    29         send("bhr", new BHR("BT FrontLine", "大连软件园路31号科技大厦A座"));
    30     } 

    我明明是按照JMS流程进行的,开始的时候我还以为是Message的类型设置错误了,可是我的的确确是ObjectMessage,然后接着检查我们的javaBean com.jms.BHR, 也实现了Serializable 接口。

    Cause:

    原因就出现在 msg.setObjectProperty(key, obj); 上,我相信很多人一看这个方法,就会认为它是把一个Object 对象encapsulate 到 msg 上,然后再 send 出去。看JMS的API:


    看红圈的地方,这个方法只针对java的基本数据类型有效,也就是说你可以用这个Object方法去替代 setStringProperty() 、 setIntProperty() 、 setLongProperty() 、setTextProperty()  ,而不是我们自认为的设置 Object 对象。

    Action:

    发送:

    ObjectMessage msg = session.createObjectMessage();
    msg.setObject((Serializable) obj);

    接收:

    ObjectMessage msg = null;
    conn.start();
    msg = (ObjectMessage) consumer.receive();
    obj = msg.getObject();

    注意

    如果你发送多个Object对象,需要用接受次序来控制到底接受哪一个。

  • 相关阅读:
    Python获取网页指定内容(BeautifulSoup工具的使用方法)
    python beautifulsoup 对html 进行爬取分类(部分)
    字典
    爬虫是什么
    pandas之DataFrame
    pandas之Ndarray
    pandas之Series
    爬取英文名详细内容
    python数据库连接
    python爬取昵称并保存为csv
  • 原文地址:https://www.cnblogs.com/orientsun/p/2609866.html
Copyright © 2020-2023  润新知