You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/09/14 10:02:34 UTC
(camel) branch main updated: CAMEL-21219: camel-jms - Sending request/reply should not include temporary CamelJmsDeliveryMode header (#15560)
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 <cl...@gmail.com>
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}");
+ }
+ };
+ }
+}