This is an automated email from the ASF dual-hosted git repository.

oscerd 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 aa48bb8a90ad CAMEL-24901: camel-aws2-s3 - add 4.18/4.22 upgrade-guide 
notes for the key/bucket Simple-evaluation change (#26841)
aa48bb8a90ad is described below

commit aa48bb8a90adfae80a657a9ef427002d6634af31
Author: Andrea Cosentino <[email protected]>
AuthorDate: Fri Sep 25 10:15:44 2026 +0200

    CAMEL-24901: camel-aws2-s3 - add 4.18/4.22 upgrade-guide notes for the 
key/bucket Simple-evaluation change (#26841)
    
    Follow-up doc-sync to #26746 / CAMEL-24901.
    
    Co-authored-by: Claude Opus 4.8 <[email protected]>
---
 .../ROOT/pages/camel-4x-upgrade-guide-4_18.adoc    | 32 ++++++++++++++++++++++
 .../ROOT/pages/camel-4x-upgrade-guide-4_22.adoc    | 32 ++++++++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc
index f9c5f49202eb..a80230d15c7d 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc
@@ -2274,6 +2274,38 @@ that resolve outside the configured directory are 
rejected.
 If `downloadFileName` is configured with an expression (i.e. it contains `$`), 
the local
 path is built by that expression as before and is not subject to this check.
 
+=== camel-aws2-s3
+
+The producer no longer evaluates the S3 object key or bucket name taken from a 
message header as a Simple
+expression. `AWS2S3Utils.determineKey()` and `determineBucketName()` evaluate 
the Simple language only for the
+values configured on the endpoint (`keyName` and `bucketName`); a key supplied 
through the `CamelAwsS3Key` header,
+or a bucket name supplied through the `CamelAwsS3OverrideBucketName` header, 
is now used literally. The
+`CamelAwsS3Key` header carries message content — for example the name of a 
consumed object, which the consumer
+sets on the exchange — whereas a dynamic key or bucket is a route authoring 
feature.
+
+Configured dynamic keys and buckets are unchanged:
+
+[source,java]
+----
+from("direct:start")
+    .to("aws2-s3://mybucket?keyName=RAW(${date:now:yyyyMMdd}/file.txt)");
+----
+
+A route that needs a dynamic value on the header must evaluate it in the 
route, so the header already holds the
+resolved value when it reaches the producer:
+
+[source,java]
+----
+from("direct:start")
+    .setHeader(AWS2S3Constants.KEY, simple("${date:now:yyyyMMdd}/file.txt"))
+    .to("aws2-s3://mybucket");
+----
+
+A header that carries a literal `${...}` string is now used as the object key 
verbatim instead of being evaluated.
+
+A configured `keyName` or `bucketName` whose Simple expression resolves to 
`null` now fails with an
+`IllegalArgumentException` at the producer, instead of passing a `null` 
key/bucket on to the AWS SDK.
+
 === camel-core - REST client request validation and binary bodies
 
 When `clientRequestValidation` is enabled and the REST service declares a 
required body, the incoming
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_22.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_22.adoc
index fac86e48c844..d429a7bbc767 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_22.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_22.adoc
@@ -2092,6 +2092,38 @@ Configure the `target` and `credentials` endpoint 
options instead, or route to a
 with `toD` when the destination varies per message. The constants remain in 
place for backwards
 compatibility and are now marked deprecated in the component metadata.
 
+=== camel-aws2-s3
+
+The producer no longer evaluates the S3 object key or bucket name taken from a 
message header as a Simple
+expression. `AWS2S3Utils.determineKey()` and `determineBucketName()` evaluate 
the Simple language only for the
+values configured on the endpoint (`keyName` and `bucketName`); a key supplied 
through the `CamelAwsS3Key` header,
+or a bucket name supplied through the `CamelAwsS3OverrideBucketName` header, 
is now used literally. The
+`CamelAwsS3Key` header carries message content — for example the name of a 
consumed object, which the consumer
+sets on the exchange — whereas a dynamic key or bucket is a route authoring 
feature.
+
+Configured dynamic keys and buckets are unchanged:
+
+[source,java]
+----
+from("direct:start")
+    .to("aws2-s3://mybucket?keyName=RAW(${date:now:yyyyMMdd}/file.txt)");
+----
+
+A route that needs a dynamic value on the header must evaluate it in the 
route, so the header already holds the
+resolved value when it reaches the producer:
+
+[source,java]
+----
+from("direct:start")
+    .setHeader(AWS2S3Constants.KEY, simple("${date:now:yyyyMMdd}/file.txt"))
+    .to("aws2-s3://mybucket");
+----
+
+A header that carries a literal `${...}` string is now used as the object key 
verbatim instead of being evaluated.
+
+A configured `keyName` or `bucketName` whose Simple expression resolves to 
`null` now fails with an
+`IllegalArgumentException` at the producer, instead of passing a `null` 
key/bucket on to the AWS SDK.
+
 === camel-hazelcast - ReplicatedHazelcastAggregationRepository now applies the 
default serialization filter
 
 `ReplicatedHazelcastAggregationRepository` now applies the same default

Reply via email to