Как установить заголовок в строку в java с помощью JMS

Я пытаюсь установить тип RFH2Header в строку сообщения. Но он не добавляется к сообщению. Пожалуйста помоги. Заранее спасибо!!!! Верен ли мой подход ?? Если я проверяю очередь ответов, свойство RFH добавляется к байтовому сообщению.

String message1 = "MQ Message header test";
Message message11 = session.createTextMessage(message1);

MQRFH2 header = new MQRFH2();
ByteArrayOutputStream out = new ByteArrayOutputStream ();
DataOutput dout = new DataOutputStream(out);
header.write(dout);
byte[] outheaders = out.toByteArray();
byte[] bArray = message1.getBytes("UTF-8");
BytesMessage responseMessage = session.createBytesMessage(); // throws JMSException
responseMessage.writeBytes(outheaders);
responseMessage.writeBytes(bArray);
responseMessage.setJMSType("MQRFH2");
responseMessage.setJMSCorrelationID("12345678900000");
responseMessage.setJMSDeliveryMode(2);
responseMessage.setJMSPriority(4);
responseMessage.setJMSReplyTo(queue);
responseMessage.setStringProperty("JMS_IBM_Format", "MQRFH2"); 
responseMessage.setIntProperty("JMS_IBM_Encoding", MQConstants.MQENC_NATIVE); 
responseMessage.setIntProperty("JMS_IBM_Character_Set", 1208);
responseMessage.setIntProperty("JMS_IBM_PutApplType", 11);
producer.send(responseMessage);

Мой вывод выглядит следующим образом в очереди ответов.. Пожалуйста, помогите, как установить заголовок в строку

00000   4D 51 20 4D 65 73 73 61--67 65 20 68 65 61 64 65  |MQ Message heade|
00010   72 20 74 65 73 74 52 46--48 20 00 00 00 02 00 00  |r testRFH ......|
00020   00 24 00 00 00 00 00 00--00 00 20 20 20 20 20 20  |.$........      |
00030   20 20 00 00 00 00 00 00--04 B8                    |  .......�      |

person Vinoth    schedule 07.11.2015    source источник
comment
Вопрос не очень понятен. Вы хотите добавить данные типа RFH2 в тело сообщения JMS? или установить тип данных RFH2 в качестве заголовка сообщения JMS?   -  person Shashi    schedule 07.11.2015


Ответы (1)


Не очень понятно вопрос, но в любом случае следующее может быть вам полезно.

RFH2 специфичен для MQ, а JMS является стандартом. Приложение MQ JMS не может явно задавать данные RFH2 в качестве заголовка сообщения JMS. Клиент MQ JMS внутренне устанавливает необходимые заголовки RFH2 для создания сообщения JMS во время отправки сообщения. Приложение может задавать только тело сообщения и ряд свойств JMS, используя setJMSxxxx, и определяемые пользователем свойства, используя setxxxProperty методы. Например, приведенный ниже фрагмент устанавливает свойство строкового типа с именем MyStringProperty.

responseMessage.setStringProperty("MyStringProperty", "SomeString Data");

Данные RFH2 будут представлять собой поток байтов с фиксированной частью заголовка и переменной частью данных, как описано здесь:http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q032000_.htm?lang=en. Следовательно, вам нужно создать BytesMessage, если вы хотите отправлять данные RFH2 как часть сообщения body.

person Shashi    schedule 08.11.2015
comment
Можно ли изменить ответ, чтобы также показать, как делать подразделы в JMS? попытка использовать точку для создания подразделов, таких как MyColor.Red, приводит к возникновению исключения JMSCC0049. В центре знаний нет примеров того, как это сделать. - person crashdog; 04.08.2017
comment
Интересно, позвольте мне попробовать ваш сценарий, когда я доберусь до своего ноутбука через некоторое время. - person Shashi; 04.08.2017
comment
Я тоже попытался установить имя свойства, содержащее точку, и получил ту же ошибку. Согласно этой документации в ibm .com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.mig.doc/, имена свойств не должны содержать точку. Предлагаем вам использовать подчеркивание вместо точки. - person Shashi; 08.08.2017