2

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

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

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

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

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

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

为什么?谢谢!

4

3 回答 3

2

对于setObjectProperty

setObjectProperty 方法接受 Boolean、Byte、Short、Integer、Long、Float、Double 和 String 类的值。尝试使用任何其他类必须抛出 JMSException。

所以它不接受ByteArraysetObjectProperty接受Object所以你不会得到编译错误。

于 2013-11-07T12:28:09.717 回答
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,但想知道是否已经包装了消息对象并正在做一些额外的检查?

M。

于 2013-11-11T13:23:40.067 回答
0

您也可以使用将十六进制字符串转换为字节数组com.ibm.msg.client.commonservices.Utils.hexToBytes(yourHexString)

于 2019-08-02T05:42:50.827 回答