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

Мне нужно создать сообщение с заголовком 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 Ответ

2 голосов
/ 21 апреля 2020

rfh2.setFormat ("RHF2")

Недопустимо.

rfh2.setFormat (CMQ C .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). ) сообщение здесь, в StackOverflow и в моем блоге.

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

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

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

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

...