[英]Qpid JMS: Receiving Text Message leads to casting exception
我正在尝试使用Qpid JMS和ProtonJ(AMQP 1.0)发送和接收消息,并且无法接收TextMessage
。 例外情况说它无法将JmsBytesMessage
转换为TextMessage
:
org.apache.qpid.jms.message.JmsBytesMessage cannot be cast to javax.jms.TextMessage
即使尝试以JmsTextMessage
接收消息JmsTextMessage
导致:
org.apache.qpid.jms.message.JmsBytesMessage cannot be cast to org.apache.qpid.jms.message.JmsTextMessage
我发的消息如下:
TextMessage textMessage = session.createTextMessage(message)
Queue queue = session.createQueue(queueName);
MessageProducer producer = session.createProducer(queue);
producer.send(textMessage);
我尝试接收以下消息:
Queue queue = session.createQueue(queueName);
MessageConsumer consumer = session.createConsumer(queue);
connection.start();
TextMessage message = (TextMessage) consumer.receive();
由于这不起作用,我试图获取字节并使用toString方法:
JmsBytesMessage message = (JmsBytesMessage) consumer.receive();
String stringMessage = message.toString();
结果如下:
JmsBytesMessage { org.apache.qpid.jms.provider.amqp.message.AmqpJmsBytesMessageFacade@10664b39 }
在下一个测试中,我只使用了字节并将它们转换为字符串:
JmsBytesMessage message = (JmsBytesMessage) consumer.receive();
message.readUTF();
byte[] byteData = null;
byteData = new byte[(int) message.getBodyLength()];
message.readBytes(byteData);
message.reset();
String messageString = new String(byteData);
结果是Sw testmessage
。 我想知道那个前缀是什么,因为我没有发送它。 我想它必须是一些编码的东西。
如何以字符串形式接收消息?
QPid JMS将根据用于描述入站消息的编码和注释的方式返回基于TextMessage的传入消息变体。 如果您正在接收BytesMessage,则表示正在传递的消息未注释为TextMessage,或者它没有携带指示字符串在body字节中编码的内容类型,或者它不是AmqpValue类型的body部分它带有一个编码的字符串。
您的中间人可能会错误地重新编码邮件,或者您排队的其他邮件未正确编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.