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