Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Qpid JMS:接收文本消息导致强制转换异常_Java_Jms_Qpid - Fatal编程技术网

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

Java Qpid JMS:接收文本消息导致强制转换异常,java,jms,qpid,Java,Jms,Qpid,我正在尝试使用Qpid JMS和ProtonJ(AMQP 1.0)发送和接收消息,但无法接收TextMessage。异常表示它无法将jmsbytes消息强制转换为TextMessage: org.apache.qpid.jms.message.JmsBytesMessage cannot be cast to javax.jms.TextMessage 即使尝试以JmsTextMessage的形式接收消息,也会导致: org.apache.qpid.jms.message.JmsBytesMe

我正在尝试使用Qpid JMS和ProtonJ(AMQP 1.0)发送和接收消息,但无法接收
TextMessage
。异常表示它无法将
jmsbytes消息
强制转换为
TextMessage

org.apache.qpid.jms.message.JmsBytesMessage cannot be cast to javax.jms.TextMessage
即使尝试以
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�测试消息
。我想知道这个前缀是什么,因为我还没有发送。我猜一定是一些编码的东西


如何以字符串形式接收消息?

QPid JMS将根据用于描述入站消息的编码方式和注释,返回传入消息的基于文本消息的变体。如果您正在接收BytesMessage,则表示正在传递的消息未注释为TextMessage,或者未携带内容类型,这表明字符串在正文字节中编码,或者不是携带编码字符串的AmqpValue类型的正文部分


您的中间人可能错误地重新编码了邮件,或者您的队列中有其他未正确编码的邮件

我可以看到消息是用一些jms注释注释的。如果他们迷路了怎么办?当然,它不能解释为
TextMessage
。但是它不应该在字符串前面放一些东西,是吗?Qpid JMS不应该这样做,所以我会查看中介来了解它做了什么。