You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/05/27 13:53:02 UTC

svn commit: r779121 - /camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppConsumer.java

Author: davsclaus
Date: Wed May 27 11:53:02 2009
New Revision: 779121

URL: http://svn.apache.org/viewvc?rev=779121&view=rev
Log:
CAMEL-1633: Fixed xmpp consumer to filter packages not needed. Thanks to Edward Campbell for the patch.

Modified:
    camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppConsumer.java

Modified: camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppConsumer.java?rev=779121&r1=779120&r2=779121&view=diff
==============================================================================
--- camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppConsumer.java (original)
+++ camel/trunk/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppConsumer.java Wed May 27 11:53:02 2009
@@ -25,8 +25,12 @@
 import org.jivesoftware.smack.PacketListener;
 import org.jivesoftware.smack.SmackConfiguration;
 import org.jivesoftware.smack.XMPPConnection;
+import org.jivesoftware.smack.filter.AndFilter;
+import org.jivesoftware.smack.filter.PacketTypeFilter;
+import org.jivesoftware.smack.filter.ToContainsFilter;
 import org.jivesoftware.smack.packet.Message;
 import org.jivesoftware.smack.packet.Packet;
+import org.jivesoftware.smack.packet.Presence;
 import org.jivesoftware.smackx.muc.DiscussionHistory;
 import org.jivesoftware.smackx.muc.MultiUserChat;
 
@@ -65,6 +69,11 @@
             if (LOG.isInfoEnabled()) {
                 LOG.info("Joined room: " + muc.getRoom() + " as: " + endpoint.getNickname());
             }
+
+            // add the presence packet listener to the connection so we only get packets that concers us
+            final ToContainsFilter toFilter = new ToContainsFilter(endpoint.getParticipant());
+            final AndFilter packetFilter = new AndFilter(new PacketTypeFilter(Presence.class), toFilter);
+            connection.addPacketListener(this, packetFilter);
         }
 
         super.doStart();
@@ -91,7 +100,7 @@
     }
 
     public void processPacket(Packet packet) {
-        Message message = (Message)packet;
+        Message message = (Message) packet;
 
         if (LOG.isDebugEnabled()) {
             LOG.debug("Recieved XMPP message: " + message.getBody());
@@ -100,13 +109,8 @@
         XmppExchange exchange = endpoint.createExchange(message);
         try {
             getProcessor().process(exchange);
-            if (muc != null) {
-                // must invoke nextMessage to consume the response from the server
-                // otherwise the client local queue will fill up (CAMEL-1467)
-                muc.nextMessage();
-            }
         } catch (Exception e) {
-            LOG.error("Error while processing XMPP message", e);
+            exchange.setException(e);
         }
     }