Почему заголовок RFH2 помещается перед сообщением, а не в заголовке?

Мне нужно создать сообщение с заголовком RFH2 и вставить его в IBM MQ. Ниже описано, как создается сообщение.

def message = new MQMessage()
def rfh2 = new MQRFH2()
rfh2.setEncoding(CMQC.MQENC_NATIVE)
rfh2.setCodedCharSetId(CMQC.MQCCSI_INHERIT)
rfh2.setFormat("        ")
rfh2.setNameValueCCSID(1208)
rfh2.setFieldValue('mcd', 'Msd', 'jms_byte')
rfh2.setFieldValue('jms', 'Dst', 'queue:///myqueue')
rfh2.setFieldValue('jms', 'Pri', 0)
rfh2.setFieldValue('usr', 'Sender', 'mysender')
rfh2.write(message)

message.writeString('''${msgText}''')

Однако кажется, что содержимое заголовка помещается не в заголовок, а перед сообщением. Ниже приведен пример:

Журналы сервера с сообщением, отправленным с помощью MQ Visual Edit

Заголовок

 2020-04-21 11:07:59.913 DEBUG 48093 --- [DefaultMessageListenerContainer-2] 
 c.b.i.c.listeners.AbstractAgiListener    : Receive message on MQ with header : {someargs, 
 jms_destination=queue:///myqueue, someargs, Sender=mysender, someargs, jms_type=mcd://jms_byte,
 someargs}

Сообщение

 <Document ...>...</Document>

Журналы сервера с сообщением, отправленным с указанным выше кодом

Заголовок

 2020-04-21 11:07:59.913 DEBUG 48093 --- [DefaultMessageListenerContainer-2] 
 c.b.i.c.listeners.AbstractAgiListener    : Receive message on MQ with header : {someargs}

Сообщение

 RFH ¨ÿÿÿþ        ¸ <mcd><Msd>jms_bytes</Msd></mcd> 8<jms><Dst>queue:///myqueue</Dst>
<Pri>0</Pri></jms>    <usr><Sender>mysender</Sender></usr><Document ...>...</Document>

Есть идеи, как это решить, пожалуйста? Спасибо.

Обновление 1

Даже с приведенным ниже кодом информация все еще присутствует перед сообщением

def message = new MQMessage()
def rfh2 = new MQRFH2()
rfh2.setEncoding(CMQC.MQENC_NATIVE)
rfh2.setCodedCharSetId(CMQC.MQCCSI_INHERIT)
rfh2.setFormat(CMQC.MQFMT_NONE)
rfh2.setNameValueCCSID(1208)
rfh2.setFieldValue('mcd', 'Msd', 'jms_byte')
rfh2.setFieldValue('usr', 'Sender', 'mysender')
rfh2.write(message)

1 ответ

Решение

rfh2.setFormat("RHF2")

Это неверно.

rfh2.setFormat(CMQC.MQFMT_NONE)

Это говорит о том, что полезная нагрузка сообщения не имеет типа. т.е. это не строка, или после этой структуры RFH2 не найдено другое внутреннее значение.

Как MQ Visual Edit?

Да, MQ Visual Edit использует класс MQRFH2, но вы должны понимать, что программист должен кодировать правильное значение MQMD.Format.

Вы установили для MQMD.Format сообщения значение MQFMT_RF_HEADER_2:

msg.format = CMQC.MQFMT_RF_HEADER_2;

Я опубликовал множество полнофункциональных программ Java (не JMS), которые создают сообщение MQRFH2 (также известное как JMS) как здесь, в Stackru, так и в моем блоге.

Вы можете выполнить поиск в MQRFH2 по моему имени, чтобы найти их здесь.

Вот тот, который описывает, как MQ Visual Edit обрабатывает отображение именованных свойств по сравнению с необработанным сообщением MQRFH2. https://www.capitalware.com/rl_blog/?p=4786

Вот тот, который показывает, как создать сообщение JMS (MQRFH2) в приложении Java, отличном от JMS: https://www.capitalware.com/rl_blog/?p=4823

И, наконец, тот, который показывает обработку входящего сообщения JMS (MQRFH2) в приложении Java, отличном от JMS: https://www.capitalware.com/rl_blog/?p=4811

Другие вопросы по тегам