This is an automated email from the ASF dual-hosted git repository.
davsclaus 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 18069cc0fa9 CAMEL-21219: camel-jms - Sending request/reply should not
include temporary CamelJmsDeliveryMode header (#15560)
18069cc0fa9 is described below
commit 18069cc0fa92b4eeafb4ede05c2da6a52ddf86b0
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Sep 14 12:02:28 2024 +0200
CAMEL-21219: camel-jms - Sending request/reply should not include temporary
CamelJmsDeliveryMode header (#15560)
---
.../org/apache/camel/component/jms/JmsBinding.java | 3 +-
.../camel/component/jms/JmsConfiguration.java | 2 +-
.../camel/component/jms/JmsMessageHelper.java | 8 +-
...questReplyCamelDeliveryModeHeaderIssueTest.java | 94 ++++++++++++++++++++++
4 files changed, 103 insertions(+), 4 deletions(-)
diff --git
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
index 8dd13a4e8f3..d55776a9ff1 100644
---
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
+++
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
@@ -393,7 +393,8 @@ public class JmsBinding {
} else if (headerName.equals(JmsConstants.JMS_HEADER_PRIORITY)) {
jmsMessage.setJMSPriority(ExchangeHelper.convertToType(exchange, Integer.class,
headerValue));
} else if
(headerName.equals(JmsConstants.JMS_HEADER_DELIVERY_MODE)) {
- JmsMessageHelper.setJMSDeliveryMode(exchange, jmsMessage,
headerValue);
+ boolean qos = endpoint != null &&
endpoint.isPreserveMessageQos();
+ JmsMessageHelper.setJMSDeliveryMode(exchange, jmsMessage,
headerValue, qos);
} else if (headerName.equals(JmsConstants.JMS_HEADER_EXPIRATION)) {
jmsMessage.setJMSExpiration(ExchangeHelper.convertToType(exchange, Long.class,
headerValue));
} else {
diff --git
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
index 739382a3569..d56ae4544e4 100644
---
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
+++
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
@@ -675,7 +675,7 @@ public class JmsConfiguration implements Cloneable {
// If a delivery mode was set as a JMS header, then we have
used a temporary
// property to store it - CamelJMSDeliveryMode. Otherwise, we
could not keep
- // track of whether it was set or not as getJMSDeliveryMode()
will default return 1 regardless
+ // track of whether it was set or not as getJMSDeliveryMode()
will default return 1 regardless
// if it was set or not, so we can never tell if end user
provided it in a header
int deliveryMode;
if (JmsMessageHelper.hasProperty(message,
JmsConstants.JMS_DELIVERY_MODE)) {
diff --git
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java
index ae265618f04..a057323b1ae 100644
---
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java
+++
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java
@@ -413,9 +413,11 @@ public final class JmsMessageHelper {
* @param exchange the exchange
* @param message the message
* @param deliveryMode the delivery mode, either as a String
or integer
+ * @param preserveMessageQos whether the option preserveMessageQos
has been enabled
* @throws jakarta.jms.JMSException is thrown if error setting the
delivery mode
*/
- public static void setJMSDeliveryMode(Exchange exchange, Message message,
Object deliveryMode) throws JMSException {
+ public static void setJMSDeliveryMode(Exchange exchange, Message message,
Object deliveryMode, boolean preserveMessageQos)
+ throws JMSException {
Integer mode = null;
if (deliveryMode instanceof String s) {
@@ -442,7 +444,9 @@ public final class JmsMessageHelper {
if (mode != null) {
message.setJMSDeliveryMode(mode);
- message.setIntProperty(JmsConstants.JMS_DELIVERY_MODE, mode);
+ if (preserveMessageQos) {
+ message.setIntProperty(JmsConstants.JMS_DELIVERY_MODE, mode);
+ }
}
}
diff --git
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsRequestReplyCamelDeliveryModeHeaderIssueTest.java
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsRequestReplyCamelDeliveryModeHeaderIssueTest.java
new file mode 100644
index 00000000000..7b6b525cc8f
--- /dev/null
+++
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsRequestReplyCamelDeliveryModeHeaderIssueTest.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jms.issues;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jms.AbstractJMSTest;
+import org.apache.camel.component.jms.JmsConstants;
+import org.apache.camel.test.infra.core.CamelContextExtension;
+import org.apache.camel.test.infra.core.DefaultCamelContextExtension;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+public class JmsRequestReplyCamelDeliveryModeHeaderIssueTest extends
AbstractJMSTest {
+
+ @Order(2)
+ @RegisterExtension
+ public static CamelContextExtension camelContextExtension = new
DefaultCamelContextExtension();
+ protected CamelContext context;
+ protected ProducerTemplate template;
+
+ @Test
+ public void testInOnly() {
+ Exchange out =
template.request(context.getEndpoint("activemq:cheese"), (e) -> {
+ e.setPattern(ExchangePattern.InOnly);
+ e.getMessage().setBody("Camel");
+ });
+ Assertions.assertNotNull(out);
+ Assertions.assertEquals("Camel", out.getMessage().getBody());
+ Assertions.assertEquals(1, out.getMessage().getHeaders().size());
+ Assertions.assertEquals("cheese",
out.getMessage().getHeaders().get(JmsConstants.JMS_DESTINATION_NAME_PRODUCED));
+
Assertions.assertNull(out.getMessage().getHeaders().get(JmsConstants.JMS_DELIVERY_MODE));
+ }
+
+ @Test
+ public void testInOut() {
+ Exchange out =
template.request(context.getEndpoint("activemq:cheese"), (e) -> {
+ e.setPattern(ExchangePattern.InOut);
+ e.getMessage().setBody("World");
+ });
+ Assertions.assertNotNull(out);
+ Assertions.assertEquals("Hello World", out.getMessage().getBody());
+ Assertions.assertEquals(16, out.getMessage().getHeaders().size());
+ Assertions.assertEquals("cheese",
out.getMessage().getHeaders().get(JmsConstants.JMS_DESTINATION_NAME_PRODUCED));
+
Assertions.assertNull(out.getMessage().getHeaders().get(JmsConstants.JMS_DELIVERY_MODE));
+ }
+
+ @Override
+ protected String getComponentName() {
+ return "activemq";
+ }
+
+ @Override
+ public CamelContextExtension getCamelContextExtension() {
+ return camelContextExtension;
+ }
+
+ @BeforeEach
+ void setUpRequirements() {
+ context = camelContextExtension.getContext();
+ template = camelContextExtension.getProducerTemplate();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("activemq:cheese")
+ .setBody().simple("Hello ${body}");
+ }
+ };
+ }
+}