You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2022/10/05 16:14:48 UTC
[camel-kamelets] branch main updated: Add a bean to duplicate headers and better understanding the source of an exchange
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-kamelets.git
The following commit(s) were added to refs/heads/main by this push:
new f346401d Add a bean to duplicate headers and better understanding the source of an exchange
f346401d is described below
commit f346401de1d3e4bef0cacad49f1ed500090ae246
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Oct 5 18:13:52 2022 +0200
Add a bean to duplicate headers and better understanding the source of an exchange
---
.../utils/headers/DuplicateNamingHeaders.java | 100 +++++++++++++--------
.../kamelets/utils/headers/RenameHeadersTest.java | 22 ++++-
2 files changed, 86 insertions(+), 36 deletions(-)
diff --git a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/headers/DuplicateNamingHeaders.java b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/headers/DuplicateNamingHeaders.java
index 1994bbda..eb5e391f 100644
--- a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/headers/DuplicateNamingHeaders.java
+++ b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/headers/DuplicateNamingHeaders.java
@@ -16,10 +16,11 @@
*/
package org.apache.camel.kamelets.utils.headers;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
import org.apache.camel.Exchange;
import org.apache.camel.InvalidPayloadException;
@@ -27,44 +28,66 @@ import org.apache.camel.Processor;
public class DuplicateNamingHeaders implements Processor {
- String prefix;
- String renamingPrefix;
+ String prefix;
+ String renamingPrefix;
+ String selectedHeaders;
+ String mode = "all";
- /**
- * Default constructor.
- */
- public DuplicateNamingHeaders() {
- }
+ /**
+ * Default constructor.
+ */
+ public DuplicateNamingHeaders() {
+ }
- /**
- * Constructor using fields.
- * @param prefix a prefix to find all the headers to rename.
- * @param renamingPrefix the renaming prefix to use on all the matching headers
- */
- public DuplicateNamingHeaders(String prefix, String renamingPrefix) {
- this.prefix = prefix;
- this.renamingPrefix = renamingPrefix;
- }
+ /**
+ * Constructor using fields.
+ *
+ * @param prefix a prefix to find all the headers to rename.
+ * @param renamingPrefix the renaming prefix to use on all the matching headers
+ */
+ public DuplicateNamingHeaders(String prefix, String renamingPrefix, String selectedHeaders, String mode) {
+ this.prefix = prefix;
+ this.renamingPrefix = renamingPrefix;
+ this.selectedHeaders = selectedHeaders;
+ this.mode = mode;
+ }
- public void process(Exchange ex) throws InvalidPayloadException {
- Map<String, Object> originalHeaders = ex.getMessage().getHeaders();
- Map<String, Object> newHeaders = new HashMap<>();
- for (Map.Entry<String, Object> entry : originalHeaders.entrySet()) {
+ public void process(Exchange ex) throws InvalidPayloadException {
+ Map<String, Object> originalHeaders = ex.getMessage().getHeaders();
+ Map<String, Object> newHeaders = new HashMap<>();
+ for (Map.Entry<String, Object> entry : originalHeaders.entrySet()) {
String key = entry.getKey();
Object val = entry.getValue();
- if (key.startsWith(prefix)) {
- String newKey = key.replaceFirst(prefix,renamingPrefix);
- String subKey = newKey.substring(renamingPrefix.length());
- String suffix = subKey.replaceAll(
- String.format("%s|%s|%s", "(?<=[A-Z])(?=[A-Z][a-z])",
- "(?<=[^A-Z])(?=[A-Z])",
- "(?<=[A-Za-z])(?=[^A-Za-z])"), ".").toLowerCase();
- newHeaders.put(renamingPrefix+suffix, val);
- }
- }
- originalHeaders.putAll(newHeaders);
- ex.getMessage().setHeaders(originalHeaders);
- }
+ if (prefix != null && mode.equalsIgnoreCase("all")) {
+ if (key.startsWith(prefix)) {
+ String newKey = key.replaceFirst(prefix, renamingPrefix);
+ String subKey = newKey.substring(renamingPrefix.length());
+ String suffix = subKey.replaceAll(String.format("%s|%s|%s", "(?<=[A-Z])(?=[A-Z][a-z])",
+ "(?<=[^A-Z])(?=[A-Z])", "(?<=[A-Za-z])(?=[^A-Za-z])"), ".").toLowerCase();
+ newHeaders.put(renamingPrefix + suffix, val);
+ }
+ } else {
+ if (selectedHeaders != null && mode.equalsIgnoreCase("filtering")) {
+ List<String> headerList = Arrays.asList(selectedHeaders.split(","));
+ for (Iterator iterator = headerList.iterator(); iterator.hasNext();) {
+ String header = (String) iterator.next();
+ if (key.equalsIgnoreCase(header)) {
+ String newKey = key.replaceFirst(prefix, renamingPrefix);
+ String subKey = newKey.substring(renamingPrefix.length());
+ String suffix = subKey
+ .replaceAll(String.format("%s|%s|%s", "(?<=[A-Z])(?=[A-Z][a-z])",
+ "(?<=[^A-Z])(?=[A-Z])", "(?<=[A-Za-z])(?=[^A-Za-z])"), ".")
+ .toLowerCase();
+ newHeaders.put(renamingPrefix + suffix, val);
+ }
+ }
+
+ }
+ }
+ }
+ originalHeaders.putAll(newHeaders);
+ ex.getMessage().setHeaders(originalHeaders);
+ }
public void setPrefix(String prefix) {
this.prefix = prefix;
@@ -74,5 +97,12 @@ public class DuplicateNamingHeaders implements Processor {
this.renamingPrefix = renamingPrefix;
}
+ public void setSelectedHeaders(String selectedHeaders) {
+ this.selectedHeaders = selectedHeaders;
+ }
+
+ public void setMode(String mode) {
+ this.mode = mode;
+ }
}
diff --git a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/headers/RenameHeadersTest.java b/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/headers/RenameHeadersTest.java
index 0fc2341c..f2510f34 100644
--- a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/headers/RenameHeadersTest.java
+++ b/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/headers/RenameHeadersTest.java
@@ -38,7 +38,7 @@ class RenameHeadersTest {
}
@Test
- void shouldRenameHeaders() throws Exception {
+ void shouldDuplicateHeaders() throws Exception {
Exchange exchange = new DefaultExchange(camelContext);
exchange.getMessage().setHeader("CamelAwsS3Key", "test.txt");
@@ -54,5 +54,25 @@ class RenameHeadersTest {
Assertions.assertTrue(exchange.getMessage().getHeaders().containsKey("aws.s3.bucket.name"));
Assertions.assertTrue(exchange.getMessage().getHeaders().containsKey("my-header"));
}
+
+ @Test
+ void shouldDuplicateSelectedHeaders() throws Exception {
+ Exchange exchange = new DefaultExchange(camelContext);
+
+ exchange.getMessage().setHeader("CamelAwsS3Key", "test.txt");
+ exchange.getMessage().setHeader("CamelAwsS3BucketName", "kamelets-demo");
+ exchange.getMessage().setHeader("my-header", "header");
+
+ processor = new DuplicateNamingHeaders();
+ processor.setPrefix("CamelAwsS3");
+ processor.setRenamingPrefix("aws.s3.");
+ processor.setMode("filtering");
+ processor.setSelectedHeaders("CamelAwsS3Key,CamelAwsS3BucketName");
+ processor.process(exchange);
+
+ Assertions.assertTrue(exchange.getMessage().getHeaders().containsKey("aws.s3.key"));
+ Assertions.assertTrue(exchange.getMessage().getHeaders().containsKey("aws.s3.bucket.name"));
+ Assertions.assertTrue(exchange.getMessage().getHeaders().containsKey("my-header"));
+ }
}