Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-1633

XMPPConsumer.processPacket does not correctly handle received non-message packets.



    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.6.1
    • 1.6.2, 2.0-M2
    • camel-xmpp
    • None


      I am currently porting an application using an in house Smack integration to Apache Camel.

      Specifically, I am getting failures with multiuser chat where messages stop being received in the middle of the message stream I am sending.
      I have yet to verify the issue exists with private chat as well, but the XMPPConsumer source looks like there will be a similar issue.

      The XMPPConsumer class registers itself for all packet types in the doStart method, but in the processPacket method immediately casts the received Packet to Message.

      I have found with the in house integration that Smack sends several types of Packets, and I could not find assurance that it would not call the packet listener with a null message.

      A simple if((null != packet) && (packet instanceof Message)) should be used to prevent improper packets from being utilized.

      FYI: the above if statement should also prevent packets from building up in the Smack message queue, since all messages will be processed without throwing an exception.
      So a call to muc.nextMessage() is unnecessary, and actually detrimental (since if the next packet is a message, it will be dropped without processing).
      It may be wise to actually use a try/catch block to prevent exceptions from being thrown by the processPacket method, since messages that throw exceptions seem to stay in the Smack message queue.


        1. XmppConsumer.java
          5 kB
          Edward Campbell



            davsclaus Claus Ibsen
            edward.campbell Edward Campbell
            0 Vote for this issue
            1 Start watching this issue