[
https://issues.apache.org/jira/browse/CAMEL-26030?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-26030 started by Claus Ibsen.
-------------------------------------------
> camel-aws2-ddb - wrong header types in the catalog, CamelAwsDdbNextToken
> missing, and result headers read by the next step
> --------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26030
> URL: https://issues.apache.org/jira/browse/CAMEL-26030
> Project: Camel
> Issue Type: Bug
> Components: camel-aws2
> Affects Versions: 4.18.0, 4.22.0, 4.23.0
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Minor
> Fix For: 4.24.0
>
>
> Found while adding the catalog body types of aws2-ddb and aws2-ddbstream
> (CAMEL-24961). The body is fine: every operation keeps it and puts its result
> in headers. The headers are where these are.
> h4. 1. The catalog gives wrong types for result headers
> The {{javaType}} of these headers in {{Ddb2Constants}} (main 07d2e7a987bc) is
> not what the producer sets:
> * {{CamelAwsDdbTableStatus}}: String, but the {{TableStatus}} enum of the AWS
> SDK (line 131);
> * {{CamelAwsDdbCreationDate}}: Date, but a {{java.time.Instant}} (line 50);
> * {{CamelAwsDdbConsumedCapacity}}: Double, but a {{ConsumedCapacity}} object,
> which is always null, as Query and Scan never ask for it with
> ReturnConsumedCapacity (line 44);
> * {{CamelAwsDdbLastEvaluatedKey}}: Key, but a {{Map<String, AttributeValue>}}
> (line 89);
> * {{CamelAwsDdbBatchResponse}}: {{Map<String, BatchResponse>}}, but a
> {{Map<String, List<Map<String, AttributeValue>>>}} (line 36);
> * {{CamelAwsDdbFilterExpressionAttributeValues}}, an input: {{Map<String,
> String>}}, but read as a {{Map<String, AttributeValue>}} (line 205;
> {{AbstractDdbCommand}}, line 119).
> Checked on 4.24.0-SNAPSHOT with {{camel run}} against the AWS emulator of
> {{camel infra run aws}}: DescribeTable gave a TableStatus and an Instant, and
> Scan an empty ConsumedCapacity header.
> *Proposed change*: correct the javaType of these headers; ask for the
> consumed capacity, or drop the header.
> h4. 2. CamelAwsDdbNextToken is not in the catalog
> ExecuteStatement reads the {{CamelAwsDdbNextToken}} header and sets it to the
> token of the next page ({{ExecuteStatementCommand}}, lines 47 and 56), but
> the constant has no {{@Metadata}} ({{Ddb2Constants}}, line 74), so the
> catalog and the docs do not list it. Checked on 4.24.0-SNAPSHOT with {{camel
> run}} against the AWS emulator of {{camel infra run aws}}: ExecuteStatement
> set it.
> *Proposed change*: add the {{@Metadata}}.
> h4. 3. The next aws2-ddb step reads headers that a step set as its result
> Some result headers are also inputs, so a second aws2-ddb step in a route
> uses what the first one gave:
> * DescribeTable and DeleteTable set {{CamelAwsDdbTableName}}
> ({{DescribeTableCommand}}, line 37; {{DeleteTableCommand}}, line 42), which
> the next step takes as its table ({{AbstractDdbCommand}}, line 47);
> * DescribeTable sets {{CamelAwsDdbReadCapacity}} and
> {{CamelAwsDdbWriteCapacity}} (lines 42-43), which a following UpdateTable
> reads before its options ({{UpdateTableCommand}}, lines 39-47);
> * ExecuteStatement sets {{CamelAwsDdbNextToken}}, which the next
> ExecuteStatement sends again, so it reads the next page of another query.
> *Proposed change*: remove the input headers a command sets before setting the
> result, or name the result headers apart from the inputs.
> h4. Also read in the code, not run
> * UpdateTable drops the response and sets no header ({{UpdateTableCommand}},
> lines 33-36).
> * aws2-ddbstream: the section "Sequence Numbers" of the docs describes an
> option that CAMEL-16594 removed; the docs say a DynamoDbStreamsClient must be
> in the registry, but the access key and the credentials providers work too;
> the catalog lists no headers, as {{@UriEndpoint}} of {{Ddb2StreamEndpoint}}
> has no headersClass.
> * The docs write the uri as {{aws2-ddb://domainName}}; the path is the table
> name.
> * {{AWS2BatchGetItemsRuleIT}}: the putItem helper sends BatchGetItems, so
> nothing is put, and the test only checks that the headers are not null.
> _Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)