Claus Ibsen created CAMEL-26091:
-----------------------------------

             Summary: camel-aws2-redshift - aws2-redshift-data fails with a 
NullPointerException unless a RedshiftDataClient is given
                 Key: CAMEL-26091
                 URL: https://issues.apache.org/jira/browse/CAMEL-26091
             Project: Camel
          Issue Type: Bug
          Components: camel-aws2
    Affects Versions: 4.18.0, 4.22.0, 4.23.0
            Reporter: Claus Ibsen
             Fix For: 4.24.0


Found while adding the catalog body types of aws2-redshift-data (CAMEL-24961).

h4. 1. Every operation fails with a NullPointerException unless a 
RedshiftDataClient is given

The endpoint builds its client in {{doStart}} from the accessKey and secretKey, 
the default credentials provider or a profile ({{RedshiftData2Endpoint}}, main 
ed3d719b379c, lines 71-73), and keeps it in a field. The producer never uses 
it: every operation is called with 
{{getConfiguration().getAwsRedshiftDataClient()}} ({{RedshiftData2Producer}}, 
lines 51-61), which is null unless the awsRedshiftDataClient option is set or a 
RedshiftDataClient bean is autowired. So with the keys only, as the page says 
works (lines 49-50), every exchange fails with {{NullPointerException: Cannot 
invoke "...RedshiftDataClient.listDatabases(...)" because "redshiftDataClient" 
is null}}. Checked on 4.24.0-SNAPSHOT with {{camel run}} against the AWS 
emulator of {{camel infra run aws}}. It has been so since the component was 
added (4.1.0); the tests always bind a client.

*Proposed change*: call the operations with 
{{getEndpoint().getAwsRedshiftDataClient()}}.

h4. 2. No operation fails with a NullPointerException

The operation option has no default, and with no CamelAwsRedshiftDataOperation 
header, {{switch (determineOperation(exchange))}} ({{RedshiftData2Producer}}, 
main ed3d719b379c, line 51) fails with {{NullPointerException: Cannot invoke 
"...ordinal()" because the return value of "...determineOperation(...)" is 
null}}. Checked on 4.24.0-SNAPSHOT with {{camel run}} against a fake of the AWS 
API that logs the requests it gets.

*Proposed change*: fail with a message that says to set the operation option or 
header, as aws2-kms does ("Operation must be specified").

h4. 3. A CamelAwsRedshiftDataSqlParameterList of Strings fails with a 
ClassCastException

The header is passed to {{builder.parameters(...)}} as a raw List (lines 
455-458), so anything but SqlParameter objects of the AWS SDK fails in the SDK 
with {{ClassCastException: class java.lang.String cannot be cast to class 
...SqlParameter}}. Checked on 4.24.0-SNAPSHOT with {{camel run}} against a fake 
of the AWS API that logs the requests it gets. The catalog gives its type as 
{{List<SqlParameterList>}} ({{RedshiftData2Constants}}, line 95), a class that 
does not exist.

h4. Also read in the code, not run

* executeStatement does not set the {{CamelAwsRedshiftDataStatementId}} header 
from the id of the response, which describeStatement and getStatementResult 
read; getStatementResult and the list operations give one page, with no header 
for the next token.
* The POJO example of the page uses {{ListDatabases.builder()}} (line 141); the 
class is {{ListDatabasesRequest}}.

_Claude Code on behalf of davsclaus_



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to