Uploaded image for project: 'AMQ Clients'
  1. AMQ Clients
  2. ENTMQCL-14

[jms] Failing to decode text message, client sometimes sends flow after close performative

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Minor
    • 1.1.0-alpha
    • 1.0.0-GA
    • qpid-jms
    • None
    • User Experience
    • Hide

      See above.

      Show
      See above.

    Description

      Having a simple consumer client (can provide source code) that tries to decode a message as TextMessage but fails as the message contains a binary content, the client raises exception:

      javax.jms.JMSException: Cannot decode String in UTF-8
      	at org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:66)
      	at org.apache.qpid.jms.provider.amqp.message.AmqpJmsTextMessageFacade.getText(AmqpJmsTextMessageFacade.java:111)
      	at org.apache.qpid.jms.provider.amqp.message.AmqpJmsTextMessageFacade.copy(AmqpJmsTextMessageFacade.java:89)
      	at org.apache.qpid.jms.provider.amqp.message.AmqpJmsTextMessageFacade.copy(AmqpJmsTextMessageFacade.java:44)
      	at org.apache.qpid.jms.message.JmsTextMessage.copy(JmsTextMessage.java:36)
      	at org.apache.qpid.jms.message.JmsTextMessage.copy(JmsTextMessage.java:25)
      	at org.apache.qpid.jms.JmsMessageConsumer.copy(JmsMessageConsumer.java:265)
      	at org.apache.qpid.jms.JmsMessageConsumer$MessageDeliverTask.run(JmsMessageConsumer.java:583)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      	at java.lang.Thread.run(Thread.java:745)
      Caused by: java.nio.charset.MalformedInputException: Input length = 2
      	at java.nio.charset.CoderResult.throwException(CoderResult.java:277)
      	at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:798)
      	at org.apache.qpid.jms.provider.amqp.message.AmqpJmsTextMessageFacade.getText(AmqpJmsTextMessageFacade.java:108)
      	... 9 more
      

      and closes the AMQP 1.0 connection. So far so good.

      But, seldomly (1/1000 to 1/100 probability), the client sends "flow" performative after sending "close" performative on the AMQP1.0 communication. This violates AMQP specification, in particular:

      2.7.9 Close:
      .. It is illegal to send any more frames (or bytes of any other kind) after sending a close frame.

      Attachments

        Issue Links

          Activity

            People

              gemmellr Robbie Gemmell
              rhn-support-pmoravec Pavel Moravec
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: