micronaut-serialization icon indicating copy to clipboard operation
micronaut-serialization copied to clipboard

FileSerializer not working in native serverless application

Open prashantcodecraft opened this issue 1 year ago • 0 comments

Expected Behavior

If I am using java.io.File inside a pojo, it should be able to process in native serverless application.

Actual Behaviour

Following error is thrown :

Error encoding object [FilesUploadRequest(token=null, file=/tmp/3c5affd8-3326-4f58-be6c-3bee1c02d356748617313657626074.pdf, content=null, filetype=null, filename=3c5affd8-3326-4f58-be6c-3bee1c02d356, title=3c5affd8-3326-4f58-be6c-3bee1c02d356, initialComment=null, channels=[C05G801H5MG])] to JSON: Class com.fasterxml.jackson.databind.ser.std.FileSerializer has no default (no arg) constructor (through reference chain: com.marvin.service.connections.slack.model.slack.FilesUploadRequest["file"])

Steps To Reproduce

  1. Create a native serverless application.
<dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-lambda-java-events</artifactId>
            <version>3.11.2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut</groupId>
            <artifactId>micronaut-http-client</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut.serde</groupId>
            <artifactId>micronaut-serde-jackson</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut.aws</groupId>
            <artifactId>micronaut-function-aws</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut.aws</groupId>
            <artifactId>micronaut-function-aws-custom-runtime</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut.crac</groupId>
            <artifactId>micronaut-crac</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut.data</groupId>
            <artifactId>micronaut-data-hibernate-jpa</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut.mongodb</groupId>
            <artifactId>micronaut-mongo-sync</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut.sql</groupId>
            <artifactId>micronaut-jdbc-hikari</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.micronaut.test</groupId>
            <artifactId>micronaut-test-junit5</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>io.micronaut.build</groupId>
                <artifactId>micronaut-maven-plugin</artifactId>
                <configuration>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <!-- Uncomment to enable incremental compilation -->
                    <!-- <useIncrementalCompilation>false</useIncrementalCompilation> -->

                    <annotationProcessorPaths combine.self="override">
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                        <path>
                            <groupId>io.micronaut</groupId>
                            <artifactId>micronaut-inject-java</artifactId>
                            <version>${micronaut.version}</version>
                        </path>
                        <path>
                            <groupId>io.micronaut.data</groupId>
                            <artifactId>micronaut-data-processor</artifactId>
                            <version>${micronaut.data.version}</version>
                        </path>
                        <path>
                            <groupId>io.micronaut.serde</groupId>
                            <artifactId>micronaut-serde-processor</artifactId>
                            <version>1.5.3</version>
                        </path>
                        <path>
                            <groupId>io.micronaut</groupId>
                            <artifactId>micronaut-graal</artifactId>
                            <version>${micronaut.version}</version>
                        </path>
                        <path>
                            <groupId>io.micronaut</groupId>
                            <artifactId>micronaut-http-validation</artifactId>
                            <version>${micronaut.version}</version>
                        </path>
                        <path>
                            <groupId>io.micronaut</groupId>
                            <artifactId>micronaut-validation</artifactId>
                            <version>${micronaut.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>
  1. Create a Pojo with File as a type in it. for example
@Introspected(classes = File.class)
@Data
@ReflectiveAccess
@Builder
@Serdeable
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class FilesUploadRequest {
    private String token;
    private File file;
    private String content;
    private String filetype;
    private String filename;
    private String title;
}
  1. Use the pojo class in application on runtime, it fails with exception
Error encoding object [FilesUploadRequest(token=null, file=/tmp/3c5affd8-3326-4f58-be6c-3bee1c02d356748617313657626074.pdf, content=null, filetype=null, filename=3c5affd8-3326-4f58-be6c-3bee1c02d356, title=3c5affd8-3326-4f58-be6c-3bee1c02d356, initialComment=null, channels=[C05G801H5MG])] to JSON: Class com.fasterxml.jackson.databind.ser.std.FileSerializer has no default (no arg) constructor (through reference chain: com.marvin.service.connections.slack.model.slack.FilesUploadRequest["file"])

Environment Information

No response

Example Application

No response

Version

3.9.4

prashantcodecraft avatar Aug 02 '23 07:08 prashantcodecraft