Skip to content

AWS lambda extension fails to Deserialize trigger Classes correctly #14513

@StefanVanDyck

Description

@StefanVanDyck

Describe the bug
When running my DynamoDB-stream triggered lambda I receive the following error:
2021-01-21 01:37:10,665 ERROR [io.qua.ama.lam.run.AbstractLambdaPollLoop] (Lambda Thread) Failed to run lambda: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.Date out of VALUE_NUMBER_FLOAT token at [Source: (sun.net.www.protocol.http.HttpURLConnection$HttpInputStream); line: 1, column: 196] (through reference chain: com.amazonaws.services.lambda.runtime.events.DynamodbEvent["Records"]->java.util.ArrayList[0]->com.amazonaws.services.lambda.runtime.events.DynamodbEvent$DynamodbStreamRecord["dynamodb"]->com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord["ApproximateCreationDateTime"]) ... at io.quarkus.amazon.lambda.runtime.AbstractLambdaPollLoop$1.run(AbstractLambdaPollLoop.java:78)

This happens because AWS passes unix timestamps as a float value with milliseconds after the decimal point.

My handleRequest method looks like this:
public LambdaResponse handleRequest(com.amazonaws.services.lambda.runtime.events.DynamodbEvent trigger, Context context)

I am using a native build(GraalVM), not sure if that matters.

Expected behavior
I expect the lambda to be trigger using a Strongly-Type Java Object as event.

Actual behavior
The lambda Crashes with a jackson Deserialization error.

To Reproduce

Will provide reproducer.

Steps to reproduce the behavior:

  1. Create a simple quarkus lambda project with a DynamoDB event in the handler method
  2. Deploy using dynamodb-stream trigger
  3. Put an item in the dynamodb table

Configuration

        <commons-lang3.version>3.11</commons-lang3.version>
        <compiler-plugin.version>3.8.1</compiler-plugin.version>
        <cucumber.version>6.9.1</cucumber.version>
        <maven.compiler.parameters>true</maven.compiler.parameters>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <quarkus-plugin.version>1.11.0.Final</quarkus-plugin.version>
        <quarkus.platform.artifact-id>quarkus-universe-bom</quarkus.platform.artifact-id>
        <quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
        <quarkus.platform.version>1.11.0.Final</quarkus.platform.version>
        <unirest.version>3.11.10</unirest.version>
        <java-jwt.version>3.12.0</java-jwt.version>
        <javafaker.version>1.0.2</javafaker.version>
        ...
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-amazon-lambda</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-mutiny</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-test-amazon-lambda</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-kafka-client</artifactId>
        </dependency>

Environment (please complete the following information):

  • AWS lambda

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions