-
Bug
-
Resolution: Done
-
Major
-
7.9.1.CR1
-
None
Qpid jms client has a code like this:
session.createConsumer(queue).setMessageListener(message -> { try { Map<String, String> headers = new TreeMap<>(); Enumeration<String> en = (Enumeration<String>) message.getPropertyNames(); while (en.hasMoreElements()) { String name = en.nextElement(); System.out.println(name); headers.put(name, message.getStringProperty(name)); } System.out.println(headers); }catch (Exception e){ e.printStackTrace(); } });
If an Openwire client sends messages to this queue the following exception is received:
avax.jms.MessageFormatException: Property __HDR_MESSAGE_ID was a org.apache.qpid.proton.amqp.Binary and cannot be read as a java.lang.String at org.apache.qpid.jms.message.JmsMessagePropertySupport.convertPropertyTo(JmsMessagePropertySupport.java:47) at org.apache.qpid.jms.message.JmsMessage.getStringProperty(JmsMessage.java:393) at com.mycompany.camel.AMQClient2.lambda$main$0(AMQClient2.java:34) at org.apache.qpid.jms.JmsMessageConsumer.deliverNextPending(JmsMessageConsumer.java:749) at org.apache.qpid.jms.JmsMessageConsumer.access$100(JmsMessageConsumer.java:58) at org.apache.qpid.jms.JmsMessageConsumer$MessageDeliverTask.run(JmsMessageConsumer.java:808) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.qpid.jms.util.QpidJMSThreadFactory$1.run(QpidJMSThreadFactory.java:86) at java.lang.Thread.run(Thread.java:748)
As per JMS spec 3.5.4 , a property should be convertible to string.