camel-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Edward Campbell (JIRA)" <>
Subject [jira] Reopened: (CAMEL-1633) XMPPConsumer.processPacket does not correctly handle received non-message packets.
Date Wed, 10 Jun 2009 19:07:35 GMT


Edward Campbell reopened CAMEL-1633:

My fault.
After going through a bunch of testing, I found some issues with the fix I originally posted.
Specifically the doStart() method of should be as follows:

    protected void doStart() throws Exception {
        connection = endpoint.createConnection();

        if (endpoint.getRoom() == null) {
            Chat privateChat = connection.getChatManager().createChat(endpoint.getParticipant(),
            if (LOG.isInfoEnabled()) {
      "Open private chat to: " + privateChat.getParticipant());
        } else {
            // add the presence packet listener to the connection so we only get packets that
concerns us
            final ToContainsFilter toFilter = new ToContainsFilter(endpoint.getParticipant());
            final AndFilter packetFilter = new AndFilter(new PacketTypeFilter(Presence.class),
            connection.addPacketListener(this, packetFilter);

            muc = new MultiUserChat(connection, endpoint.resolveRoom(connection));
            DiscussionHistory history = new DiscussionHistory();
            history.setMaxChars(0); // we do not want any historical messages

            muc.join(endpoint.getNickname(), null, history, SmackConfiguration.getPacketReplyTimeout());
            if (LOG.isInfoEnabled()) {
      "Joined room: " + muc.getRoom() + " as: " + endpoint.getNickname());


For some reason the order of adding listeners is important with smack. I haven't yet downloaded
the smack source to find out why.

> XMPPConsumer.processPacket does not correctly handle received non-message packets.
> ----------------------------------------------------------------------------------
>                 Key: CAMEL-1633
>                 URL:
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-xmpp
>    Affects Versions: 1.6.1
>            Reporter: Edward Campbell
>            Assignee: Claus Ibsen
>             Fix For: 1.6.2, 2.0.0
>         Attachments:
> 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.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message