1

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

ElBlokko
  • 31
  • 3
  • Show `SnsNotification.class` code – XtremeBaumer May 11 '22 at 11:58
  • it's copied from here: https://quarkiverse.github.io/quarkiverse-docs/quarkus-amazon-services/dev/amazon-sns.html – ElBlokko May 11 '22 at 12:16
  • Can you upload your code somewhere so I can run it? – geoand May 12 '22 at 06:20
  • @geoand thanks to your comment I've moved this project to a separate project and there it is working, but when I move it back to my main project as a submodule it throws this error, after removing the parent from pom.xml it works again as expected. It seems that I've some properties in parent pom that makes my build to fail. – ElBlokko May 12 '22 at 08:09
  • So the issue is caused by having a dependency to com.fasterxml.jackson.core.jackson-core in parent pom in dependency manager. After I've removed that app is working fine. It seems to be bug since I'm not using it as a dependency in specified project. – ElBlokko May 12 '22 at 11:38
  • reproducer here: https://github.com/ElBlokko/parent-reproducer/ – ElBlokko May 12 '22 at 11:46
  • Using the reproducer, what does one need to do to surface the issue? I noticed that the tests you added all pass – geoand May 13 '22 at 05:43
  • when you I try to build a native-image it fails quarkus build --native -Dquarkus.native.container-build=true – ElBlokko May 13 '22 at 09:56

0 Answers0