Claus Ibsen created CAMEL-26033:
-----------------------------------

             Summary: camel-aws2-lambda - invokeFunction without a body and 
createFunction with a Map body fail with a NullPointerException
                 Key: CAMEL-26033
                 URL: https://issues.apache.org/jira/browse/CAMEL-26033
             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-lambda (CAMEL-24961).

h4. 1. invokeFunction without a body fails with a NullPointerException

invokeFunction sends {{SdkBytes.fromString(body as text)}} 
({{Lambda2Producer}}, main 07d2e7a987bc, lines 307-308), which fails for no 
body with {{NullPointerException: string must not be null.}}, though an invoke 
without input is valid. Checked on 4.24.0-SNAPSHOT with {{camel run}} against 
the AWS emulator of {{camel infra run aws}}.

*Proposed change*: send no payload, or {{{}}}, when there is no body.

h4. 2. createFunction and updateFunction fail with a NullPointerException for a 
Map body

The zip of the code is the body, read as a ByteBuffer ({{Lambda2Producer}}, 
line 357). A Map or a POJO has no ByteBuffer, so the call fails with 
{{NullPointerException: byteBuffer must not be null.}}. A body also wins over 
the {{CamelAwsLambdaZipFile}} header, and with the S3 headers both a zip and an 
S3 location are sent. Checked on 4.24.0-SNAPSHOT with {{camel run}} against the 
AWS emulator of {{camel infra run aws}}: a Map body gave the 
NullPointerException; a File, a byte[] and a stream worked, and so did no body 
with the zip file header.

*Proposed change*: fail with a message that says the body must be the zip as 
bytes, a stream or a file; use the header or S3 when it is set.

h4. Also read in the code, not run

* The payload is encoded in the default charset of the JVM, and the payload of 
the response decoded as UTF-8 (lines 308 and 317).
* An error of the function does not fail the exchange: the body is the JSON of 
the error, with {{CamelAwsLambdaFunctionError}} set. Worth a line in the docs.
* updateFunction takes an S3 bucket without a key or a key without a bucket; 
createFunction needs both.
* The description of the operation option lists 5 of the 31 operations, and the 
createFunction example of the docs uses the runtime nodejs6.10.

_Claude Code on behalf of davsclaus_



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

Reply via email to