을 위한 setObjectProperty:
setObjectProperty 메소드는 클래스 부울, 바이트, 짧고 정수, 길고, 플로트, 이중 및 문자열의 값을 허용합니다. 다른 클래스를 사용하려는 시도는 jmsexception을 던져야합니다.
따라서 받아들이지 않습니다 ByteArray
.
setObjectProperty
수락합니다 Object
따라서 컴파일 오류가 발생하지 않습니다.
문제
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
왜요? 고맙습니다!
해결책
을 위한 setObjectProperty:
setObjectProperty 메소드는 클래스 부울, 바이트, 짧고 정수, 길고, 플로트, 이중 및 문자열의 값을 허용합니다. 다른 클래스를 사용하려는 시도는 jmsexception을 던져야합니다.
따라서 받아들이지 않습니다 ByteArray
.
setObjectProperty
수락합니다 Object
따라서 컴파일 오류가 발생하지 않습니다.
다른 팁
WMQ 설치의 샘플 중 하나를 살펴 보는 것이 좋습니다.
이것은 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 오류 메시지처럼 보이지 않습니다. 메시지 객체를 포장하고 추가 점검을 수행하는지 궁금합니다.
중.
또한 육각 문자열을 사용하여 바이트 어레이로 변환 할 수 있습니다. com.ibm.msg.client.commonservices.Utils.hexToBytes(yourHexString)