首页 > 解决方案 > 如何在 Java 中将 JMSBytesMessage 转换为 TextMessage

问题描述

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

因为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

标签: javajms

解决方案


我的猜测是,您并不是真的想将 a 转换BytesMessage为 a TextMessage,而只是想将 the 中的字节数组转换BytesMessage为 a 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每次循环都需要不同的消息。


推荐阅读