在java中将JMS字节消息转换为字符串,并在另一个进程中使用相同的字节消息

在java中将JMS字节消息转换为字符串,并在另一个进程中使用相同的字节消息,java,string,jms,Java,String,Jms,我的代码正在侦听IBM MQ。接收JMS ByteMessage,将其转换为receiver类中的字符串,并将同一JMS ByteMessage传递给另一个处理器类。Processor类再次将其转换为字符串。receiver类和processor类都使用如下相同的代码从BytesMessage获取字符串。我在Receiver类中获得了正确的字符串,但当试图从Processor类中的ByteMessage获取字符串时,返回的是空字符串。请建议除了保留JMS ByteMessage之外还需要做些什么

我的代码正在侦听IBM MQ。接收JMS ByteMessage,将其转换为receiver类中的字符串,并将同一JMS ByteMessage传递给另一个处理器类。Processor类再次将其转换为字符串。receiver类和processor类都使用如下相同的代码从BytesMessage获取字符串。我在Receiver类中获得了正确的字符串,但当试图从Processor类中的ByteMessage获取字符串时,返回的是空字符串。请建议除了保留JMS ByteMessage之外还需要做些什么,以便它在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);
}

我找到了解决办法。我在第一次阅读邮件后添加了以下代码

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);
}

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

是的,readBytes方法使光标进入内部缓冲区。如果必须再次读取该消息,则必须将其重置。否则会抛出带有“文件结尾”的JMSException。。。为什么要在读取光标后重置光标?从获取数据的任务的角度来看,这是完全不必要的。这个答案令人困惑,应该重写。。。