繁体   English   中英

Qpid JMS:接收文本消息导致转换异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM