在Java中将JMS BytesMessage转换为String,并在另一个进程中使用相同的bytesmessage

时间:2016-09-18 15:38:19

标签: java string jms

我的代码正在侦听IBM MQ。接收JMS BytesMessage,将其转换为接收器类中的字符串,并将相同的JMS BytesMessage传递给另一个处理器类。 Processor类再次将其转换为String。接收器类和处理器类都使用相同的代码,如下所示从BytesMessage获取字符串。我在Receiver类中获取正确的字符串,但是当尝试从Processor类中的BytesMessage获取字符串时,它返回空字符串。除了保留JMS BytesMessage之外,请告知必须完成的工作,以便它也在Processor类中转换为String。

向处理器发送消息的代码:

String strMessage = null;
strMessage = getStringFromMessage(Message message)
process(message)

用于字符串转换的代码:

if (message instanceof BytesMessage){
 BytesMessage byteMessage = (BytesMessage) message;
 byte[] byteData = null;
 byteData = new byte[(int) byteMessage.getBodyLength()];
 byteMessage.readBytes(byteData);
 stringMessage =  new String(byteData);
}

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。我第一次阅读该消息后添加了以下代码

byteMessage.reset()

这已将光标位置重置为开头,因此我可以在处理器中读取它。所以接收器中的最终代码如下所示

if (message instanceof BytesMessage){
BytesMessage byteMessage = (BytesMessage) message;
byte[] byteData = null;
byteData = new byte[(int) byteMessage.getBodyLength()];
byteMessage.readBytes(byteData);
byteMessage.reset();
stringMessage =  new String(byteData);
}

再次阅读它的原因是我开始在接收器中读取它以执行一些恢复功能。我想在不触及框架的情况下实现它。初始框架是仅在处理器中读取消息。