quarkusio / quarkus

Quarkus: Supersonic Subatomic Java.
https://quarkus.io
Apache License 2.0
13.44k stars 2.58k forks source link

Quarkus' funky fails on avro on handler's input #30684

Open SMakhrov opened 1 year ago

SMakhrov commented 1 year ago

Describe the bug

I have a simple handler:

public class GreetingFunction {

    @Funq
    public String myFunqyGreeting(TwitterMessage twitterMessage) {
        return "Hello ";
    }

}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TwitterMessage {
    String username;
    String tweet;
    Long timestamp;
}

I have a custom mapper:

public class ObjectMapperConfiguration {
    @Singleton
    ObjectMapper objectMapper(Instance<ObjectMapperCustomizer> customizers) {
        // Your own `ObjectMapper` or one provided by another library
        ObjectMapper mapper = new AvroMapper();
        // Apply customizations (includes customizations from Quarkus)
        for (ObjectMapperCustomizer customizer : customizers) {
            customizer.customize(mapper);
        }
        return mapper;
    }
}

where AvroMapper() got from pom.xml dependency:

    <dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-avro</artifactId>
      <version>2.8.5</version>
    </dependency>

according to this: https://github.com/FasterXML/jackson-dataformats-binary/tree/master/avro#creating-objectmapper

I'm trying to send to it request with avro input data:

curl -i --request POST -H 'Content-Type: avro/binary' -d twitter.avro http://localhost:8080

Example of twitter.avro you can get from https://github.com/miguno/avro-cli-examples/blob/master/twitter.avro

Expected behavior

Endpoint works without error

Actual behavior

Error: 2023-01-28 21:25:20,818 ERROR [io.qua.ama.lam.run.AbstractLambdaPollLoop] (Lambda Thread (DEVELOPMENT)) Failed to run lambda (DEVELOPMENT): com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'twitter': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false') at [Source: (sun.net.www.protocol.http.HttpURLConnection$HttpInputStream); line: 1, column: 9] at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2418) at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:759) at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:3693) at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:3666) at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._matchToken2(UTF8StreamJsonParser.java:3007) at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._matchTrue(UTF8StreamJsonParser.java:2941) at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:878) at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:793) at com.fasterxml.jackson.databind.ObjectReader._initForReading(ObjectReader.java:357) at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2095) at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481) at io.quarkus.amazon.lambda.runtime.JacksonInputReader.readValue(JacksonInputReader.java:17) at io.quarkus.amazon.lambda.runtime.AbstractLambdaPollLoop$1.run(AbstractLambdaPollLoop.java:135) at java.base/java.lang.Thread.run(Thread.java:833)

How to Reproduce?

No response

Output of uname -a or ver

21.4.0 Darwin Kernel Version 21.4.0: Mon Feb 21 20:35:58 PST 2022; root:xnu-8020.101.4~2/RELEASE_ARM64_T6000 arm64

Output of java -version

17.0.4+8-jvmci-22.2-b06

GraalVM version (if different from Java)

No response

Quarkus version or git rev

2.16.0.Final

Build tool (ie. output of mvnw --version or gradlew --version)

Maven 3.8.6

Additional information

I'm working with AWS Lambda. In this lambda is configured trigger on Apache Kafka messages. Messages are getting in avro format https://avro.apache.org/. I want to receive messages in Lambda handler in Quarkus.

quarkus-bot[bot] commented 1 year ago

/cc @matejvasek (funqy), @patriot1burke (funqy)