我可以通过Java Test类发送消息。能够在控制台中看到字符串消息。但是在日志中更新它时,我得到一个空响应。我收到此错误"无效的需求代码"。任何人都可以帮我这个吗?
任何人都可以建议我如何从JMSTextMessage
转换为JMSBytesMessage
IBM MQ Send Bytes消息通过Java Test Class。
任何帮助都会有所帮助
MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
cf.setHostName("");
cf.setPort();
cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
cf.setQueueManager("");
cf.setChannel("");
MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("");
MQQueueSender sender = (MQQueueSender) session.createSender(queue);
long uniqueNumber = System.currentTimeMillis() % 1000;
JMSTextMessage message = (JMSTextMessage) session.createTextMessage("B+VCTR||*RPI/LAX/8548|16MAR+B+");
connection.start();
System.out.println("before Sent message:\\n" + message);
sender.send(message);
System.out.println("Sent message:\\n" + message);
sender.close();
session.close();
connection.close();
System.out.println("\\nSUCCESS\\n");
}
catch (JMSException jmsex) {
System.out.println(jmsex);
System.out.println("\\nFAILURE2\\n");
}
catch (Exception ex) {
System.out.println(ex);
System.out.println("\\nFAILURE1\\n");
}
}
}
答案 0 :(得分:0)
以下两个方法演示了如何在BytesMessage中传递UTF-8编码文本:
Message createBytesMessage(Session session, String text) throws JMSException {
Charset charset = Charset.forName("UTF-8");
byte[] data = text.getBytes(charset);
BytesMessage bmsg = session.createBytesMessage();
bmsg.writeBytes(data);
return bmsg;
}
String readBytesMessage(BytesMessage bmsg) throws JMSException {
int len = (int) bmsg.getBodyLength();
byte[] data = new byte[len];
bmsg.readBytes(data);
Charset charset = Charset.forName("UTF-8");
String text = new String(data, charset);
return text;
}
本质上,BytesMessage用于发送字节数组。使用BytesMessages传递文本以将文本转换为字节开始。在这里,我使用UTF-8编码来编码文本。任何其他人都会做;只需使用相同的字符集进行读写。您甚至可以通过将charset name作为消息的字符串属性发送来参数化charset(与HTTP charset参数的想法相同)。
在处理TextMessages时,IBM MQ将隐式执行消息转换和编码。大多数情况下这是不受欢迎的行为,因为它不会很好地处理unicode字符。此转换的规则将在here中进行说明。要避免此行为,请使用BytesMessages传递文本。
那么如何将TextMessage转换为BytesMessage?
从TextMessage中读取文本。然后将其作为新的BytesMessage发送。