如何以编程方式从JMS消息中检索JMSMessage类值

时间:2014-03-18 10:34:58

标签: jms ibm-mq

我正在使用JMS在MQ和使用JMS类(而不是MQ特定类)的MDB上发送消息来读取和处理消息。

当我打印消息时(使用消息' sString()方法,我得到下面的输出

我希望以编程方式检索' jms_text',' jms_bytes'等的值,视情况而定。

我怎样才能实现这一目标?我试图找到属性,但这也没有给我这个信息。

+++ SAMPLE MDB: Text Message => Testing sending message to error queue
[3/15/14 8:54:51:988 EDT] 00000323 SystemOut     O Received message: 

 JMSMessage class: jms_text
 --------------------------
  JMSType:          null
  JMSDeliveryMode:  2
  JMSExpiration:    0
  JMSPriority:      4
  JMSMessageID:     ID:414d5120514458362020202020202020cc070d53025e4d22
  JMSTimestamp:     1394803436074
  JMSCorrelationID: null
  JMSDestination:   queue:///XX.MY.ERR.QUEUE
  JMSReplyTo:       null
  JMSRedelivered:   false
    JMSXAppID: WebSphere MQ Client for Java
    JMSXDeliveryCount: 1
    JMSXUserID: b8320      
    JMS_IBM_Character_Set: UTF-8
    JMS_IBM_Encoding: 273
    JMS_IBM_Format: MQSTR  
    JMS_IBM_MsgType: 8
    JMS_IBM_PutApplType: 28
    JMS_IBM_PutDate: 20140314
    JMS_IBM_PutTime: 13235615
Testing sending message to error queue 

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

<强>更新

您可以使用instanceof运算符来确定消息的类型。 JMS定义了五种类型的消息Text,Stream,Bytes,Map和Object。所以你可以检查如下:

if (rcvdMessage instanceof JMSTextMessage)
    msgType = "jms_text";
else if (rcvdMessage instanceof JMSStreamMessage)
    msgType = "jms_stream";
else if (rcvdMessage instanceof JMSMapMessage)
    msgType = "jms_map";
else if (rcvdMessage instanceof JMSBytesMessage)
    msgType = "jms_bytes";
else if (rcvdMessage instanceof JMSObjectMessage)
    msgType = "jms_object";
else
    msgType = "jms_none";