如何在 Java 中将 JMSBytesMessage 转换为 TextMessage

我正在构建一些 MQ 队列连接,我需要将消息队列从queueReceiver.Receivenowait().


因为queueReceiver.Receivenowait()格式是字节,我需要将它转换为文本消息,以便将消息转换为数组列表。


我已经这样做了:


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


开心每一天1111
浏览 187回答 2
2回答

RISEBY

我的猜测是您并不是真的想将 the 转换BytesMessage为 a TextMessage,而只是想将 the 中的字节数组转换BytesMessage为 a String。如果是这样,那么您可以使用如下代码:List<String> outputList = new ArrayList<String>();while (loop) {&nbsp; &nbsp;if (bytesMessage instanceof BytesMessage) {&nbsp; &nbsp; &nbsp; BytesMessage msgResponse = (BytesMessage) bytesMessage;&nbsp; &nbsp; &nbsp; if (msgResponse.getBodyLength() == 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loop = false;&nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byte[] bytes = new byte[(int) msgResponse.getBodyLength()];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msgResponse.readBytes(bytes);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;outputList.add(new String(bytes));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;msgResponse.acknowledge();&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;}}当然,bytesMessage每次循环都需要不同的消息。

茅侃侃

查看BytesMessage的 API 文档可能会揭示一种可能的方法。除此之外,简单地从消息中读取字节并使用new String(bytes, charset)是一种选择。检查传入消息以确定类型是否符合您的期望通常是个好主意。if (message instanceof TextMessage) ...这样你就可以适当地处理负面案例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java