This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new c4b1233  CAMEL-16858: Add support for JMS selectors to 
SjmsPollingConsumer
c4b1233 is described below

commit c4b12333fa01763a6563a2bceef9f927c91185df
Author: James Netherton <[email protected]>
AuthorDate: Mon Aug 9 12:58:20 2021 +0100

    CAMEL-16858: Add support for JMS selectors to SjmsPollingConsumer
---
 .../camel/component/sjms/SjmsPollingConsumer.java  |  3 ++-
 .../apache/camel/component/sjms/SjmsTemplate.java  | 11 +++++++++--
 .../component/sjms/JmsSelectorOptionTest.java      | 22 ++++++----------------
 3 files changed, 17 insertions(+), 19 deletions(-)

diff --git 
a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsPollingConsumer.java
 
b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsPollingConsumer.java
index 4a26a13..8003743 100644
--- 
a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsPollingConsumer.java
+++ 
b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsPollingConsumer.java
@@ -53,7 +53,8 @@ public class SjmsPollingConsumer extends 
PollingConsumerSupport {
     @Override
     public Exchange receive(long timeout) {
         try {
-            Message message = 
template.receive(jmsEndpoint.getDestinationName(), jmsEndpoint.isTopic(), 
timeout);
+            Message message = 
template.receive(jmsEndpoint.getDestinationName(), 
jmsEndpoint.getMessageSelector(),
+                    jmsEndpoint.isTopic(), timeout);
             if (message != null) {
                 return getEndpoint().createExchange(message, null);
             }
diff --git 
a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
 
b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
index 701902c..930db09 100644
--- 
a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
+++ 
b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
@@ -166,10 +166,17 @@ public class SjmsTemplate {
         }
     }
 
-    public Message receive(String destinationName, boolean isTopic, long 
timeout) throws Exception {
+    public Message receive(String destinationName, String messageSelector, 
boolean isTopic, long timeout) throws Exception {
         Object obj = execute(sc -> {
             Destination dest = 
destinationCreationStrategy.createDestination(sc, destinationName, isTopic);
-            MessageConsumer consumer = sc.createConsumer(dest);
+            MessageConsumer consumer;
+
+            if (ObjectHelper.isNotEmpty(messageSelector)) {
+                consumer = sc.createConsumer(dest, messageSelector);
+            } else {
+                consumer = sc.createConsumer(dest);
+            }
+
             Message message = null;
             try {
                 if (timeout < 0) {
diff --git 
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/JmsSelectorOptionTest.java
 
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/JmsSelectorOptionTest.java
index f8290c4..1886c74 100644
--- 
a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/JmsSelectorOptionTest.java
+++ 
b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/JmsSelectorOptionTest.java
@@ -24,7 +24,6 @@ import org.apache.camel.component.sjms.support.JmsTestSupport;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class JmsSelectorOptionTest extends JmsTestSupport {
 
@@ -52,25 +51,16 @@ public class JmsSelectorOptionTest extends JmsTestSupport {
     }
 
     @Test
-    public void testConsumerTemplate() throws Exception {
+    public void testConsumerTemplate() {
         template.sendBodyAndHeader("sjms:queue:consumer", "Message1", 
"SIZE_NUMBER", 1505);
         template.sendBodyAndHeader("sjms:queue:consumer", "Message3", 
"SIZE_NUMBER", 1300);
         template.sendBodyAndHeader("sjms: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("sjms:queue:consumer?messageSelector=SIZE_NUMBER<1500");
-            if (ex != null) {
-                Message message = ex.getIn();
-                int size = message.getHeader("SIZE_NUMBER", int.class);
-                assertTrue(size < 1500, "The message header SIZE_NUMBER should 
be less than 1500");
-                assertEquals("Message3", message.getBody(), "The message body 
is wrong");
-            } else {
-                break;
-            }
-        }
-
+        Exchange ex = 
consumer.receive("sjms:queue:consumer?messageSelector=SIZE_NUMBER<1500", 5000L);
+        Message message = ex.getIn();
+        int size = message.getHeader("SIZE_NUMBER", int.class);
+        assertEquals(1300, size, "The message header SIZE_NUMBER should be 
less than 1500");
+        assertEquals("Message3", message.getBody(), "The message body is 
wrong");
     }
 
     @Override

Reply via email to