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`