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 90cb3266e4e CAMEL-21221: camel-jms - Should default filter out Camel
headers like other components (#15561)
90cb3266e4e is described below
commit 90cb3266e4e29f0db8db9f4663b834a316afaf9f
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Sep 15 19:39:33 2024 +0200
CAMEL-21221: camel-jms - Should default filter out Camel headers like other
components (#15561)
---
.../apache/camel/component/activemq/activemq.json | 2 +-
.../camel/component/activemq6/activemq6.json | 2 +-
.../org/apache/camel/component/amqp/amqp.json | 2 +-
.../org/apache/camel/component/jms/jms.json | 2 +-
.../camel-jms/src/main/docs/jms-component.adoc | 30 +++++++++++++++-------
...gy.java => ClassicJmsHeaderFilterStrategy.java} | 10 +++++---
.../apache/camel/component/jms/JmsConstants.java | 6 +++--
.../component/jms/JmsHeaderFilterStrategy.java | 2 ++
.../component/jms/JmsHeaderFilteringTest.java | 12 ++++-----
.../JmsRouteWithDefaultKeyFormatStrategyTest.java | 4 +--
.../JmsStreamMessageTypeNoStreamCachingTest.java | 8 +++++-
.../component/jms/JmsStreamMessageTypeTest.java | 7 ++++-
.../FileRouteJmsKeepLastModifiedIT.java | 12 +++++++++
.../jms/integration/FileRouteJmsPreMoveIT.java | 12 +++++++++
.../jms/integration/FileRouteToJmsToFileIT.java | 12 +++++++++
.../integration/issues/JmsFilenameHeaderIT.java | 13 ++++++++++
.../jms/issues/JmsBeanMethodHeaderTest.java | 12 +++++++++
.../ROOT/pages/camel-4x-upgrade-guide-4_9.adoc | 4 +++
.../endpoint/dsl/AMQPEndpointBuilderFactory.java | 2 +-
.../dsl/ActiveMQ6EndpointBuilderFactory.java | 2 +-
.../dsl/ActiveMQEndpointBuilderFactory.java | 2 +-
.../endpoint/dsl/JmsEndpointBuilderFactory.java | 2 +-
22 files changed, 128 insertions(+), 32 deletions(-)
diff --git
a/components/camel-activemq/src/generated/resources/META-INF/org/apache/camel/component/activemq/activemq.json
b/components/camel-activemq/src/generated/resources/META-INF/org/apache/camel/component/activemq/activemq.json
index a62c078901f..10114953c3e 100644
---
a/components/camel-activemq/src/generated/resources/META-INF/org/apache/camel/component/activemq/activemq.json
+++
b/components/camel-activemq/src/generated/resources/META-INF/org/apache/camel/component/activemq/activemq.json
@@ -154,7 +154,7 @@
"JMSType": { "index": 14, "kind": "header", "displayName": "", "group":
"common", "label": "", "required": false, "javaType": "String", "deprecated":
false, "deprecationNote": "", "autowired": false, "secret": false,
"description": "The JMS type.", "constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_HEADER_TYPE" },
"JMSXUserID": { "index": 15, "kind": "header", "displayName": "", "group":
"common", "label": "", "required": false, "javaType": "String", "deprecated":
false, "deprecationNote": "", "autowired": false, "secret": false,
"description": "The XUser id.", "constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_HEADER_XUSER_ID" },
"CamelJmsMessageType": { "index": 16, "kind": "header", "displayName": "",
"group": "common", "label": "", "required": false, "javaType":
"org.apache.camel.component.jms.JmsMessageType", "enum": [ "Bytes", "Map",
"Object", "Stream", "Text", "Blob" ], "deprecated": false, "deprecationNote":
"", "autowired": false, "secret": false, "description": "The message type.",
"constantName": "org.apache.camel.component.jms.JmsConstants#JMS_MESSAGE_TYPE"
},
- "CamelJmsRequestTimeout": { "index": 17, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"long", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "defaultValue": "20_000", "description": "The timeout for
waiting for a reply when using the InOut Exchange Pattern (in milliseconds).",
"constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT" }
+ "CamelJmsRequestTimeout": { "index": 17, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"long", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "defaultValue": "20000", "description": "The timeout for
waiting for a reply when using the InOut Exchange Pattern (in milliseconds).",
"constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT" }
},
"properties": {
"destinationType": { "index": 0, "kind": "path", "displayName":
"Destination Type", "group": "common", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "enum": [ "queue", "topic",
"temp-queue", "temp-topic" ], "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "queue", "description": "The kind of
destination to use" },
diff --git
a/components/camel-activemq6/src/generated/resources/META-INF/org/apache/camel/component/activemq6/activemq6.json
b/components/camel-activemq6/src/generated/resources/META-INF/org/apache/camel/component/activemq6/activemq6.json
index 46a2bc092fb..97cd983f182 100644
---
a/components/camel-activemq6/src/generated/resources/META-INF/org/apache/camel/component/activemq6/activemq6.json
+++
b/components/camel-activemq6/src/generated/resources/META-INF/org/apache/camel/component/activemq6/activemq6.json
@@ -154,7 +154,7 @@
"JMSType": { "index": 14, "kind": "header", "displayName": "", "group":
"common", "label": "", "required": false, "javaType": "String", "deprecated":
false, "deprecationNote": "", "autowired": false, "secret": false,
"description": "The JMS type.", "constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_HEADER_TYPE" },
"JMSXUserID": { "index": 15, "kind": "header", "displayName": "", "group":
"common", "label": "", "required": false, "javaType": "String", "deprecated":
false, "deprecationNote": "", "autowired": false, "secret": false,
"description": "The XUser id.", "constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_HEADER_XUSER_ID" },
"CamelJmsMessageType": { "index": 16, "kind": "header", "displayName": "",
"group": "common", "label": "", "required": false, "javaType":
"org.apache.camel.component.jms.JmsMessageType", "enum": [ "Bytes", "Map",
"Object", "Stream", "Text", "Blob" ], "deprecated": false, "deprecationNote":
"", "autowired": false, "secret": false, "description": "The message type.",
"constantName": "org.apache.camel.component.jms.JmsConstants#JMS_MESSAGE_TYPE"
},
- "CamelJmsRequestTimeout": { "index": 17, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"long", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "defaultValue": "20_000", "description": "The timeout for
waiting for a reply when using the InOut Exchange Pattern (in milliseconds).",
"constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT" }
+ "CamelJmsRequestTimeout": { "index": 17, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"long", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "defaultValue": "20000", "description": "The timeout for
waiting for a reply when using the InOut Exchange Pattern (in milliseconds).",
"constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT" }
},
"properties": {
"destinationType": { "index": 0, "kind": "path", "displayName":
"Destination Type", "group": "common", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "enum": [ "queue", "topic",
"temp-queue", "temp-topic" ], "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "queue", "description": "The kind of
destination to use" },
diff --git
a/components/camel-amqp/src/generated/resources/META-INF/org/apache/camel/component/amqp/amqp.json
b/components/camel-amqp/src/generated/resources/META-INF/org/apache/camel/component/amqp/amqp.json
index f393203954e..e6b36534203 100644
---
a/components/camel-amqp/src/generated/resources/META-INF/org/apache/camel/component/amqp/amqp.json
+++
b/components/camel-amqp/src/generated/resources/META-INF/org/apache/camel/component/amqp/amqp.json
@@ -150,7 +150,7 @@
"JMSType": { "index": 14, "kind": "header", "displayName": "", "group":
"common", "label": "", "required": false, "javaType": "String", "deprecated":
false, "deprecationNote": "", "autowired": false, "secret": false,
"description": "The JMS type.", "constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_HEADER_TYPE" },
"JMSXUserID": { "index": 15, "kind": "header", "displayName": "", "group":
"common", "label": "", "required": false, "javaType": "String", "deprecated":
false, "deprecationNote": "", "autowired": false, "secret": false,
"description": "The XUser id.", "constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_HEADER_XUSER_ID" },
"CamelJmsMessageType": { "index": 16, "kind": "header", "displayName": "",
"group": "common", "label": "", "required": false, "javaType":
"org.apache.camel.component.jms.JmsMessageType", "enum": [ "Bytes", "Map",
"Object", "Stream", "Text", "Blob" ], "deprecated": false, "deprecationNote":
"", "autowired": false, "secret": false, "description": "The message type.",
"constantName": "org.apache.camel.component.jms.JmsConstants#JMS_MESSAGE_TYPE"
},
- "CamelJmsRequestTimeout": { "index": 17, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"long", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "defaultValue": "20_000", "description": "The timeout for
waiting for a reply when using the InOut Exchange Pattern (in milliseconds).",
"constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT" }
+ "CamelJmsRequestTimeout": { "index": 17, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"long", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "defaultValue": "20000", "description": "The timeout for
waiting for a reply when using the InOut Exchange Pattern (in milliseconds).",
"constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT" }
},
"properties": {
"destinationType": { "index": 0, "kind": "path", "displayName":
"Destination Type", "group": "common", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "enum": [ "queue", "topic",
"temp-queue", "temp-topic" ], "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "queue", "description": "The kind of
destination to use" },
diff --git
a/components/camel-jms/src/generated/resources/META-INF/org/apache/camel/component/jms/jms.json
b/components/camel-jms/src/generated/resources/META-INF/org/apache/camel/component/jms/jms.json
index fe91a069ba6..52b5cb0913c 100644
---
a/components/camel-jms/src/generated/resources/META-INF/org/apache/camel/component/jms/jms.json
+++
b/components/camel-jms/src/generated/resources/META-INF/org/apache/camel/component/jms/jms.json
@@ -149,7 +149,7 @@
"JMSType": { "index": 14, "kind": "header", "displayName": "", "group":
"common", "label": "", "required": false, "javaType": "String", "deprecated":
false, "deprecationNote": "", "autowired": false, "secret": false,
"description": "The JMS type.", "constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_HEADER_TYPE" },
"JMSXUserID": { "index": 15, "kind": "header", "displayName": "", "group":
"common", "label": "", "required": false, "javaType": "String", "deprecated":
false, "deprecationNote": "", "autowired": false, "secret": false,
"description": "The XUser id.", "constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_HEADER_XUSER_ID" },
"CamelJmsMessageType": { "index": 16, "kind": "header", "displayName": "",
"group": "common", "label": "", "required": false, "javaType":
"org.apache.camel.component.jms.JmsMessageType", "enum": [ "Bytes", "Map",
"Object", "Stream", "Text", "Blob" ], "deprecated": false, "deprecationNote":
"", "autowired": false, "secret": false, "description": "The message type.",
"constantName": "org.apache.camel.component.jms.JmsConstants#JMS_MESSAGE_TYPE"
},
- "CamelJmsRequestTimeout": { "index": 17, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"long", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "defaultValue": "20_000", "description": "The timeout for
waiting for a reply when using the InOut Exchange Pattern (in milliseconds).",
"constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT" }
+ "CamelJmsRequestTimeout": { "index": 17, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"long", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "defaultValue": "20000", "description": "The timeout for
waiting for a reply when using the InOut Exchange Pattern (in milliseconds).",
"constantName":
"org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT" }
},
"properties": {
"destinationType": { "index": 0, "kind": "path", "displayName":
"Destination Type", "group": "common", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "enum": [ "queue", "topic",
"temp-queue", "temp-topic" ], "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "queue", "description": "The kind of
destination to use" },
diff --git a/components/camel-jms/src/main/docs/jms-component.adoc
b/components/camel-jms/src/main/docs/jms-component.adoc
index 9d2e5b2563d..cf46194f4ee 100644
--- a/components/camel-jms/src/main/docs/jms-component.adoc
+++ b/components/camel-jms/src/main/docs/jms-component.adoc
@@ -164,13 +164,6 @@ valid Java identifiers. One benefit of doing this is that
you can then
use your headers inside a JMS Selector (whose SQL92 syntax mandates Java
identifier syntax for headers).
-A simple strategy for mapping header names is used by default. The
-strategy is to replace any dots and hyphens in the header name as shown
-below and to reverse the replacement when the header name is restored
-from a JMS message sent over the wire. What does this mean? No more
-losing method names to invoke on a bean component, no more losing the
-filename header for the File Component, and so on.
-
The current header name strategy for accepting header names in Camel is
as follows:
@@ -179,8 +172,27 @@ Camel consume the message
* Hyphen is replaced by `\_HYPHEN_` and the replacement is reversed when
Camel consumes the message
-You can configure many different properties on the JMS endpoint, which
-map to properties on the `JMSConfiguration` object.
+
+Camel comes with two implementations of `HeaderFilterStrategy`:
+
+- `org.apache.camel.component.jms.ClassicJmsHeaderFilterStrategy` - classic
strategy used until Camel 4.8.
+- `org.apache.camel.component.jms.JmsHeaderFilterStrategy` - newer default
strategy from Camel 4.9 onwards.
+
+==== ClassicJmsHeaderFilterStrategy
+
+A classic strategy for mapping header names is used in Camel 4.8 or older.
+
+This strategy also includes Camel internal headers such as `CamelFileName` and
`CamelBeanMethodName`
+which means that you can send Camel messages over JMS to another Camel
instance and preserve
+this information. However, this also means that JMS messages contains
properties with `Camel...` keys.
+This is not desirable always, and therefore we changed default from Camel 4.9
onwards.
+
+NOTE: You can always configure a custom `HeaderFilterStrategy` to remove all
`Camel...` headers in Camel 4.8 or older.
+
+==== JmsHeaderFilterStrategy
+
+The new default strategy from Camel 4.9 onwards behaves similar to other
components, where `Camel...`
+headers are removed, and only allowing explicit end user headers.
[WARNING]
====
diff --git
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/ClassicJmsHeaderFilterStrategy.java
similarity index 79%
copy from
components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
copy to
components/camel-jms/src/main/java/org/apache/camel/component/jms/ClassicJmsHeaderFilterStrategy.java
index dd6ee5787ee..956213e80cc 100644
---
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
+++
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/ClassicJmsHeaderFilterStrategy.java
@@ -18,13 +18,17 @@ package org.apache.camel.component.jms;
import org.apache.camel.support.DefaultHeaderFilterStrategy;
-public class JmsHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
+/**
+ * The classic {@link org.apache.camel.spi.HeaderFilterStrategy} which
includes Camel specific headers with the JMS
+ * component. This strategy should only be used if you rely on this old
behavior.
+ */
+public class ClassicJmsHeaderFilterStrategy extends
DefaultHeaderFilterStrategy {
- public JmsHeaderFilterStrategy() {
+ public ClassicJmsHeaderFilterStrategy() {
this(false);
}
- public JmsHeaderFilterStrategy(boolean includeAllJMSXProperties) {
+ public ClassicJmsHeaderFilterStrategy(boolean includeAllJMSXProperties) {
if (!includeAllJMSXProperties) {
initialize();
}
diff --git
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConstants.java
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConstants.java
index e23b2af3575..b23adfdd3ad 100644
---
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConstants.java
+++
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConstants.java
@@ -59,12 +59,14 @@ public final class JmsConstants {
public static final String JMS_HEADER_XUSER_ID = "JMSXUserID";
@Metadata(description = "The message type.", javaType =
"org.apache.camel.component.jms.JmsMessageType")
public static final String JMS_MESSAGE_TYPE = "CamelJmsMessageType";
- public static final String JMS_DELIVERY_MODE = "CamelJmsDeliveryMode";
@Metadata(label = "producer",
description = "The timeout for waiting for a reply when using
the InOut Exchange Pattern (in milliseconds).",
- javaType = "long", defaultValue = "20_000")
+ javaType = "long", defaultValue = "20000")
public static final String JMS_REQUEST_TIMEOUT = "CamelJmsRequestTimeout";
+ // temporary header for delivery mode when preserver message qos is enabled
+ public static final String JMS_DELIVERY_MODE = "CamelJmsDeliveryMode";
+
private JmsConstants() {
// utility class
}
diff --git
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
index dd6ee5787ee..9937a1d8cee 100644
---
a/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
+++
b/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsHeaderFilterStrategy.java
@@ -25,6 +25,8 @@ public class JmsHeaderFilterStrategy extends
DefaultHeaderFilterStrategy {
}
public JmsHeaderFilterStrategy(boolean includeAllJMSXProperties) {
+
setOutFilterStartsWith(DefaultHeaderFilterStrategy.CAMEL_FILTER_STARTS_WITH);
+
setInFilterStartsWith(DefaultHeaderFilterStrategy.CAMEL_FILTER_STARTS_WITH);
if (!includeAllJMSXProperties) {
initialize();
}
diff --git
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
index 16cb37a344e..40c2cd90767 100644
---
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
+++
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsHeaderFilteringTest.java
@@ -61,8 +61,8 @@ public class JmsHeaderFilteringTest extends AbstractJMSTest {
errors.expectedMessageCount(0);
template.send(testQueueEndpointA, ExchangePattern.InOnly, exchange -> {
- exchange.getIn().setHeader("org.apache.camel.jms", 10000);
- exchange.getIn().setHeader("org.apache.camel.test.jms", 20000);
+ exchange.getIn().setHeader("org.foo.jms", 10000);
+ exchange.getIn().setHeader("org.foo.test.jms", 20000);
exchange.getIn().setHeader("testheader", 1020);
exchange.getIn().setHeader("anotherheader", 1030);
exchange.getIn().setHeader("JMSXAppID", "myApp");
@@ -132,10 +132,10 @@ public class JmsHeaderFilteringTest extends
AbstractJMSTest {
assertNull(message.getJmsMessage().getObjectProperty("anotherheader"));
// notice dots are replaced by '_DOT_' when it is copied to the
jms message properties
- assertEquals(10000,
message.getJmsMessage().getObjectProperty("org_DOT_apache_DOT_camel_DOT_jms"));
+ assertEquals(10000,
message.getJmsMessage().getObjectProperty("org_DOT_foo_DOT_jms"));
// like testheader, org.apache.camel.test.jms will be filtered by
the "in" filter
- assertEquals(20000,
message.getJmsMessage().getObjectProperty("org_DOT_apache_DOT_camel_DOT_test_DOT_jms"));
+ assertEquals(20000,
message.getJmsMessage().getObjectProperty("org_DOT_foo_DOT_test_DOT_jms"));
// should be filtered by default
assertNull(message.getJmsMessage().getStringProperty("JMSXAppID"));
@@ -157,10 +157,10 @@ public class JmsHeaderFilteringTest extends
AbstractJMSTest {
assertNull(exchange.getIn().getHeader("anotherheader"));
// it should not been filtered out
- assertEquals(10000,
exchange.getIn().getHeader("org.apache.camel.jms"));
+ assertEquals(10000, exchange.getIn().getHeader("org.foo.jms"));
// filtered out by "in" filter
-
assertNull(exchange.getIn().getHeader("org_DOT_apache_DOT_camel_DOT_test_DOT_jms"));
+
assertNull(exchange.getIn().getHeader("org_DOT_foo_DOT_test_DOT_jms"));
// should be filtered by default
assertNull(exchange.getIn().getHeader("JMSXAppID"));
diff --git
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithDefaultKeyFormatStrategyTest.java
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithDefaultKeyFormatStrategyTest.java
index 4366ed4e941..5b26c93bf06 100644
---
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithDefaultKeyFormatStrategyTest.java
+++
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteWithDefaultKeyFormatStrategyTest.java
@@ -84,12 +84,12 @@ public class JmsRouteWithDefaultKeyFormatStrategyTest
extends AbstractJMSTest {
mock.expectedBodiesReceived("Hello World");
mock.expectedHeaderReceived("foo", "cheese");
mock.expectedHeaderReceived("Content-Type", "text/plain");
- mock.expectedHeaderReceived("org.apache.camel.MyKey", "foo");
+ mock.expectedHeaderReceived("org.foo.MyKey", "foo");
Map<String, Object> headers = new HashMap<>();
headers.put("foo", "cheese");
headers.put("Content-Type", "text/plain");
- headers.put("org.apache.camel.MyKey", "foo");
+ headers.put("org.foo.MyKey", "foo");
template.sendBodyAndHeaders("direct:start", "Hello World", headers);
diff --git
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeNoStreamCachingTest.java
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeNoStreamCachingTest.java
index 70f29f21f2a..d404cbd4f1b 100644
---
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeNoStreamCachingTest.java
+++
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeNoStreamCachingTest.java
@@ -40,6 +40,7 @@ import org.junit.jupiter.params.provider.ValueSource;
import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
import static org.apache.camel.test.junit5.TestSupport.deleteDirectory;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
@ResourceLock("src/test/data")
public class JmsStreamMessageTypeNoStreamCachingTest extends AbstractJMSTest {
@@ -91,15 +92,20 @@ public class JmsStreamMessageTypeNoStreamCachingTest
extends AbstractJMSTest {
Object body =
getMockEndpoint("mock:resultJmsStreamMessageTypeNoStreamCachingTest").getReceivedExchanges().get(0)
.getIn().getBody();
StreamMessageInputStream is =
assertIsInstanceOf(StreamMessageInputStream.class, body);
+ assertNotNull(is);
// no more bytes should be available on the input stream
assertEquals(0, is.available());
// assert on the content of input versus output file
String srcContent =
context.getTypeConverter().mandatoryConvertTo(String.class, baseFile);
+
+ String targetName
+ = FileUtil.stripPath(new
File("target/stream/JmsStreamMessageTypeNoStreamCachingTest/out/").list()[0]);
+
String dstContent
= context.getTypeConverter().mandatoryConvertTo(String.class,
- new
File("target/stream/JmsStreamMessageTypeNoStreamCachingTest/out/", filename));
+ new
File("target/stream/JmsStreamMessageTypeNoStreamCachingTest/out/", targetName));
assertEquals(srcContent, dstContent, "both the source and destination
files should have the same content");
}
diff --git
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
index cd0cab83610..9832d207005 100644
---
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
+++
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
@@ -40,6 +40,7 @@ import org.junit.jupiter.params.provider.ValueSource;
import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
import static org.apache.camel.test.junit5.TestSupport.deleteDirectory;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
/**
* This test cannot run in parallel: it reuses the same path for different
test iterations
@@ -88,12 +89,16 @@ public class JmsStreamMessageTypeTest extends
AbstractJMSTest {
Object body =
getMockEndpoint("mock:result").getReceivedExchanges().get(0).getIn().getBody();
InputStream is = assertIsInstanceOf(InputStream.class, body);
+ assertNotNull(is);
// assert on the content of input versus output file
String srcContent =
context.getTypeConverter().mandatoryConvertTo(String.class, new
File("src/test/data/", filename));
+
+ String targetName = FileUtil.stripPath(new
File("target/stream/JmsStreamMessageTypeTest/out/").list()[0]);
+
String dstContent
= context.getTypeConverter().mandatoryConvertTo(String.class,
- new
File("target/stream/JmsStreamMessageTypeTest/out/", filename));
+ new
File("target/stream/JmsStreamMessageTypeTest/out/", targetName));
assertEquals(srcContent, dstContent, "both the source and destination
files should have the same content");
}
diff --git
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteJmsKeepLastModifiedIT.java
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteJmsKeepLastModifiedIT.java
index 068e5b77055..babd844399e 100644
---
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteJmsKeepLastModifiedIT.java
+++
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteJmsKeepLastModifiedIT.java
@@ -19,12 +19,16 @@ package org.apache.camel.component.jms.integration;
import java.io.File;
import java.util.concurrent.TimeUnit;
+import jakarta.jms.ConnectionFactory;
+
import org.apache.camel.CamelContext;
import org.apache.camel.ConsumerTemplate;
import org.apache.camel.Exchange;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.AbstractJMSTest;
+import org.apache.camel.component.jms.ClassicJmsHeaderFilterStrategy;
+import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.infra.core.CamelContextExtension;
import org.apache.camel.test.infra.core.DefaultCamelContextExtension;
@@ -93,6 +97,14 @@ public class FileRouteJmsKeepLastModifiedIT extends
AbstractJMSTest {
return camelContextExtension;
}
+ @Override
+ protected JmsComponent buildComponent(ConnectionFactory connectionFactory)
{
+ JmsComponent amq = super.buildComponent(connectionFactory);
+ // need to use the classic header filter
+ amq.setHeaderFilterStrategy(new ClassicJmsHeaderFilterStrategy());
+ return amq;
+ }
+
@BeforeEach
void setUpRequirements() {
context = camelContextExtension.getContext();
diff --git
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteJmsPreMoveIT.java
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteJmsPreMoveIT.java
index bf811abe868..64455cf9aef 100644
---
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteJmsPreMoveIT.java
+++
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteJmsPreMoveIT.java
@@ -16,12 +16,16 @@
*/
package org.apache.camel.component.jms.integration;
+import jakarta.jms.ConnectionFactory;
+
import org.apache.camel.CamelContext;
import org.apache.camel.ConsumerTemplate;
import org.apache.camel.Exchange;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.AbstractJMSTest;
+import org.apache.camel.component.jms.ClassicJmsHeaderFilterStrategy;
+import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.infra.core.CamelContextExtension;
import org.apache.camel.test.infra.core.DefaultCamelContextExtension;
@@ -87,6 +91,14 @@ public class FileRouteJmsPreMoveIT extends AbstractJMSTest {
return camelContextExtension;
}
+ @Override
+ protected JmsComponent buildComponent(ConnectionFactory connectionFactory)
{
+ JmsComponent amq = super.buildComponent(connectionFactory);
+ // need to use the classic header filter
+ amq.setHeaderFilterStrategy(new ClassicJmsHeaderFilterStrategy());
+ return amq;
+ }
+
@BeforeEach
void setUpRequirements() {
context = camelContextExtension.getContext();
diff --git
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteToJmsToFileIT.java
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteToJmsToFileIT.java
index 9edb311faa1..a3dc32bb594 100644
---
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteToJmsToFileIT.java
+++
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/FileRouteToJmsToFileIT.java
@@ -18,6 +18,8 @@ package org.apache.camel.component.jms.integration;
import java.io.File;
+import jakarta.jms.ConnectionFactory;
+
import org.apache.camel.CamelContext;
import org.apache.camel.ConsumerTemplate;
import org.apache.camel.Exchange;
@@ -25,6 +27,8 @@ import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.NotifyBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.AbstractJMSTest;
+import org.apache.camel.component.jms.ClassicJmsHeaderFilterStrategy;
+import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.infra.core.CamelContextExtension;
import org.apache.camel.test.infra.core.DefaultCamelContextExtension;
@@ -88,6 +92,14 @@ public class FileRouteToJmsToFileIT extends AbstractJMSTest {
return camelContextExtension;
}
+ @Override
+ protected JmsComponent buildComponent(ConnectionFactory connectionFactory)
{
+ JmsComponent amq = super.buildComponent(connectionFactory);
+ // need to use the classic header filter
+ amq.setHeaderFilterStrategy(new ClassicJmsHeaderFilterStrategy());
+ return amq;
+ }
+
@BeforeEach
void setUpRequirements() {
context = camelContextExtension.getContext();
diff --git
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/issues/JmsFilenameHeaderIT.java
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/issues/JmsFilenameHeaderIT.java
index 9cf60eeb87c..09db709ee80 100644
---
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/issues/JmsFilenameHeaderIT.java
+++
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/integration/issues/JmsFilenameHeaderIT.java
@@ -18,12 +18,16 @@ package org.apache.camel.component.jms.integration.issues;
import java.io.File;
+import jakarta.jms.ConnectionFactory;
+
import org.apache.camel.CamelContext;
import org.apache.camel.ConsumerTemplate;
import org.apache.camel.Exchange;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.AbstractJMSTest;
+import org.apache.camel.component.jms.ClassicJmsHeaderFilterStrategy;
+import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.infra.core.CamelContextExtension;
import org.apache.camel.test.infra.core.DefaultCamelContextExtension;
@@ -88,4 +92,13 @@ public class JmsFilenameHeaderIT extends AbstractJMSTest {
template = camelContextExtension.getProducerTemplate();
consumer = camelContextExtension.getConsumerTemplate();
}
+
+ @Override
+ protected JmsComponent buildComponent(ConnectionFactory connectionFactory)
{
+ JmsComponent amq = super.buildComponent(connectionFactory);
+ // need to use the classic header filter
+ amq.setHeaderFilterStrategy(new ClassicJmsHeaderFilterStrategy());
+ return amq;
+ }
+
}
diff --git
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsBeanMethodHeaderTest.java
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsBeanMethodHeaderTest.java
index 19e62242015..26c4d821cca 100644
---
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsBeanMethodHeaderTest.java
+++
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsBeanMethodHeaderTest.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.component.jms.issues;
+import jakarta.jms.ConnectionFactory;
+
import org.apache.camel.BindToRegistry;
import org.apache.camel.Body;
import org.apache.camel.CamelContext;
@@ -25,6 +27,8 @@ 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.ClassicJmsHeaderFilterStrategy;
+import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.infra.core.CamelContextExtension;
import org.apache.camel.test.infra.core.DefaultCamelContextExtension;
@@ -131,6 +135,14 @@ public class JmsBeanMethodHeaderTest extends
AbstractJMSTest {
return camelContextExtension;
}
+ @Override
+ protected JmsComponent buildComponent(ConnectionFactory connectionFactory)
{
+ JmsComponent amq = super.buildComponent(connectionFactory);
+ // need to use the classic header filter
+ amq.setHeaderFilterStrategy(new ClassicJmsHeaderFilterStrategy());
+ return amq;
+ }
+
@BeforeEach
void setUpRequirements() {
context = camelContextExtension.getContext();
diff --git
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_9.adoc
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_9.adoc
index 0676fd139c7..867639fe171 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_9.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_9.adoc
@@ -13,6 +13,10 @@ to an `Integer` value.
=== camel-jms
+The camel-jms component has changed its default `HeaderFilterStrategy` to also
remove any `Camel...` headers,
+to act similar to other Camel components. If the old classic behavior is
needed then you can configure the `JmsComponent` to use
`org.apache.camel.component.jms.ClassicJmsHeaderFilterStrategy`
+as header filter strategy which is the old implementation.
+
Added `int limit` as parameter to the `browse` method in
`org.apache.camel.component.jms.QueueBrowseStrategy`.
=== camel-hashicorp-vault properties function
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AMQPEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AMQPEndpointBuilderFactory.java
index 31d073bddaa..b3e1965d54d 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AMQPEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AMQPEndpointBuilderFactory.java
@@ -7275,7 +7275,7 @@ public interface AMQPEndpointBuilderFactory {
*
* The option is a: {@code long} type.
*
- * Default: 20_000
+ * Default: 20000
* Group: producer
*
* @return the name of the header {@code JmsRequestTimeout}.
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ActiveMQ6EndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ActiveMQ6EndpointBuilderFactory.java
index d4868580ec6..7176016f1fe 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ActiveMQ6EndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ActiveMQ6EndpointBuilderFactory.java
@@ -7324,7 +7324,7 @@ public interface ActiveMQ6EndpointBuilderFactory {
*
* The option is a: {@code long} type.
*
- * Default: 20_000
+ * Default: 20000
* Group: producer
*
* @return the name of the header {@code JmsRequestTimeout}.
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ActiveMQEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ActiveMQEndpointBuilderFactory.java
index 962768c93e3..6dbda20c917 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ActiveMQEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ActiveMQEndpointBuilderFactory.java
@@ -7324,7 +7324,7 @@ public interface ActiveMQEndpointBuilderFactory {
*
* The option is a: {@code long} type.
*
- * Default: 20_000
+ * Default: 20000
* Group: producer
*
* @return the name of the header {@code JmsRequestTimeout}.
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JmsEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JmsEndpointBuilderFactory.java
index 00796321f34..810e0d871c9 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JmsEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JmsEndpointBuilderFactory.java
@@ -7275,7 +7275,7 @@ public interface JmsEndpointBuilderFactory {
*
* The option is a: {@code long} type.
*
- * Default: 20_000
+ * Default: 20000
* Group: producer
*
* @return the name of the header {@code JmsRequestTimeout}.