You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2010/03/08 14:32:56 UTC

svn commit: r920319 - in /camel/trunk/components/camel-jms/src: main/java/org/apache/camel/component/jms/JmsPollingConsumer.java test/java/org/apache/camel/component/jms/JmsSelectorOptionTest.java

Author: ningjiang
Date: Mon Mar  8 13:32:56 2010
New Revision: 920319

URL: http://svn.apache.org/viewvc?rev=920319&view=rev
Log:
CAMEL-2529 Fix the issue of ConsumerTemplate don't support the jms uri with selector

Modified:
    camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsPollingConsumer.java
    camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorOptionTest.java

Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsPollingConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsPollingConsumer.java?rev=920319&r1=920318&r2=920319&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsPollingConsumer.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsPollingConsumer.java Mon Mar  8 13:32:56 2010
@@ -28,10 +28,12 @@
  */
 public class JmsPollingConsumer extends PollingConsumerSupport {
     private JmsOperations template;
+    private JmsEndpoint jmsEndpoint;
     private final boolean spring20x;
 
     public JmsPollingConsumer(JmsEndpoint endpoint, JmsOperations template) {
         super(endpoint);
+        this.jmsEndpoint = endpoint;
         this.template = template;
         this.spring20x = JmsHelper.isSpring20x();
     }
@@ -68,7 +70,13 @@
 
     public Exchange receive(long timeout) {
         setReceiveTimeout(timeout);
-        Message message = template.receive();
+        Message message = null;
+        // using the selector
+        if (jmsEndpoint.getSelector() != null && jmsEndpoint.getSelector().length() > 0) {
+            message = template.receiveSelected(jmsEndpoint.getSelector());
+        } else {
+            message = template.receive();
+        }
         if (message != null) {
             return getEndpoint().createExchange(message);
         }

Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorOptionTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorOptionTest.java?rev=920319&r1=920318&r2=920319&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorOptionTest.java (original)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsSelectorOptionTest.java Mon Mar  8 13:32:56 2010
@@ -20,6 +20,8 @@
 
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
@@ -53,6 +55,28 @@
         template.sendBodyAndHeader("activemq:queue:hello", "Message2", "SIZE_NUMBER", 1600);
         assertMockEndpointsSatisfied();
     }
+    
+    @Test
+    public void testConsumerTemplate() throws Exception {
+        template.sendBodyAndHeader("activemq:queue:consumer", "Message1", "SIZE_NUMBER", 1505);
+        template.sendBodyAndHeader("activemq:queue:consumer", "Message3", "SIZE_NUMBER", 1300);
+        template.sendBodyAndHeader("activemq:queue:consumer", "Message2", "SIZE_NUMBER", 1600);
+
+        // process every exchange which is ready. If no exchange is left break
+        // the loop
+        while (true) {
+            Exchange ex = consumer.receiveNoWait("activemq:queue:consumer?selector=SIZE_NUMBER<1500");
+            if (ex != null) {
+                Message message = ex.getIn();
+                int size = message.getHeader("SIZE_NUMBER", int.class);
+                assertTrue("The message header SIZE_NUMBER should be less than 1500", size < 1500);
+                assertEquals("The message body is wrong", "Message3", message.getBody());
+            } else {
+                break;
+            }
+        }
+
+    }
 
     protected CamelContext createCamelContext() throws Exception {
         CamelContext camelContext = super.createCamelContext();