Uploaded image for project: 'AMQ Broker'
  1. AMQ Broker
  2. ENTMQBR-5978

Openwire message when consumed with core and amqp jms clients produces incompatible property types.

XMLWordPrintable

      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.
       

            rhn-support-jbertram Justin Bertram
            rhn-support-adongre Avinash Dongre
            Oleg Sushchenko Oleg Sushchenko
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: