-
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.