Je souhaite renvoyer un message à partir d'une file d'attente de lettres mortes. Pour cela, j'ai besoin de convertir la lettre morte en un BytesMessage (la charge utile peut être un ZIP ou une chaîne).Comment convertir une lettre morte en un BytesMessage dans Java à l'aide de classes MQ (IBM)
Ce que j'essayé jusqu'à présent:
Get RFH2 par classe MQRFH2 et seek():
mqMessage.seek(0); MQRFH2 rfh2 = new MQRFH2(mqMessage); byte[]
data = new byte[mqMessage.getDataLength()];
mqMessage.readFully(data); System.out.println("Message data: "
+new String(data));.
Obtenez RFH2 par MQHeaderlist:
MQHeaderList list = new MQHeaderList (mqMessage, true); // Step 1.
MQDLH dlh = (MQDLH) list.get (0); // Step 2.
int reason = dlh.getReason(); // Step 3.
list.remove (dlh); // Step 4.
mqMessage = new MQMessage();
list.write (mqMessage, true); // Step 5.
mqMessage.format = list.getFormat(); // Step 6.
MQHeaderIterator it = new MQHeaderIterator(mqMessage);
while (it.hasNext()) {
MQHeader header = it.nextHeader();
System.out.println("Header type " + header.type() + ": " + header);
}
Get RFH2 par classe MQRFH2:
MQHeader header = new MQRFH2(mqMessage);
ByteArrayOutputStream out = new ByteArrayOutputStream();
header.write(new DataOutputStream(out), CMQC.MQENC_NATIVE,
CMQC.MQCCSI_DEFAULT); byte[] bytes = out.toByteArray(); String
sout = new String(bytes); System.out.println(sout);
Rien a marché pour moi: je reçois des erreurs, comme celui-ci:
MQJE001: Beendigungscode '2', Ursache '6114'.
MQJE001: Beendigungscode '2', Ursache '2195'.
ch.coop.mid.hecol.DAEQHandler.exception.ZDAEQException: com.ibm.mq.headers.MQDataException: MQJE001: Beendigungscode '2', Ursache '2195'.
at ch.coop.mid.hecol.DAEQHandler.bl.impl.ZMQQueueImpl.resendAllLetters(ZMQQueueImpl.java:52)
at ch.coop.mid.hecol.DAEQHandler.ZStart.main(ZStart.java:20)
Caused by: com.ibm.mq.headers.MQDataException: MQJE001: Beendigungscode '2', Ursache '2195'.
at com.ibm.mq.headers.MQDataException.getMQDataException(MQDataException.java:316)
at com.ibm.mq.headers.internal.Header.read(Header.java:620)
at com.ibm.mq.headers.MQRFH2.<init>(MQRFH2.java:113)
at ch.coop.mid.hecol.DAEQHandler.dto.ZMessageDTO.<init>(ZMessageDTO.java:60)
at ch.coop.mid.hecol.DAEQHandler.bl.impl.ZMQQueueImpl.resendAllLetters(ZMQQueueImpl.java:50)
... 1 more
Caused by: com.ibm.mq.headers.MQDataException: MQJE001: Beendigungscode '2', Ursache '6114'.
at com.ibm.mq.headers.MQDataException.getMQDataException(MQDataException.java:313)
at com.ibm.mq.headers.MQRFH2.read(MQRFH2.java:184)
at com.ibm.mq.headers.internal.Header.read(Header.java:639)
at com.ibm.mq.headers.internal.Header.read(Header.java:617)
... 4 more
Caused by: java.io.EOFException: MQJE086: Ausnahmebedingung durch Dateiende ('MQMessage.seek()').
at com.ibm.mq.MQMessage.seek(MQMessage.java:715)
at com.ibm.mq.headers.internal.store.MQMessageStore.readFrom(MQMessageStore.java:274)
at com.ibm.mq.headers.internal.Header.read(Header.java:661)
at com.ibm.mq.headers.MQRFH2.read(MQRFH2.java:181)
Y at-il une autre façon de convertir une lettre morte à un BytesMessage sans diviser l'ensemble des messages pour petites parties un les assembler de nouveau ensemble? Cette façon n'est pas très belle à mon avis. C'est très instable.
EDIT: Je ne peux utiliser que la version 7.5.0.0 des bibliothèques mq dans java.
Pourquoi vous n'utilisez le gestionnaire de lettre morte pour renvoyer des messages? Vous pouvez configurer des règles pour réessayer, transférer, etc. Voir ces 2 liens pour plus d'informations http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.pla.doc/q005540_.htm http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.ref.adm.doc/q083420_.htm – ValerieLampkin
Parce que j'ai besoin de résoudre le "problème" avec une application Java. @ValerieLampkin –