无法在weblogic,JMS,java中设置JMS_IBM_MQMD_MsgId的属性值

时间:2013-11-07 12:18:33

标签: java jms bytearray object-properties

我想向JMS队列发送消息,我想设置一个对象属性:

tMessage.setObjectProperty("JMS_IBM_MQMD_MsgId", bytes); //bytes is a byte array value

但我得到了这一行的例外:

tMessage.setObjectProperty("JMS_IBM_MQMD_MsgId", toByteArray((phone+"IBM").toCharArray()));

为什么我不能将字节数组设置为此属性?我看到了一些例子,每个人都设置了bytearray,但我得到了例外:

weblogic.jms.common.MessageFormatException: [JMSClientExceptions:055123]Invalid property value, [B@48647dd0

为什么呢?谢谢!

3 个答案:

答案 0 :(得分:2)

setObjectProperty

  

setObjectProperty方法接受Boolean,Byte类的值,   短,整数,长整数,浮点数,双精度和字符串。尝试使用任何   其他类必须抛出JMSException。

所以它不接受ByteArraysetObjectProperty接受Object,因此您不会收到编译错误。

答案 1 :(得分:1)

我建议看一下WMQ安装中的一个示例 - 名为SimpleWMQMDWrite.java

这确实使用setObjectProperty,如下所示:

  // Generate a custom message id
  byte[] customMessageId = new byte[24];
  for (int i = 0; i < 24; i++) {
    // Hex-string 010203040506070801020304050607080102030405060708
    customMessageId[i] = (byte) ((i % 8) + 1);
  }

  // Write to MQMD.MsgId via JMS_IBM_MQMD_MSGID message property
  message.setObjectProperty(WMQConstants.JMS_IBM_MQMD_MSGID, customMessageId);

您包含的错误消息看起来不像WMQ JMS错误消息更多WebLogic,想知道是否包装了消息对象并正在进行一些额外的检查?

微米。

答案 2 :(得分:0)

您还可以使用com.ibm.msg.client.commonservices.Utils.hexToBytes(yourHexString)

将十六进制字符串转换为字节数组。