我想向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
为什么呢?谢谢!
答案 0 :(得分:2)
setObjectProperty方法接受Boolean,Byte类的值, 短,整数,长整数,浮点数,双精度和字符串。尝试使用任何 其他类必须抛出JMSException。
所以它不接受ByteArray
。
setObjectProperty
接受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)