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.git


The following commit(s) were added to refs/heads/main by this push:
     new 508f8a75604 CAMEL-21680 - Camel-AWS2-S3: Introducing Override Bucket 
Header in Producer operations (#16970)
508f8a75604 is described below

commit 508f8a756042550dbadd9a9b929e4d7596cdd56d
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Wed Jan 29 15:49:10 2025 +0100

    CAMEL-21680 - Camel-AWS2-S3: Introducing Override Bucket Header in Producer 
operations (#16970)
    
    Signed-off-by: Andrea Cosentino <anco...@gmail.com>
---
 .../org/apache/camel/catalog/components/aws2-s3.json       |  3 ++-
 .../org/apache/camel/component/aws2/s3/aws2-s3.json        |  3 ++-
 .../apache/camel/component/aws2/s3/AWS2S3Constants.java    |  4 ++++
 .../org/apache/camel/component/aws2/s3/AWS2S3Producer.java |  2 +-
 .../apache/camel/component/aws2/s3/utils/AWS2S3Utils.java  |  2 +-
 .../component/aws2/s3/integration/S3HeadBucketIT.java      |  2 +-
 .../modules/ROOT/pages/camel-4x-upgrade-guide-4_10.adoc    |  6 ++++++
 .../builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java | 14 ++++++++++++++
 8 files changed, 31 insertions(+), 5 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-s3.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-s3.json
index f9e26d97c6f..3c6379baff2 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-s3.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-s3.json
@@ -122,7 +122,8 @@
     "CamelAwsS3IfMatchCondition": { "index": 33, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Return\/copy the object only if its 
entity tag (ETag) is the same as the one specified in this header.", 
"constantName": 
"org.apache.camel.component.aws2.s3.AWS2S3Constants#IF_MATCH_CONDITION" },
     "CamelAwsS3IfModifiedSinceCondition": { "index": 34, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Return\/copy the object only if it has 
been modified since the specified time; otherwise, return a 304 Not Modified 
error.", "constantName": 
"org.apache.camel.component.aws2.s3.AWS2S3Constants#IF_MODIFIED_SINCE_CONDITION"
 },
     "CamelAwsS3IfNoneMatchCondition": { "index": 35, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Return\/copy the object only if its 
entity tag (ETag) is different from the one specified in this header.", 
"constantName": 
"org.apache.camel.component.aws2.s3.AWS2S3Constants#IF_NONE_MATCH_CONDITION" },
-    "CamelAwsS3IfUnmodifiedSinceCondition": { "index": 36, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Return\/copy the object only if it has 
not been modified since the specified time.", "constantName": 
"org.apache.camel.component.aws2.s3.AWS2S3Constants#IF_UNMODIFIED_SINCE_CONDITION"
 }
+    "CamelAwsS3IfUnmodifiedSinceCondition": { "index": 36, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Return\/copy the object only if it has 
not been modified since the specified time.", "constantName": 
"org.apache.camel.component.aws2.s3.AWS2S3Constants#IF_UNMODIFIED_SINCE_CONDITION"
 },
+    "CamelAwsS3OverrideBucketName": { "index": 37, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The bucket Name to override (can be 
dynamic using the simple language in the producer) which this object will be 
stored or which will be used for the current operation or in which this object 
is contained.", "constantName": "org.apach [...]
   },
   "properties": {
     "bucketNameOrArn": { "index": 0, "kind": "path", "displayName": "Bucket 
Name Or Arn", "group": "common", "label": "", "required": true, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": 
"Bucket name or ARN" },
diff --git 
a/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/org/apache/camel/component/aws2/s3/aws2-s3.json
 
b/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/org/apache/camel/component/aws2/s3/aws2-s3.json
index f9e26d97c6f..3c6379baff2 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/org/apache/camel/component/aws2/s3/aws2-s3.json
+++ 
b/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/org/apache/camel/component/aws2/s3/aws2-s3.json
@@ -122,7 +122,8 @@
     "CamelAwsS3IfMatchCondition": { "index": 33, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Return\/copy the object only if its 
entity tag (ETag) is the same as the one specified in this header.", 
"constantName": 
"org.apache.camel.component.aws2.s3.AWS2S3Constants#IF_MATCH_CONDITION" },
     "CamelAwsS3IfModifiedSinceCondition": { "index": 34, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Return\/copy the object only if it has 
been modified since the specified time; otherwise, return a 304 Not Modified 
error.", "constantName": 
"org.apache.camel.component.aws2.s3.AWS2S3Constants#IF_MODIFIED_SINCE_CONDITION"
 },
     "CamelAwsS3IfNoneMatchCondition": { "index": 35, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Return\/copy the object only if its 
entity tag (ETag) is different from the one specified in this header.", 
"constantName": 
"org.apache.camel.component.aws2.s3.AWS2S3Constants#IF_NONE_MATCH_CONDITION" },
-    "CamelAwsS3IfUnmodifiedSinceCondition": { "index": 36, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Return\/copy the object only if it has 
not been modified since the specified time.", "constantName": 
"org.apache.camel.component.aws2.s3.AWS2S3Constants#IF_UNMODIFIED_SINCE_CONDITION"
 }
+    "CamelAwsS3IfUnmodifiedSinceCondition": { "index": 36, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Return\/copy the object only if it has 
not been modified since the specified time.", "constantName": 
"org.apache.camel.component.aws2.s3.AWS2S3Constants#IF_UNMODIFIED_SINCE_CONDITION"
 },
+    "CamelAwsS3OverrideBucketName": { "index": 37, "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The bucket Name to override (can be 
dynamic using the simple language in the producer) which this object will be 
stored or which will be used for the current operation or in which this object 
is contained.", "constantName": "org.apach [...]
   },
   "properties": {
     "bucketNameOrArn": { "index": 0, "kind": "path", "displayName": "Bucket 
Name Or Arn", "group": "common", "label": "", "required": true, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": 
"Bucket name or ARN" },
diff --git 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
index 43409579bd5..31e0168634a 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
+++ 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
@@ -157,4 +157,8 @@ public interface AWS2S3Constants {
     @Metadata(description = "Return/copy the object only if it has not been 
modified since the specified time.",
               javaType = "String")
     String IF_UNMODIFIED_SINCE_CONDITION = 
"CamelAwsS3IfUnmodifiedSinceCondition";
+    @Metadata(description = "The bucket Name to override (can be dynamic using 
the simple language in the producer) which this object will be stored or which 
will be used for the current operation or in which this object is contained.",
+              javaType = "String")
+    String OVERRIDE_BUCKET_NAME = "CamelAwsS3OverrideBucketName";
+
 }
diff --git 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
index b46a68ac5e8..68b7f85fc26 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
+++ 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
@@ -704,7 +704,7 @@ public class AWS2S3Producer extends DefaultProducer {
     }
 
     private void headBucket(S3Client s3Client, Exchange exchange) {
-        String bucketName = 
exchange.getIn().getHeader(AWS2S3Constants.BUCKET_NAME, String.class);
+        String bucketName = 
exchange.getIn().getHeader(AWS2S3Constants.OVERRIDE_BUCKET_NAME, String.class);
         if (ObjectHelper.isEmpty(bucketName)) {
             throw new IllegalArgumentException(
                     "Head Bucket operation requires to specify a bucket name 
via Header");
diff --git 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/utils/AWS2S3Utils.java
 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/utils/AWS2S3Utils.java
index aa17ce2a061..3ff68d36065 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/utils/AWS2S3Utils.java
+++ 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/utils/AWS2S3Utils.java
@@ -47,7 +47,7 @@ public final class AWS2S3Utils {
      * @throws IllegalArgumentException if the header could not be determined.
      */
     public static String determineBucketName(final Exchange exchange, 
AWS2S3Configuration configuration) {
-        String bucketName = 
exchange.getIn().getHeader(AWS2S3Constants.BUCKET_NAME, String.class);
+        String bucketName = 
exchange.getIn().getHeader(AWS2S3Constants.OVERRIDE_BUCKET_NAME, String.class);
         if (ObjectHelper.isEmpty(bucketName)) {
             bucketName = configuration.getBucketName();
         }
diff --git 
a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java
 
b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java
index 58a15b2dafc..11e26cb2fde 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java
+++ 
b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java
@@ -47,7 +47,7 @@ public class S3HeadBucketIT extends Aws2S3Base {
         Exchange res = template.send("direct:headBucket", exchange -> {
             exchange.getIn().setBody("Hello World");
             exchange.getIn().setHeader(AWS2S3Constants.S3_OPERATION, 
AWS2S3Operations.headBucket);
-            exchange.getIn().setHeader(AWS2S3Constants.BUCKET_NAME, 
"doesnotexist" + UUID.randomUUID().toString());
+            exchange.getIn().setHeader(AWS2S3Constants.OVERRIDE_BUCKET_NAME, 
"doesnotexist" + UUID.randomUUID().toString());
         });
         if (res.getException() != null) {
             throw res.getException();
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_10.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_10.adoc
index 66c5747156b..d763ede760c 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_10.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_10.adoc
@@ -158,6 +158,12 @@ this should only be used in advanced/rare use-cases. This 
option may in the futu
 
 The class `org.apache.camel.component.file.azure.FilesHeaders` has been 
renamed to `org.apache.camel.component.file.azure.FilesConstants`.
 
+=== camel-aws2-s3
+
+The header `CamelAwsS3BucketName` for setting a bucket to write to, on the 
producer side, cannot be used anymore: the header 
`CamelAwsS3OverrideBucketName` must be used 
+instead. This was done to avoid situation in which you're moving a file from a 
bucket to a different one, and the header coming from the S3 consumer is used 
as bucket name for S3 Producer.
+You can find more information on CAMEL-21680. 
+
 === camel-file
 
 The `camel-file` consumer has been optimized when filtering file names using 
name matching only,
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java
index f3bc2695a1f..fcef0911e93 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AWS2S3EndpointBuilderFactory.java
@@ -4082,6 +4082,20 @@ public interface AWS2S3EndpointBuilderFactory {
         public String awsS3IfUnmodifiedSinceCondition() {
             return "CamelAwsS3IfUnmodifiedSinceCondition";
         }
+        /**
+         * The bucket Name to override (can be dynamic using the simple 
language
+         * in the producer) which this object will be stored or which will be
+         * used for the current operation or in which this object is contained.
+         * 
+         * The option is a: {@code String} type.
+         * 
+         * Group: common
+         * 
+         * @return the name of the header {@code AwsS3OverrideBucketName}.
+         */
+        public String awsS3OverrideBucketName() {
+            return "CamelAwsS3OverrideBucketName";
+        }
     }
     static AWS2S3EndpointBuilder endpointBuilder(String componentName, String 
path) {
         class AWS2S3EndpointBuilderImpl extends AbstractEndpointBuilder 
implements AWS2S3EndpointBuilder, AdvancedAWS2S3EndpointBuilder {

Reply via email to