Claus Ibsen created CAMEL-26074:
-----------------------------------

             Summary: camel-aws2-textract - a FeatureTypes header of Strings 
fails, and the start operations give the job id only in the response
                 Key: CAMEL-26074
                 URL: https://issues.apache.org/jira/browse/CAMEL-26074
             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-textract (CAMEL-24961).

h4. 1. A FeatureTypes header of Strings fails with a ClassCastException

analyzeDocument and startDocumentAnalysis pass the 
{{CamelAwsTextractFeatureTypes}} header to the request as a 
{{List<FeatureType>}} ({{Textract2Producer}}, main ed3d719b379c, lines 172-174 
and 284-286). A List of Strings, as a YAML route gives, fails in the AWS SDK 
with {{ClassCastException: class java.lang.String cannot be cast to class 
...FeatureType}}. Checked on 4.24.0-SNAPSHOT with {{camel run}} against the AWS 
emulator of {{camel infra run aws}}.

*Proposed change*: accept Strings too, with {{FeatureType.fromValue}}.

h4. 2. The start operations give the job id only in the response

startDocumentTextDetection, startDocumentAnalysis and startExpenseAnalysis set 
no header, and the get operations read the job id from 
{{CamelAwsTextractJobId}}, or else from the body as text (lines 358-365, 
409-416 and 460-467). So a start step followed by a get step sends the 
toString() of the start response as the job id. Checked on 4.24.0-SNAPSHOT with 
{{camel run}} against the AWS emulator of {{camel infra run aws}}: 
{{InvalidJobIdException}}; with the header set from {{$\{body.jobId\}}} the get 
works. The catalog describes {{CamelAwsTextractJobId}} as "The job ID for async 
operations (StartDocumentTextDetection, StartDocumentAnalysis)".

*Proposed change*: set the {{CamelAwsTextractJobId}} header from the start 
response.

h4. 3. The S3 options win over the headers

The s3Bucket and s3Object options are read first, and the headers only when an 
option is not set (lines 493-501), the reverse of the other AWS components; 
when only one of bucket and object is known, the body is used as the document 
(line 503). Checked on 4.24.0-SNAPSHOT with {{camel run}} against the AWS 
emulator of {{camel infra run aws}}: the bucket header alone gave 
{{InvalidPayloadException}} for a Map body.

*Proposed change*: say so in the docs, or read the headers first.

h4. Also read in the code, not run

* The page names an {{amazonTextractClient}}; the option is {{textractClient}}.

_Claude Code on behalf of davsclaus_



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

Reply via email to