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 58a621c221eb CAMEL-24792: camel-aws2-ddb - setHeaderIfNotPresent must 
not overwrite an existing header (#26544)
58a621c221eb is described below

commit 58a621c221eb22aeb6a7b56c224a2c60c89c9b43
Author: Andrea Cosentino <[email protected]>
AuthorDate: Thu Sep 17 11:24:41 2026 +0200

    CAMEL-24792: camel-aws2-ddb - setHeaderIfNotPresent must not overwrite an 
existing header (#26544)
    
    Co-authored-by: Claude Opus 4.8 <[email protected]>
---
 .../ddb/transform/Ddb2JsonDataTypeTransformer.java |  4 ++-
 .../transform/Ddb2JsonDataTypeTransformerTest.java | 41 ++++++++++++++++++++++
 .../ROOT/pages/camel-4x-upgrade-guide-4_23.adoc    | 10 ++++++
 3 files changed, 54 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformer.java
 
b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformer.java
index 99a16d878d3c..9513c8dafd00 100644
--- 
a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformer.java
+++ 
b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformer.java
@@ -162,7 +162,9 @@ public class Ddb2JsonDataTypeTransformer extends 
Transformer {
     }
 
     private void setHeaderIfNotPresent(String headerName, Object value, 
Message message) {
-        message.setHeader(headerName, value);
+        if (message.getHeader(headerName) == null) {
+            message.setHeader(headerName, value);
+        }
     }
 
     private Map<String, AttributeValue> getAttributeValueMap(Map<String, 
Object> body) {
diff --git 
a/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformerTest.java
 
b/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformerTest.java
index a401bfea23f8..5d645b45ecdc 100644
--- 
a/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformerTest.java
+++ 
b/components/camel-aws/camel-aws2-ddb/src/test/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformerTest.java
@@ -119,6 +119,47 @@ public class Ddb2JsonDataTypeTransformerTest {
         Assertions.assertEquals(AttributeValue.builder().s("Rajesh 
Koothrappali").build(), attributeValueMap.get("name"));
     }
 
+    @Test
+    void shouldKeepExplicitReturnValuesOnPutItem() throws Exception {
+        Exchange exchange = new DefaultExchange(camelContext);
+
+        exchange.getMessage().setBody(Json.mapper().readTree(itemJson));
+        exchange.getMessage().setHeader(Ddb2Constants.RETURN_VALUES, 
ReturnValue.NONE.toString());
+        exchange.setProperty("operation", Ddb2Operations.PutItem.name());
+
+        transformer.transform(exchange.getMessage(), DataType.ANY, new 
DataType(AWS_2_DDB_APPLICATION_JSON_TRANSFORMER));
+
+        Assertions.assertEquals(ReturnValue.NONE.toString(), 
exchange.getMessage().getHeader(Ddb2Constants.RETURN_VALUES));
+    }
+
+    @Test
+    void shouldKeepExplicitReturnValuesOnUpdateItem() throws Exception {
+        Exchange exchange = new DefaultExchange(camelContext);
+
+        exchange.getMessage()
+                .setBody(Json.mapper().readTree("{\"operation\": \"" + 
Ddb2Operations.UpdateItem.name() + "\", \"key\": "
+                                                + keyJson + ", \"item\": " + 
itemJson + "}"));
+        exchange.getMessage().setHeader(Ddb2Constants.RETURN_VALUES, 
ReturnValue.UPDATED_OLD.toString());
+
+        transformer.transform(exchange.getMessage(), DataType.ANY, new 
DataType(AWS_2_DDB_APPLICATION_JSON_TRANSFORMER));
+
+        Assertions.assertEquals(ReturnValue.UPDATED_OLD.toString(),
+                exchange.getMessage().getHeader(Ddb2Constants.RETURN_VALUES));
+    }
+
+    @Test
+    void shouldKeepExplicitReturnValuesOnDeleteItem() throws Exception {
+        Exchange exchange = new DefaultExchange(camelContext);
+
+        exchange.getMessage().setBody(Json.mapper().readTree("{\"key\": " + 
keyJson + "}"));
+        exchange.getMessage().setHeader(Ddb2Constants.RETURN_VALUES, 
ReturnValue.NONE.toString());
+        exchange.setProperty("operation", Ddb2Operations.DeleteItem.name());
+
+        transformer.transform(exchange.getMessage(), DataType.ANY, new 
DataType(AWS_2_DDB_APPLICATION_JSON_TRANSFORMER));
+
+        Assertions.assertEquals(ReturnValue.NONE.toString(), 
exchange.getMessage().getHeader(Ddb2Constants.RETURN_VALUES));
+    }
+
     @Test
     @SuppressWarnings("unchecked")
     void shouldMapNestedObjects() throws Exception {
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc
index 79340c447653..02b2d8e8f67f 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_23.adoc
@@ -91,6 +91,16 @@ The Event developer console now exposes the full structured 
JSON payload in the
 each event entry, while keeping the existing flat `type`, `timestamp`, 
`exchangeId`, and
 `message` fields for backwards compatibility.
 
+=== camel-aws2-ddb
+
+The `aws2-ddb:application-json` data type transformer no longer overwrites a 
`CamelAwsDdbReturnValues` header that
+is already set on the message. Previously the transformer always replaced it 
with its own default (`ALL_OLD` for
+`PutItem` and `DeleteItem`, `ALL_NEW` for `UpdateItem`), so there was no way 
to select a different `ReturnValue`
+through the transformer. The defaults are unchanged when the header is absent.
+
+If a route sets `CamelAwsDdbReturnValues` before the transformer runs and 
relies on it being discarded, remove the
+header instead.
+
 === camel-console
 
 The `context` developer console no longer counts routes created by Kamelets in 
its `routesTotal` and `routesStarted`

Reply via email to