This is an automated email from the ASF dual-hosted git repository.
oscerd pushed a commit to branch camel-4.14.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.14.x by this push:
new c6fc9bb21670 CAMEL-23630: add HeaderFilterStrategy to camel-dapr
(#23886) (#23905)
c6fc9bb21670 is described below
commit c6fc9bb21670e5c65ea14df0f3f29baef78c2028
Author: Andrea Cosentino <[email protected]>
AuthorDate: Wed Jun 10 13:49:39 2026 +0200
CAMEL-23630: add HeaderFilterStrategy to camel-dapr (#23886) (#23905)
Adds a DaprHeaderFilterStrategy (extending DefaultHeaderFilterStrategy)
exposed via
DaprComponent / DaprEndpoint as the standard headerFilterStrategy option,
aligning
camel-dapr with the rest of the messaging-component family (camel-iggy,
camel-kafka,
camel-jms).
The dapr-pubsub consumer no longer copies the inbound CloudEvent's
pubsubName / topic
into the CamelDaprPubSubName / CamelDaprTopic headers. Those two constants
are
producer-direction routing headers that DaprConfigurationOptionsProxy reads
back and
prefers over the endpoint-configured destination, so a
from(dapr-pubsub).to(dapr-pubsub)
route incorrectly carried the inbound destination into the producer hop.
The remaining
CloudEvent metadata headers are unchanged. Documented in the 4.21 upgrade
guide.
(cherry picked from commit 72d13bd13fb5960ea1b367a2e379f017c1720c5c)
---
.../org/apache/camel/catalog/components/dapr.json | 6 +-
.../component/dapr/DaprComponentConfigurer.java | 6 ++
.../component/dapr/DaprEndpointConfigurer.java | 6 ++
.../component/dapr/DaprEndpointUriFactory.java | 3 +-
.../org/apache/camel/component/dapr/dapr.json | 6 +-
.../apache/camel/component/dapr/DaprComponent.java | 18 +++-
.../apache/camel/component/dapr/DaprEndpoint.java | 23 +++++-
.../component/dapr/DaprHeaderFilterStrategy.java | 31 +++++++
.../dapr/consumer/DaprPubSubConsumer.java | 2 -
.../dapr/consumer/DaprPubSubConsumerTest.java | 7 +-
.../component/dsl/DaprComponentBuilderFactory.java | 19 +++++
.../endpoint/dsl/DaprEndpointBuilderFactory.java | 96 ++++++++++++++++++++++
12 files changed, 212 insertions(+), 11 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/dapr.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/dapr.json
index ba2a83227b05..f1bdff987858 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/dapr.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/dapr.json
@@ -46,7 +46,8 @@
"stateOperation": { "index": 19, "kind": "property", "displayName": "State
Operation", "group": "producer", "label": "producer", "required": false,
"type": "enum", "javaType": "org.apache.camel.component.dapr.StateOperation",
"enum": [ "save", "saveBulk", "get", "getBulk", "delete", "executeTransaction"
], "deprecated": false, "autowired": false, "secret": false, "defaultValue":
"get", "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField": "c
[...]
"stateStore": { "index": 20, "kind": "property", "displayName": "State
Store", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField":
"configuration", "description": "The name of the Dapr state store to interact
with, defined in statestore.yaml config" },
"verb": { "index": 21, "kind": "property", "displayName": "Verb", "group":
"producer", "label": "producer", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "POST", "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField":
"configuration", "description": "The HTTP verb to use for invoking the method"
},
- "autowiredEnabled": { "index": 22, "kind": "property", "displayName":
"Autowired Enabled", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Whether autowiring is enabled. This is used for automatic autowiring options
(the option must be marked as autowired) by looking up in the registry to find
if there is a single instance of matching [...]
+ "autowiredEnabled": { "index": 22, "kind": "property", "displayName":
"Autowired Enabled", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Whether autowiring is enabled. This is used for automatic autowiring options
(the option must be marked as autowired) by looking up in the registry to find
if there is a single instance of matching [...]
+ "headerFilterStrategy": { "index": 23, "kind": "property", "displayName":
"Header Filter Strategy", "group": "advanced", "label": "advanced", "required":
false, "type": "object", "javaType":
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired":
false, "secret": false, "description": "To use a custom HeaderFilterStrategy to
filter header to and from Camel message." }
},
"headers": {
"CamelDaprServiceToInvoke": { "index": 0, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"String", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "description": "Target service to invoke. Can be a Dapr App
ID, a named HTTPEndpoint, or a FQDN\/public URL", "constantName":
"org.apache.camel.component.dapr.DaprConstants#SERVICE_TO_INVOKE" },
@@ -109,6 +110,7 @@
"stateOperation": { "index": 20, "kind": "parameter", "displayName":
"State Operation", "group": "producer", "label": "producer", "required": false,
"type": "enum", "javaType": "org.apache.camel.component.dapr.StateOperation",
"enum": [ "save", "saveBulk", "get", "getBulk", "delete", "executeTransaction"
], "deprecated": false, "autowired": false, "secret": false, "defaultValue":
"get", "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField": "
[...]
"stateStore": { "index": 21, "kind": "parameter", "displayName": "State
Store", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField":
"configuration", "description": "The name of the Dapr state store to interact
with, defined in statestore.yaml config" },
"verb": { "index": 22, "kind": "parameter", "displayName": "Verb",
"group": "producer", "label": "producer", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "POST", "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField":
"configuration", "description": "The HTTP verb to use for invoking the method"
},
- "lazyStartProducer": { "index": 23, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produ [...]
+ "lazyStartProducer": { "index": 23, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produ [...]
+ "headerFilterStrategy": { "index": 24, "kind": "parameter", "displayName":
"Header Filter Strategy", "group": "advanced", "label": "advanced", "required":
false, "type": "object", "javaType":
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired":
false, "secret": false, "description": "To use a custom HeaderFilterStrategy to
filter header to and from Camel message." }
}
}
diff --git
a/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprComponentConfigurer.java
b/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprComponentConfigurer.java
index 647d63e4261e..2b276c2bb38b 100644
---
a/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprComponentConfigurer.java
+++
b/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprComponentConfigurer.java
@@ -49,6 +49,8 @@ public class DaprComponentConfigurer extends
PropertyConfigurerSupport implement
case "contentType":
getOrCreateConfiguration(target).setContentType(property(camelContext,
java.lang.String.class, value)); return true;
case "etag":
case "eTag":
getOrCreateConfiguration(target).setETag(property(camelContext,
java.lang.String.class, value)); return true;
+ case "headerfilterstrategy":
+ case "headerFilterStrategy":
target.setHeaderFilterStrategy(property(camelContext,
org.apache.camel.spi.HeaderFilterStrategy.class, value)); return true;
case "httpextension":
case "httpExtension":
getOrCreateConfiguration(target).setHttpExtension(property(camelContext,
io.dapr.client.domain.HttpExtension.class, value)); return true;
case "key":
getOrCreateConfiguration(target).setKey(property(camelContext,
java.lang.String.class, value)); return true;
@@ -101,6 +103,8 @@ public class DaprComponentConfigurer extends
PropertyConfigurerSupport implement
case "contentType": return java.lang.String.class;
case "etag":
case "eTag": return java.lang.String.class;
+ case "headerfilterstrategy":
+ case "headerFilterStrategy": return
org.apache.camel.spi.HeaderFilterStrategy.class;
case "httpextension":
case "httpExtension": return io.dapr.client.domain.HttpExtension.class;
case "key": return java.lang.String.class;
@@ -149,6 +153,8 @@ public class DaprComponentConfigurer extends
PropertyConfigurerSupport implement
case "contentType": return
getOrCreateConfiguration(target).getContentType();
case "etag":
case "eTag": return getOrCreateConfiguration(target).getETag();
+ case "headerfilterstrategy":
+ case "headerFilterStrategy": return target.getHeaderFilterStrategy();
case "httpextension":
case "httpExtension": return
getOrCreateConfiguration(target).getHttpExtension();
case "key": return getOrCreateConfiguration(target).getKey();
diff --git
a/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprEndpointConfigurer.java
b/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprEndpointConfigurer.java
index 4e685ce93968..190c86a96d46 100644
---
a/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprEndpointConfigurer.java
+++
b/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprEndpointConfigurer.java
@@ -43,6 +43,8 @@ public class DaprEndpointConfigurer extends
PropertyConfigurerSupport implements
case "exceptionHandler":
target.setExceptionHandler(property(camelContext,
org.apache.camel.spi.ExceptionHandler.class, value)); return true;
case "exchangepattern":
case "exchangePattern":
target.setExchangePattern(property(camelContext,
org.apache.camel.ExchangePattern.class, value)); return true;
+ case "headerfilterstrategy":
+ case "headerFilterStrategy":
target.setHeaderFilterStrategy(property(camelContext,
org.apache.camel.spi.HeaderFilterStrategy.class, value)); return true;
case "httpextension":
case "httpExtension":
target.getConfiguration().setHttpExtension(property(camelContext,
io.dapr.client.domain.HttpExtension.class, value)); return true;
case "key": target.getConfiguration().setKey(property(camelContext,
java.lang.String.class, value)); return true;
@@ -96,6 +98,8 @@ public class DaprEndpointConfigurer extends
PropertyConfigurerSupport implements
case "exceptionHandler": return
org.apache.camel.spi.ExceptionHandler.class;
case "exchangepattern":
case "exchangePattern": return org.apache.camel.ExchangePattern.class;
+ case "headerfilterstrategy":
+ case "headerFilterStrategy": return
org.apache.camel.spi.HeaderFilterStrategy.class;
case "httpextension":
case "httpExtension": return io.dapr.client.domain.HttpExtension.class;
case "key": return java.lang.String.class;
@@ -145,6 +149,8 @@ public class DaprEndpointConfigurer extends
PropertyConfigurerSupport implements
case "exceptionHandler": return target.getExceptionHandler();
case "exchangepattern":
case "exchangePattern": return target.getExchangePattern();
+ case "headerfilterstrategy":
+ case "headerFilterStrategy": return target.getHeaderFilterStrategy();
case "httpextension":
case "httpExtension": return
target.getConfiguration().getHttpExtension();
case "key": return target.getConfiguration().getKey();
diff --git
a/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprEndpointUriFactory.java
b/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprEndpointUriFactory.java
index 4ec35a627a46..086ce4056bd2 100644
---
a/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprEndpointUriFactory.java
+++
b/components/camel-dapr/src/generated/java/org/apache/camel/component/dapr/DaprEndpointUriFactory.java
@@ -23,7 +23,7 @@ public class DaprEndpointUriFactory extends
org.apache.camel.support.component.E
private static final Set<String> SECRET_PROPERTY_NAMES;
private static final Set<String> MULTI_VALUE_PREFIXES;
static {
- Set<String> props = new HashSet<>(24);
+ Set<String> props = new HashSet<>(25);
props.add("bindingName");
props.add("bindingOperation");
props.add("bridgeErrorHandler");
@@ -35,6 +35,7 @@ public class DaprEndpointUriFactory extends
org.apache.camel.support.component.E
props.add("eTag");
props.add("exceptionHandler");
props.add("exchangePattern");
+ props.add("headerFilterStrategy");
props.add("httpExtension");
props.add("key");
props.add("lazyStartProducer");
diff --git
a/components/camel-dapr/src/generated/resources/META-INF/org/apache/camel/component/dapr/dapr.json
b/components/camel-dapr/src/generated/resources/META-INF/org/apache/camel/component/dapr/dapr.json
index ba2a83227b05..f1bdff987858 100644
---
a/components/camel-dapr/src/generated/resources/META-INF/org/apache/camel/component/dapr/dapr.json
+++
b/components/camel-dapr/src/generated/resources/META-INF/org/apache/camel/component/dapr/dapr.json
@@ -46,7 +46,8 @@
"stateOperation": { "index": 19, "kind": "property", "displayName": "State
Operation", "group": "producer", "label": "producer", "required": false,
"type": "enum", "javaType": "org.apache.camel.component.dapr.StateOperation",
"enum": [ "save", "saveBulk", "get", "getBulk", "delete", "executeTransaction"
], "deprecated": false, "autowired": false, "secret": false, "defaultValue":
"get", "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField": "c
[...]
"stateStore": { "index": 20, "kind": "property", "displayName": "State
Store", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField":
"configuration", "description": "The name of the Dapr state store to interact
with, defined in statestore.yaml config" },
"verb": { "index": 21, "kind": "property", "displayName": "Verb", "group":
"producer", "label": "producer", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "POST", "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField":
"configuration", "description": "The HTTP verb to use for invoking the method"
},
- "autowiredEnabled": { "index": 22, "kind": "property", "displayName":
"Autowired Enabled", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Whether autowiring is enabled. This is used for automatic autowiring options
(the option must be marked as autowired) by looking up in the registry to find
if there is a single instance of matching [...]
+ "autowiredEnabled": { "index": 22, "kind": "property", "displayName":
"Autowired Enabled", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description":
"Whether autowiring is enabled. This is used for automatic autowiring options
(the option must be marked as autowired) by looking up in the registry to find
if there is a single instance of matching [...]
+ "headerFilterStrategy": { "index": 23, "kind": "property", "displayName":
"Header Filter Strategy", "group": "advanced", "label": "advanced", "required":
false, "type": "object", "javaType":
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired":
false, "secret": false, "description": "To use a custom HeaderFilterStrategy to
filter header to and from Camel message." }
},
"headers": {
"CamelDaprServiceToInvoke": { "index": 0, "kind": "header", "displayName":
"", "group": "producer", "label": "producer", "required": false, "javaType":
"String", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "description": "Target service to invoke. Can be a Dapr App
ID, a named HTTPEndpoint, or a FQDN\/public URL", "constantName":
"org.apache.camel.component.dapr.DaprConstants#SERVICE_TO_INVOKE" },
@@ -109,6 +110,7 @@
"stateOperation": { "index": 20, "kind": "parameter", "displayName":
"State Operation", "group": "producer", "label": "producer", "required": false,
"type": "enum", "javaType": "org.apache.camel.component.dapr.StateOperation",
"enum": [ "save", "saveBulk", "get", "getBulk", "delete", "executeTransaction"
], "deprecated": false, "autowired": false, "secret": false, "defaultValue":
"get", "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField": "
[...]
"stateStore": { "index": 21, "kind": "parameter", "displayName": "State
Store", "group": "producer", "label": "producer", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField":
"configuration", "description": "The name of the Dapr state store to interact
with, defined in statestore.yaml config" },
"verb": { "index": 22, "kind": "parameter", "displayName": "Verb",
"group": "producer", "label": "producer", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "POST", "configurationClass":
"org.apache.camel.component.dapr.DaprConfiguration", "configurationField":
"configuration", "description": "The HTTP verb to use for invoking the method"
},
- "lazyStartProducer": { "index": 23, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produ [...]
+ "lazyStartProducer": { "index": 23, "kind": "parameter", "displayName":
"Lazy Start Producer", "group": "producer (advanced)", "label":
"producer,advanced", "required": false, "type": "boolean", "javaType":
"boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether the producer should be started
lazy (on the first message). By starting lazy you can use this to allow
CamelContext and routes to startup in situations where a produ [...]
+ "headerFilterStrategy": { "index": 24, "kind": "parameter", "displayName":
"Header Filter Strategy", "group": "advanced", "label": "advanced", "required":
false, "type": "object", "javaType":
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired":
false, "secret": false, "description": "To use a custom HeaderFilterStrategy to
filter header to and from Camel message." }
}
}
diff --git
a/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/DaprComponent.java
b/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/DaprComponent.java
index 81ee92d12815..bb75babcd452 100644
---
a/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/DaprComponent.java
+++
b/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/DaprComponent.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.dapr;
import java.util.Map;
import org.apache.camel.Endpoint;
+import org.apache.camel.spi.HeaderFilterStrategy;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.annotations.Component;
import org.apache.camel.support.DefaultComponent;
@@ -28,6 +29,9 @@ public class DaprComponent extends DefaultComponent {
@Metadata
private DaprConfiguration configuration = new DaprConfiguration();
+ @Metadata(label = "advanced",
+ description = "To use a custom HeaderFilterStrategy to filter
header to and from Camel message.")
+ private HeaderFilterStrategy headerFilterStrategy;
protected Endpoint createEndpoint(String uri, String remaining,
Map<String, Object> parameters) throws Exception {
if (remaining == null || remaining.isBlank()) {
@@ -37,7 +41,8 @@ public class DaprComponent extends DefaultComponent {
final DaprConfiguration config = this.configuration != null ?
this.configuration.copy() : new DaprConfiguration();
config.setOperation(DaprOperation.valueOf(remaining));
- Endpoint endpoint = new DaprEndpoint(uri, this, config);
+ DaprEndpoint endpoint = new DaprEndpoint(uri, this, config);
+ endpoint.setHeaderFilterStrategy(headerFilterStrategy);
setProperties(endpoint, parameters);
return endpoint;
@@ -53,4 +58,15 @@ public class DaprComponent extends DefaultComponent {
public void setConfiguration(DaprConfiguration configuration) {
this.configuration = configuration;
}
+
+ public HeaderFilterStrategy getHeaderFilterStrategy() {
+ return headerFilterStrategy;
+ }
+
+ /**
+ * To use a custom {@link org.apache.camel.spi.HeaderFilterStrategy} to
filter header to and from Camel message.
+ */
+ public void setHeaderFilterStrategy(HeaderFilterStrategy
headerFilterStrategy) {
+ this.headerFilterStrategy = headerFilterStrategy;
+ }
}
diff --git
a/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/DaprEndpoint.java
b/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/DaprEndpoint.java
index 493bf04f7662..8719b495eeab 100644
---
a/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/DaprEndpoint.java
+++
b/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/DaprEndpoint.java
@@ -24,6 +24,8 @@ import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.component.dapr.consumer.DaprConfigurationConsumer;
import org.apache.camel.component.dapr.consumer.DaprPubSubConsumer;
+import org.apache.camel.spi.HeaderFilterStrategy;
+import org.apache.camel.spi.HeaderFilterStrategyAware;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriParam;
import org.apache.camel.support.DefaultEndpoint;
@@ -33,10 +35,13 @@ import org.apache.camel.support.DefaultEndpoint;
*/
@UriEndpoint(firstVersion = "4.12.0", scheme = "dapr", title = "Dapr", syntax
= "dapr:operation",
category = { Category.CLOUD, Category.SAAS }, headersClass =
DaprConstants.class)
-public class DaprEndpoint extends DefaultEndpoint {
+public class DaprEndpoint extends DefaultEndpoint implements
HeaderFilterStrategyAware {
@UriParam
private DaprConfiguration configuration;
+ @UriParam(label = "advanced",
+ description = "To use a custom HeaderFilterStrategy to filter
header to and from Camel message.")
+ private HeaderFilterStrategy headerFilterStrategy;
private DaprClient client;
public DaprEndpoint(String uri, DaprComponent component, final
DaprConfiguration configuration) {
@@ -81,6 +86,22 @@ public class DaprEndpoint extends DefaultEndpoint {
this.configuration = config;
}
+ @Override
+ public HeaderFilterStrategy getHeaderFilterStrategy() {
+ if (headerFilterStrategy == null) {
+ headerFilterStrategy = new DaprHeaderFilterStrategy();
+ }
+ return headerFilterStrategy;
+ }
+
+ /**
+ * To use a custom {@link org.apache.camel.spi.HeaderFilterStrategy} to
filter header to and from Camel message.
+ */
+ @Override
+ public void setHeaderFilterStrategy(HeaderFilterStrategy
headerFilterStrategy) {
+ this.headerFilterStrategy = headerFilterStrategy;
+ }
+
/**
* The DaprClient
*/
diff --git
a/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/DaprHeaderFilterStrategy.java
b/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/DaprHeaderFilterStrategy.java
new file mode 100644
index 000000000000..0b3d3f5a8fc9
--- /dev/null
+++
b/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/DaprHeaderFilterStrategy.java
@@ -0,0 +1,31 @@
+/*
+ * 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.dapr;
+
+import org.apache.camel.support.DefaultHeaderFilterStrategy;
+
+/**
+ * Default header filter strategy for Dapr endpoints.
+ */
+public class DaprHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
+
+ public DaprHeaderFilterStrategy() {
+ setLowerCase(true);
+ setOutFilterStartsWith(CAMEL_FILTER_STARTS_WITH);
+ setInFilterStartsWith(CAMEL_FILTER_STARTS_WITH);
+ }
+}
diff --git
a/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/consumer/DaprPubSubConsumer.java
b/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/consumer/DaprPubSubConsumer.java
index 087e73f5d3a9..b156dd7f7015 100644
---
a/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/consumer/DaprPubSubConsumer.java
+++
b/components/camel-dapr/src/main/java/org/apache/camel/component/dapr/consumer/DaprPubSubConsumer.java
@@ -102,8 +102,6 @@ public class DaprPubSubConsumer extends DefaultConsumer {
message.setBody(cloudEvent.getData());
// set headers
- message.setHeader(DaprConstants.PUBSUB_NAME,
cloudEvent.getPubsubName());
- message.setHeader(DaprConstants.TOPIC, cloudEvent.getTopic());
message.setHeader(DaprConstants.ID, cloudEvent.getId());
message.setHeader(DaprConstants.SOURCE, cloudEvent.getSource());
message.setHeader(DaprConstants.TYPE, cloudEvent.getType());
diff --git
a/components/camel-dapr/src/test/java/org/apache/camel/component/dapr/consumer/DaprPubSubConsumerTest.java
b/components/camel-dapr/src/test/java/org/apache/camel/component/dapr/consumer/DaprPubSubConsumerTest.java
index 0a3cc65f1fac..8eded959c838 100644
---
a/components/camel-dapr/src/test/java/org/apache/camel/component/dapr/consumer/DaprPubSubConsumerTest.java
+++
b/components/camel-dapr/src/test/java/org/apache/camel/component/dapr/consumer/DaprPubSubConsumerTest.java
@@ -33,6 +33,7 @@ import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.component.dapr.DaprConfiguration;
import org.apache.camel.component.dapr.DaprConstants;
import org.apache.camel.component.dapr.DaprEndpoint;
+import org.apache.camel.component.dapr.DaprHeaderFilterStrategy;
import org.apache.camel.spi.ExchangeFactory;
import org.apache.camel.support.DefaultExchange;
import org.apache.camel.test.junit5.CamelTestSupport;
@@ -43,6 +44,7 @@ import org.mockito.ArgumentCaptor;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyString;
@@ -78,6 +80,7 @@ public class DaprPubSubConsumerTest extends CamelTestSupport {
.thenAnswer(inv ->
DefaultExchange.newFromEndpoint(inv.getArgument(0)));
when(endpoint.getCamelContext()).thenReturn(context);
when(endpoint.getConfiguration()).thenReturn(configuration);
+ when(endpoint.getHeaderFilterStrategy()).thenReturn(new
DaprHeaderFilterStrategy());
when(configuration.getPubSubName()).thenReturn("testPubSub");
when(configuration.getTopic()).thenReturn("testTopic");
when(configuration.getPreviewClient()).thenReturn(mockClient);
@@ -131,8 +134,8 @@ public class DaprPubSubConsumerTest extends
CamelTestSupport {
String body = new String(exchange.getIn().getBody(byte[].class),
StandardCharsets.UTF_8);
assertEquals(payload, body);
- assertEquals(pubSubName,
exchange.getIn().getHeader(DaprConstants.PUBSUB_NAME));
- assertEquals(topic, exchange.getIn().getHeader(DaprConstants.TOPIC));
+ assertNull(exchange.getIn().getHeader(DaprConstants.PUBSUB_NAME));
+ assertNull(exchange.getIn().getHeader(DaprConstants.TOPIC));
assertEquals(id, exchange.getIn().getHeader(DaprConstants.ID));
assertEquals(ver,
exchange.getIn().getHeader(DaprConstants.SPECIFIC_VERSION));
assertArrayEquals(payload.getBytes(), (byte[])
exchange.getIn().getHeader(DaprConstants.BINARY_DATA));
diff --git
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/DaprComponentBuilderFactory.java
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/DaprComponentBuilderFactory.java
index b83c279bca5b..d88f0c354118 100644
---
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/DaprComponentBuilderFactory.java
+++
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/DaprComponentBuilderFactory.java
@@ -446,6 +446,24 @@ public interface DaprComponentBuilderFactory {
doSetProperty("autowiredEnabled", autowiredEnabled);
return this;
}
+
+ /**
+ * To use a custom HeaderFilterStrategy to filter header to and from
+ * Camel message.
+ *
+ * The option is a:
+ * <code>org.apache.camel.spi.HeaderFilterStrategy</code>
+ * type.
+ *
+ * Group: advanced
+ *
+ * @param headerFilterStrategy the value to set
+ * @return the dsl builder
+ */
+ default DaprComponentBuilder
headerFilterStrategy(org.apache.camel.spi.HeaderFilterStrategy
headerFilterStrategy) {
+ doSetProperty("headerFilterStrategy", headerFilterStrategy);
+ return this;
+ }
}
class DaprComponentBuilderImpl
@@ -490,6 +508,7 @@ public interface DaprComponentBuilderFactory {
case "stateStore": getOrCreateConfiguration((DaprComponent)
component).setStateStore((java.lang.String) value); return true;
case "verb": getOrCreateConfiguration((DaprComponent)
component).setVerb((java.lang.String) value); return true;
case "autowiredEnabled": ((DaprComponent)
component).setAutowiredEnabled((boolean) value); return true;
+ case "headerFilterStrategy": ((DaprComponent)
component).setHeaderFilterStrategy((org.apache.camel.spi.HeaderFilterStrategy)
value); return true;
default: return false;
}
}
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/DaprEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/DaprEndpointBuilderFactory.java
index 5b0cb60a3fc0..4c687274325a 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/DaprEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/DaprEndpointBuilderFactory.java
@@ -274,6 +274,38 @@ public interface DaprEndpointBuilderFactory {
doSetProperty("exchangePattern", exchangePattern);
return this;
}
+ /**
+ * To use a custom HeaderFilterStrategy to filter header to and from
+ * Camel message.
+ *
+ * The option is a:
+ * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
+ *
+ * Group: advanced
+ *
+ * @param headerFilterStrategy the value to set
+ * @return the dsl builder
+ */
+ default AdvancedDaprEndpointConsumerBuilder
headerFilterStrategy(org.apache.camel.spi.HeaderFilterStrategy
headerFilterStrategy) {
+ doSetProperty("headerFilterStrategy", headerFilterStrategy);
+ return this;
+ }
+ /**
+ * To use a custom HeaderFilterStrategy to filter header to and from
+ * Camel message.
+ *
+ * The option will be converted to a
+ * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
+ *
+ * Group: advanced
+ *
+ * @param headerFilterStrategy the value to set
+ * @return the dsl builder
+ */
+ default AdvancedDaprEndpointConsumerBuilder
headerFilterStrategy(String headerFilterStrategy) {
+ doSetProperty("headerFilterStrategy", headerFilterStrategy);
+ return this;
+ }
}
/**
@@ -676,6 +708,38 @@ public interface DaprEndpointBuilderFactory {
doSetProperty("lazyStartProducer", lazyStartProducer);
return this;
}
+ /**
+ * To use a custom HeaderFilterStrategy to filter header to and from
+ * Camel message.
+ *
+ * The option is a:
+ * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
+ *
+ * Group: advanced
+ *
+ * @param headerFilterStrategy the value to set
+ * @return the dsl builder
+ */
+ default AdvancedDaprEndpointProducerBuilder
headerFilterStrategy(org.apache.camel.spi.HeaderFilterStrategy
headerFilterStrategy) {
+ doSetProperty("headerFilterStrategy", headerFilterStrategy);
+ return this;
+ }
+ /**
+ * To use a custom HeaderFilterStrategy to filter header to and from
+ * Camel message.
+ *
+ * The option will be converted to a
+ * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
+ *
+ * Group: advanced
+ *
+ * @param headerFilterStrategy the value to set
+ * @return the dsl builder
+ */
+ default AdvancedDaprEndpointProducerBuilder
headerFilterStrategy(String headerFilterStrategy) {
+ doSetProperty("headerFilterStrategy", headerFilterStrategy);
+ return this;
+ }
}
/**
@@ -776,6 +840,38 @@ public interface DaprEndpointBuilderFactory {
return (DaprEndpointBuilder) this;
}
+ /**
+ * To use a custom HeaderFilterStrategy to filter header to and from
+ * Camel message.
+ *
+ * The option is a:
+ * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
+ *
+ * Group: advanced
+ *
+ * @param headerFilterStrategy the value to set
+ * @return the dsl builder
+ */
+ default AdvancedDaprEndpointBuilder
headerFilterStrategy(org.apache.camel.spi.HeaderFilterStrategy
headerFilterStrategy) {
+ doSetProperty("headerFilterStrategy", headerFilterStrategy);
+ return this;
+ }
+ /**
+ * To use a custom HeaderFilterStrategy to filter header to and from
+ * Camel message.
+ *
+ * The option will be converted to a
+ * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
+ *
+ * Group: advanced
+ *
+ * @param headerFilterStrategy the value to set
+ * @return the dsl builder
+ */
+ default AdvancedDaprEndpointBuilder headerFilterStrategy(String
headerFilterStrategy) {
+ doSetProperty("headerFilterStrategy", headerFilterStrategy);
+ return this;
+ }
}
public interface DaprBuilders {