لا يمكن تعيين قيمة الخاصية لـ JMS_IBM_MQMD_MSGID في WebLogic و JMS و Java

StackOverflow https://stackoverflow.com/questions/19835743

سؤال

أرغب في إرسال رسالة إلى قائمة انتظار 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

لماذا ا؟ شكرًا لك!

هل كانت مفيدة؟

المحلول

إلى عن على setObjectProperty:

تقبل طريقة setObjectProperty قيم الفئة المنطقية ، البايت ، القصير ، عدد صحيح ، طويل ، تعويم ، مزدوج ، وسلسلة. يجب على محاولة استخدام أي فئة أخرى رمي jmsexception.

لذلك لا يقبل ByteArray. setObjectProperty يقبل Object لذلك لا تحصل على خطأ ترجمة.

نصائح أخرى

أقترح إلقاء نظرة على إحدى العينات في تثبيت 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 بشكل أكبر ، وأتساءل عما إذا كان ذلك قد لف كود الرسالة ويقوم ببعض التحقق الإضافي؟

م

كما يمكنك تحويل سلسلة السداسي إلى مجموعة البايت باستخدام com.ibm.msg.client.commonservices.Utils.hexToBytes(yourHexString)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top