为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Java 中将 JMSBytesMessage 转换为 TextMessage

如何在 Java 中将 JMSBytesMessage 转换为 TextMessage

开心每一天1111 2023-06-14 15:58:31
我正在构建一些 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
查看完整描述

2 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

我的猜测是您并不是真的想将 the 转换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每次循环都需要不同的消息。


查看完整回答
反对 回复 2023-06-14
?
茅侃侃

TA贡献1842条经验 获得超21个赞

查看BytesMessage的 API 文档可能会揭示一种可能的方法。除此之外,简单地从消息中读取字节并使用new String(bytes, charset)是一种选择。

检查传入消息以确定类型是否符合您的期望通常是个好主意。

if (message instanceof TextMessage) ...

这样你就可以适当地处理负面案例。


查看完整回答
反对 回复 2023-06-14
  • 2 回答
  • 0 关注
  • 186 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信