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();