I've created my next native lambda function and for some reason I get error
Error: com.oracle.graal.pointsto.constraints.UnresolvedElementException: Discovered unresolved field during parsing: com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_WITH_CONTEXT_TIME_ZONE.
My pom.xml looks like this:
<artifactId>manager-processor</artifactId>
<version>1.0.17-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>${quarkus.platform.artifact-id}</artifactId>
<version>${quarkus.platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.quarkiverse.amazonservices</groupId>
<artifactId>quarkus-amazon-services-bom</artifactId>
<version>${quarkus-amazon-services.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-amazon-lambda-rest</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.logmanager</groupId>
<artifactId>log4j2-jboss-logmanager</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-logging-json</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${compiler-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<configuration>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>native</id>
<activation>
<property>
<name>native</name>
</property>
</activation>
<properties>
<quarkus.package.type>native</quarkus.package.type>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<systemPropertyVariables>
<native.image.path>
${project.build.directory}/${project.build.finalName}-runner
</native.image.path>
<java.util.logging.manager>org.jboss.logmanager.LogManager
</java.util.logging.manager>
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
and lambda handler:
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.model.SnsNotification;
import io.smallrye.mutiny.Uni;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.enterprise.context.ApplicationScoped;
import javax.ws.rs.Consumes;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@ApplicationScoped
@Path("")
public class ProcessorResource {
private static final Logger LOGGER = LogManager.getLogger(ProcessorResource.class);
private static final String NOTIFICATION_TYPE = "Notification";
private final ObjectMapper objectMapper = new ObjectMapper();
@POST
@Consumes({MediaType.TEXT_PLAIN})
public Uni<Response> notificationEndpoint(@HeaderParam("x-amz-sns-message-type") String messageType, String message)
throws JsonProcessingException {
if (messageType == null) {
return Uni.createFrom().item(Response.status(400).build());
}
if (messageType.equals(NOTIFICATION_TYPE)) {
return Uni.createFrom().item(objectMapper.readValue(message, SnsNotification.class))
.onItem().invoke(snsNotification -> LOGGER.info(snsNotification.toString()))
.onItem().transform(quark -> Response.ok().build());
}
return null;
}
}
Detailed message:
Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Unsupported features in 2 methods
Detailed message:
Error: com.oracle.graal.pointsto.constraints.UnresolvedElementException: Discovered unresolved field during parsing: com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_WITH_CONTEXT_TIME_ZONE. To diagnose the issue you can use the --allow-incomplete-classpath option. The missing field is then reported at run time when it is accessed the first time.
Trace:
at parsing com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializerBase.formatValue(InstantSerializerBase.java:145)
Call path from entry point to com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializerBase.formatValue(Temporal, SerializerProvider):
at com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializerBase.formatValue(InstantSerializerBase.java:140)
at com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializerBase.serialize(InstantSerializerBase.java:105)
at com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializerBase.serialize(InstantSerializerBase.java:45)
at com.fasterxml.jackson.datatype.jdk8.StreamSerializer.lambda$serialize$0(StreamSerializer.java:76)
at com.fasterxml.jackson.datatype.jdk8.StreamSerializer$$Lambda$1244/0x00000007c1b69040.accept(Unknown Source)
at java.util.stream.SpinedBuffer.forEach(SpinedBuffer.java:246)
at java.util.stream.SpinedBuffer.toString(SpinedBuffer.java:269)
at java.lang.String.valueOf(String.java:2951)
at java.lang.StringBuilder.append(StringBuilder.java:172)
at java.net.Proxy.<init>(Proxy.java:95)
at com.oracle.svm.jni.JNIJavaCallWrappers.jniInvoke_VARARGS_Nonvirtual_Proxy_constructor_4c292c8081165fc77e6ffffc00ffc9c7f9d770eb(generated:0)
command I use: quarkus build --native -Dquarkus.native.container-build=true