2015-11-07 1 views
1

J'essaie de définir le type RFH2Header sur une chaîne de message. Mais ce n'est pas annexé au message. S'il vous plaît aider. Merci d'avance!!!! Est-ce que mon approche est correcte? Si je vérifie dans la file d'attente de réponse, la propriété de RFH est ajoutée au message d'octets.Comment définir l'en-tête d'une chaîne dans Java à l'aide de JMS

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); 

Ma sortie ressemble ci-dessous dans la file d'attente de réponse .., S'il vous plaît aider, comment mettre en-tête d'une chaîne

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     | .......�  | 
+0

La question n'est pas très claire. Voulez-vous ajouter le type de données RFH2 en tant que corps à un message JMS? ou définir le type de données RFH2 en tant qu'en-tête de message JMS? – Shashi

Répondre

1

pas très clair sur la question, mais en tout cas, ce qui suit peut être utile à toi. RF12 est spécifique à MQ tandis que JMS est une norme. Une application MQ JMS ne peut pas définir explicitement les données RFH2 en tant que en-tête de message JMS. Le client MQ JMS définit en interne les en-têtes RFH2 requis pour générer un message JMS pendant l'envoi du message. L'application peut uniquement définir le corps du message et un certain nombre de propriétés JMS en utilisant setJMSxxxx et les propriétés définies par l'utilisateur à l'aide des méthodes setxxxProperty. Par exemple, l'extrait ci-dessous définit une propriété de type chaîne appelée MyStringProperty.

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

données RFH2 seront un flux d'octets avec une partie de données variables partie d'en-tête fixe et comme décrit ici: http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q032000_.htm?lang=en. Par conséquent, vous devez créer BytesMessage si vous voulez envoyer des données RFH2 dans le cadre du messagecorps.

+0

Est-il possible de modifier la réponse pour montrer aussi comment faire des sous-clés dans JMS? essayer d'utiliser une période pour créer des sous-clés comme "MyColor.Red" entraîne une exception JMSCC0049 levée. Le centre de connaissances ne montre aucun exemple de comment faire cela. – crashdog

+0

Intéressant, laissez-moi essayer votre scénario quand j'arriverai à mon ordinateur portable un peu plus tard. – Shashi

+0

J'ai aussi essayé de définir un nom de propriété contenant un point et j'ai eu la même erreur. Selon cette documentation, https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.mig.doc/q001730_.htm, les noms de propriété ne doivent pas contenir de point. Je vous suggère d'utiliser un trait de soulignement au lieu de point. – Shashi