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

davsclaus pushed a commit to branch fix/CAMEL-24157
in repository https://gitbox.apache.org/repos/asf/camel.git

commit f88876e836bd2edb672e40fb0b185e126d9ea0c3
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Jul 17 17:42:26 2026 +0200

    CAMEL-24157: camel-aws2-ddb - Fix empty array mapping, Scan consistentRead, 
and table-creation retry
    
    Map empty JSON arrays to DynamoDB List type (L) instead of empty
    StringSet which DynamoDB rejects. Use Number type check for list
    elements to match prior CAMEL-24156 fix on scalar values. Add missing
    consistentRead to ScanCommand matching GetItem/Query/ExecuteStatement.
    Fix table-creation wait loop to catch ResourceNotFoundException by
    type instead of unreliable string matching against SDK v2 messages.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../main/java/org/apache/camel/component/aws2/ddb/Ddb2Endpoint.java | 6 +++---
 .../main/java/org/apache/camel/component/aws2/ddb/ScanCommand.java  | 3 ++-
 .../component/aws2/ddb/transform/Ddb2JsonDataTypeTransformer.java   | 4 ++--
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git 
a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Endpoint.java
 
b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Endpoint.java
index 33451093f7d5..ace1cb5f07ed 100644
--- 
a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Endpoint.java
+++ 
b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Endpoint.java
@@ -171,10 +171,10 @@ public class Ddb2Endpoint extends ScheduledPollEndpoint 
implements EndpointServi
                 return true;
             }
             LOG.trace("Table [{}] not active yet", tableName);
+        } catch (ResourceNotFoundException e) {
+            // table may not be visible yet due to eventual consistency
         } catch (AwsServiceException ase) {
-            if (!ase.getMessage().contains("ResourceNotFoundException")) {
-                throw ase;
-            }
+            throw ase;
         }
         return false;
     }
diff --git 
a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/ScanCommand.java
 
b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/ScanCommand.java
index 255a97d9a988..db9fa1b14652 100644
--- 
a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/ScanCommand.java
+++ 
b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/ScanCommand.java
@@ -39,7 +39,8 @@ public class ScanCommand extends AbstractDdbCommand {
                 .limit(determineLimit())
                 .exclusiveStartKey(determineExclusiveStartKey())
                 .attributesToGet(determineAttributeNames())
-                .scanFilter(determineScanFilter());
+                .scanFilter(determineScanFilter())
+                .consistentRead(determineConsistentRead());
 
         // Check if we have set an Index Name
         String indexName = determineIndexName();
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 123c85a03066..80f2e2aac2ee 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
@@ -219,8 +219,8 @@ public class Ddb2JsonDataTypeTransformer extends 
Transformer {
             List<?> values = (List<?>) value;
 
             if (values.isEmpty()) {
-                return AttributeValue.builder().ss().build();
-            } else if (values.get(0) instanceof Integer) {
+                return AttributeValue.builder().l(List.of()).build();
+            } else if (values.get(0) instanceof Number) {
                 return 
AttributeValue.builder().ns(values.stream().map(Object::toString).collect(Collectors.toList())).build();
             } else {
                 return 
AttributeValue.builder().ss(values.stream().map(Object::toString).collect(Collectors.toList())).build();

Reply via email to