Java 如何将 JMSBytesMessage 转换为 TextMessage
How to convert JMSBytesMessage to TextMessage in Java
我正在构建一些 MQ 队列连接,我需要将消息队列从 queueReceiver.Receivenowait()
投射到 JMS Textmessage。
因为queueReceiver.Receivenowait()
格式是字节,我需要将它转换成Textmessage,以便将消息分解成数组列表。
我已经使用了:
queueReceiver = queueSession.createReceiver(ringQueue);
要获取 Bytemessage,我需要转换为 JMS 文本消息:
List<String> outputList = new ArrayList<String>();
while (loop) {
TextMessage msgResponse = (TextMessage) bytesMessage;
if (msgResponse.getText() == null) {
loop = false;
} else {
message = msgResponse.getText();
outputList.add(message);
msgResponse.acknowledge();
}
}
我得到了这个错误代码:
java.lang.ClassCastException: com.ibm.jms.JMSBytesMessage cannot be cast to javax.jms.TextMessage
查看 BytesMessage 的 API 文档可能会揭示一种可能的方法。除此之外,只需从消息中读取字节并使用 new String(bytes, charset)
是一种选择。
检查传入消息以确定类型是否符合您的预期通常是个好主意。
if (message instanceof TextMessage) ...
这样你就可以适当地处理负面案例。
我的猜测是,您并不是真的想将 BytesMessage
转换为 TextMessage
,而只是想将 BytesMessage
中的字节数组转换为 String
。如果是这样,那么您可以使用这样的代码:
List<String> outputList = new ArrayList<String>();
while (loop) {
if (bytesMessage instanceof BytesMessage) {
BytesMessage msgResponse = (BytesMessage) bytesMessage;
if (msgResponse.getBodyLength() == 0) {
loop = false;
} else {
byte[] bytes = new byte[(int) msgResponse.getBodyLength()];
msgResponse.readBytes(bytes);
outputList.add(new String(bytes));
msgResponse.acknowledge();
}
}
}
当然,bytesMessage
每次循环都需要不同的消息。
我正在构建一些 MQ 队列连接,我需要将消息队列从 queueReceiver.Receivenowait()
投射到 JMS Textmessage。
因为queueReceiver.Receivenowait()
格式是字节,我需要将它转换成Textmessage,以便将消息分解成数组列表。
我已经使用了:
queueReceiver = queueSession.createReceiver(ringQueue);
要获取 Bytemessage,我需要转换为 JMS 文本消息:
List<String> outputList = new ArrayList<String>();
while (loop) {
TextMessage msgResponse = (TextMessage) bytesMessage;
if (msgResponse.getText() == null) {
loop = false;
} else {
message = msgResponse.getText();
outputList.add(message);
msgResponse.acknowledge();
}
}
我得到了这个错误代码:
java.lang.ClassCastException: com.ibm.jms.JMSBytesMessage cannot be cast to javax.jms.TextMessage
查看 BytesMessage 的 API 文档可能会揭示一种可能的方法。除此之外,只需从消息中读取字节并使用 new String(bytes, charset)
是一种选择。
检查传入消息以确定类型是否符合您的预期通常是个好主意。
if (message instanceof TextMessage) ...
这样你就可以适当地处理负面案例。
我的猜测是,您并不是真的想将 BytesMessage
转换为 TextMessage
,而只是想将 BytesMessage
中的字节数组转换为 String
。如果是这样,那么您可以使用这样的代码:
List<String> outputList = new ArrayList<String>();
while (loop) {
if (bytesMessage instanceof BytesMessage) {
BytesMessage msgResponse = (BytesMessage) bytesMessage;
if (msgResponse.getBodyLength() == 0) {
loop = false;
} else {
byte[] bytes = new byte[(int) msgResponse.getBodyLength()];
msgResponse.readBytes(bytes);
outputList.add(new String(bytes));
msgResponse.acknowledge();
}
}
}
当然,bytesMessage
每次循环都需要不同的消息。