spring-attic / spring-native

Spring Native is now superseded by Spring Boot 3 official native support
https://docs.spring.io/spring-boot/docs/current/reference/html/native-image.html
Apache License 2.0
2.74k stars 356 forks source link

`repeated interface: org.springframework.aop.SpringProxy` with spring-security annotations on `@RestController` #950

Closed ch4mpy closed 3 years ago

ch4mpy commented 3 years ago

I get following error as soon as I use both @RequiredArgsConstructor and @PreAuthorize in the same a @RestController :

[INFO]     [creator]     Error: Error parsing dynamic proxy configuration in file:/workspace/META-INF/native-image/org.springframework.aot/spring-aot/proxy-config.json:
[INFO]     [creator]     java.lang.IllegalArgumentException: repeated interface: org.springframework.aop.SpringProxy
[INFO]     [creator]     Verify that the configuration matches the schema described in the -H:PrintFlags=+ output for option DynamicProxyConfigurationResources.
[INFO]     [creator]     com.oracle.svm.core.util.UserError$UserException: Error parsing dynamic proxy configuration in file:/workspace/META-INF/native-image/org.springframework.aot/spring-aot/proxy-config.json:
[INFO]     [creator]     java.lang.IllegalArgumentException: repeated interface: org.springframework.aop.SpringProxy
[INFO]     [creator]     Verify that the configuration matches the schema described in the -H:PrintFlags=+ output for option DynamicProxyConfigurationResources.
[INFO]     [creator]            at com.oracle.svm.core.util.UserError.abort(UserError.java:68)
[INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils.doParseAndRegister(ConfigurationParserUtils.java:139)
[INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils.lambda$parseAndRegisterConfigurations$3(ConfigurationParserUtils.java:120)
[INFO]     [creator]            at java.base/java.util.stream.ReferencePipeline$4$1.accept(ReferencePipeline.java:212)
[INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils$1.tryAdvance(ConfigurationParserUtils.java:109)
[INFO]     [creator]            at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:326)
[INFO]     [creator]            at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
[INFO]     [creator]            at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:274)
[INFO]     [creator]            at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
[INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
[INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
[INFO]     [creator]            at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312)
[INFO]     [creator]            at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
[INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
[INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
[INFO]     [creator]            at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
[INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
[INFO]     [creator]            at java.base/java.util.stream.IntPipeline.reduce(IntPipeline.java:491)
[INFO]     [creator]            at java.base/java.util.stream.IntPipeline.sum(IntPipeline.java:449)
[INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils.parseAndRegisterConfigurations(ConfigurationParserUtils.java:126)
[INFO]     [creator]            at com.oracle.svm.reflect.proxy.hosted.DynamicProxyFeature.duringSetup(DynamicProxyFeature.java:80)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.lambda$setupNativeImage$18(NativeImageGenerator.java:915)
[INFO]     [creator]            at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:71)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:915)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:580)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$2(NativeImageGenerator.java:495)
[INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1407)
[INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
[INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
[INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
[INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
[INFO]     [creator]            at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
[INFO]     [creator]     Error: Image build request failed with exit status 1
[INFO]     [creator]     unable to invoke layer creator
[INFO]     [creator]     unable to contribute native-image layer
[INFO]     [creator]     error running build
[INFO]     [creator]     exit status 1
[INFO]     [creator]     ERROR: failed to build: exit status 1

This can be reproduced starting from security-method-webflux sample and running mvn spring-boot:build-image. A PR reproducing the error follows.

ch4mpy commented 3 years ago

security-method-webflux is a project I created for #938. My bad. I can't reproduce yet starting from security-method, so I'm closing.

ch4mpy commented 3 years ago

I couldn't reproduce from a sample (yet ?). But from my project, the error goes as soon as I comment every @PreAuthorize (keeping @EnableGlobalMethodSecurity(prePostEnabled = true) is ok.

To reproduce:

git clone git@github.com:ch4mpy/starter.git
cd starter/api
mvn clean package -Pbuild-native-image -DskipTests -pl webflux/starter-api-webflux
ttddyy commented 3 years ago

Hi @ch4mpy,

I tried your project but couldn't repro your issue. Rather, I don't get to the point you are describing.

The error I see after the described mvn command is:

[INFO]     [creator]     Warning: class initialization of class io.netty.handler.ssl.ReferenceCountedOpenSslEngine failed with exception java.lang.NoClassDefFoundError: io/netty/internal/tcnative/SSL. This class will be initialized at run time because option --allow-incomplete-classpath is used for image building. Use the option --initialize-at-run-time=io.netty.handler.ssl.ReferenceCountedOpenSslEngine to explicitly request delayed initialization of this class.
[INFO]     [creator]     05:35:26.616 [ForkJoinPool-2-worker-7] ERROR io.netty.handler.ssl.BouncyCastleAlpnSslUtils - Unable to initialize BouncyCastleAlpnSslUtils.
[INFO]     [creator]     java.lang.ClassNotFoundException: org.bouncycastle.jsse.BCSSLEngine
[INFO]     [creator]        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)...

This seems to be the netty issue https://github.com/netty/netty/issues/11369

After I commented @PreAuthorize in the code, I hit the same above error.

I think your sample project is still too complex. I recommend creating much simpler repro project, otherwise it is bit too much for others to spend time on.

FYI, your instruction required mvn install before building image.

ch4mpy commented 3 years ago

Hi @ttddyy and thank you for having a look at my problem. Which module did you package?

Interestingly enough, since the build pulled a new paketobuildpacks/builder:tiny image, the error is gone on my machine for one of the two application in my project but not the other.

So currently, on my Widows 10 machine with Docker Desktop and graalvm-ce-java11-21.2.0 as JDK :

Here is the content of proxy-config.json:

[
  [
    "org.springframework.data.annotation.QueryAnnotation",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.data.annotation.Id",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "java.util.List",
    "org.springframework.aop.SpringProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy"
  ],
  [
    "org.springframework.web.bind.annotation.RequestParam",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.web.bind.annotation.RequestBody",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.web.bind.annotation.PathVariable",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.web.bind.annotation.ModelAttribute",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.stereotype.Controller",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.web.bind.annotation.ControllerAdvice",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.web.bind.annotation.RequestHeader",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.beans.factory.annotation.Qualifier",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.web.bind.annotation.RequestMapping",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.context.annotation.Lazy",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.boot.context.properties.ConfigurationProperties",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.security.config.annotation.authentication.configuration.EnableGlobalAuthentication",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.security.test.context.support.WithSecurityContext",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.boot.actuate.endpoint.annotation.Endpoint",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.boot.actuate.endpoint.annotation.EndpointExtension",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.stereotype.Component",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.aop.SpringProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.aop.framework._AdvisedSupportAware",
    "org.springframework.aop.SpringProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy"
  ],
  [
    "org.springframework.web.bind.annotation.ResponseStatus",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.boot.autoconfigure.EnableAutoConfiguration",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.data.repository.reactive.ReactiveSortingRepository",
    "org.springframework.aop.SpringProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy"
  ],
  [
    "com.c4_soft.starter.persistence.user.LifixUserRepo",
    "org.springframework.aop.SpringProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy"
  ],
  [
    "com.c4_soft.starter.persistence.user.LifixUserRepo",
    "org.springframework.data.repository.Repository",
    "org.springframework.transaction.interceptor.TransactionalProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy"
  ],
  [
    "com.c4_soft.starter.persistence.user.LifixUserRepo",
    "org.springframework.data.repository.Repository",
    "org.springframework.transaction.interceptor.TransactionalProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy",
    "java.io.Serializable"
  ],
  [
    "com.c4_soft.starter.persistence.intervention.FaultAttachmentRepo",
    "org.springframework.aop.SpringProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy"
  ],
  [
    "com.c4_soft.starter.persistence.intervention.FaultAttachmentRepo",
    "org.springframework.data.repository.Repository",
    "org.springframework.transaction.interceptor.TransactionalProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy"
  ],
  [
    "com.c4_soft.starter.persistence.intervention.FaultAttachmentRepo",
    "org.springframework.data.repository.Repository",
    "org.springframework.transaction.interceptor.TransactionalProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy",
    "java.io.Serializable"
  ],
  [
    "org.springframework.data.r2dbc.repository.Query",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "com.c4_soft.starter.persistence.intervention.FaultRepo",
    "org.springframework.aop.SpringProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy"
  ],
  [
    "com.c4_soft.starter.persistence.intervention.FaultRepo",
    "org.springframework.data.repository.Repository",
    "org.springframework.transaction.interceptor.TransactionalProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy"
  ],
  [
    "com.c4_soft.starter.persistence.intervention.FaultRepo",
    "org.springframework.data.repository.Repository",
    "org.springframework.transaction.interceptor.TransactionalProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy",
    "java.io.Serializable"
  ],
  [
    "org.springframework.web.bind.annotation.RequestPart",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.transaction.annotation.Transactional",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ],
  [
    "org.springframework.context.annotation.Bean",
    "org.springframework.core.annotation.SynthesizedAnnotation"
  ]
]
ttddyy commented 3 years ago

@ch4mpy I have good news for you. I upgraded your app's spring boot version to 2.5.3, then mvn clean package -Pbuild-image -DskipTests -pl webflux/starter-api-webflux ran successfully. (no code change)

My env is on osx.

> java -version
openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment GraalVM CE 21.2.0 (build 11.0.12+6-jvmci-21.2-b08)
OpenJDK 64-Bit Server VM GraalVM CE 21.2.0 (build 11.0.12+6-jvmci-21.2-b08, mixed mode, sharing)
ch4mpy commented 3 years ago

@ttddyy bumping to spring-boot 2.5.3 does not improve the situation for webflux/starter-api-webflux on my Windows machine.

Will try to mount a Linux distribution...

ch4mpy commented 3 years ago

I formatted my hard-drive and installed both Windows 10 and Fedora 34. With fresh install and exact same code, both build fail with different errors.

I've updated spring-boot to 2.5.3, but kept spring native 0.10.1 as I have errors with current 0.10.2-SNAPSHOT even on webmvc module

git clone git@github.com:ch4mpy/starter.git
cd starter/api
mvn clean install -DskipTests
mvn package -Pbuild-image -DskipTests
ttddyy commented 3 years ago

I have reproduced your second issue(the one on linux) with boot=2.5.2, spring-native=0.9.2, graalvm=CE 21.2.0 on osx. Found this ticket on netty https://github.com/netty/netty/issues/11427 and the workaround is https://github.com/netty/netty/issues/11477 .

By applying the following workaround noted on the ticket, the failure went away. (note: I used boot 2.5.2)

diff --git a/api/pom.xml b/api/pom.xml
index 002fc42..c66249b 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -171,6 +171,8 @@
                                                                                        -H:+ReportExceptionStackTraces
                                                                                        --enable-https
                                                                                        -H:+InlineBeforeAnalysis
+                                                                                       --initialize-at-run-time=io.netty.handler.codec.compression.BrotliDecoder
+                                                                                       --verbose
                                                                                </BP_NATIVE_IMAGE_BUILD_ARGUMENTS>
                                                                        </env>
                                                                </image>
ch4mpy commented 3 years ago

@ttddyy I can confirm that, using your build arguments, build is successful on my machine under Fedora 34 (both using build-image and native profiles).

Error is unchanged under windows.

ttddyy commented 3 years ago

I don't have windows machine, so I cannot check but according to the stacktrace, it is failing when parsing the file:/workspace/META-INF/native-image/org.springframework.ot/spring-aot/proxy-config.json which is generated by spring-aot plugin. So, I suggest checking this file especially the org.springframework.aop.SpringProxy related entries.

ch4mpy commented 3 years ago

I already have joined the generated proxy-config.json earlier. Will try to take some time tomorow to find some doc on how the AoT plugin generates it.

ch4mpy commented 3 years ago

@ttddyy I haven't found much doc on how spring-aot-maven-plugin generates proxy-config.json on Windows.

I still face the same issue (on Windows only, not Linux) and still have no idea why.

spring-boot 2.5.4 spring-native 0.10.4-SNAPSHOT spring-aot-maven-plugin 0.10.4-SNAPSHOT

git clone git@github.com:ch4mpy/starter.git
cd starter/api
mvn clean package -Pbuild-native-image -DskipTests -pl webflux/starter-api-webflux

P.S. the error actually occurs with spring-boot-maven-plugin. Here is complete stack-trace of spring-boot-maven-plugin:build-image:

[INFO] --- spring-boot-maven-plugin:2.5.4:build-image (build-image) @ starter-api-webflux ---
[INFO] Building image 'docker.io/library/starter-api-webflux:0.0.1-SNAPSHOT'
[INFO]
[INFO]  > Executing lifecycle version v0.11.4
[INFO]  > Using build cache volume 'pack-cache-9df18382c02.build'
[INFO]
[INFO]  > Running creator
[INFO]     [creator]     ===> DETECTING
[INFO]     [creator]     5 of 12 buildpacks participating
[INFO]     [creator]     paketo-buildpacks/ca-certificates 2.3.2
[INFO]     [creator]     paketo-buildpacks/graalvm         6.3.0
[INFO]     [creator]     paketo-buildpacks/executable-jar  5.1.2
[INFO]     [creator]     paketo-buildpacks/spring-boot     4.4.2
[INFO]     [creator]     paketo-buildpacks/native-image    4.2.0
[INFO]     [creator]     ===> ANALYZING
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/ca-certificates:helper" from app image
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:helper" from app image
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:spring-cloud-bindings" from app image
[INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:web-application-type" from app image
[INFO]     [creator]     ===> RESTORING
[INFO]     [creator]     ===> BUILDING
[INFO]     [creator]
[INFO]     [creator]     Paketo CA Certificates Buildpack 2.3.2
[INFO]     [creator]       https://github.com/paketo-buildpacks/ca-certificates
[INFO]     [creator]       Launch Helper: Reusing cached layer
[INFO]     [creator]       CA Certificates: Contributing to layer
[INFO]     [creator]         Added 1 additional CA certificate(s) to system truststore
[INFO]     [creator]         Writing env.build/SSL_CERT_DIR.append
[INFO]     [creator]         Writing env.build/SSL_CERT_DIR.delim
[INFO]     [creator]         Writing env.build/SSL_CERT_FILE.default
[INFO]     [creator]
[INFO]     [creator]     Paketo GraalVM Buildpack 6.3.0
[INFO]     [creator]       https://github.com/paketo-buildpacks/graalvm
[INFO]     [creator]       Build Configuration:
[INFO]     [creator]         $BP_JVM_VERSION              16.*            the Java version
[INFO]     [creator]       Launch Configuration:
[INFO]     [creator]         $BPL_JVM_HEAD_ROOM           0               the headroom in memory calculation
[INFO]     [creator]         $BPL_JVM_LOADED_CLASS_COUNT  35% of classes  the number of loaded classes in memory calculation
[INFO]     [creator]         $BPL_JVM_THREAD_COUNT        250             the number of threads in memory calculation
[INFO]     [creator]         $JAVA_TOOL_OPTIONS                           the JVM launch flags
[INFO]     [creator]       GraalVM JDK 16.0.2: Contributing to layer
[INFO]     [creator]         Downloading from https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-21.2.0/graalvm-ce-java16-linux-amd64-21.2.0.tar.gz
[INFO]     [creator]         Verifying checksum
[INFO]     [creator]         Expanding to /layers/paketo-buildpacks_graalvm/jdk
[INFO]     [creator]         Adding 130 container CA certificates to JVM truststore
[INFO]     [creator]       GraalVM Native Image Substrate VM 16.0.2
[INFO]     [creator]         Downloading from https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-21.2.0/native-image-installable-svm-java16-linux-amd64-21.2.0.jar
[INFO]     [creator]         Verifying checksum
[INFO]     [creator]         Installing substrate VM
[INFO]     [creator]     Processing Component archive: /tmp/aa8bb0be49d74a1655c42244150d0c2b0286d26bb8fca1c1b43c0b3e081a42e3/native-image-installable-svm-java16-linux-amd64-21.2.0.jar
[INFO]     [creator]     Installing new component: Native Image (org.graalvm.native-image, version 21.2.0)
[INFO]     [creator]         Writing env.build/JAVA_HOME.override
[INFO]     [creator]         Writing env.build/JDK_HOME.override
[INFO]     [creator]
[INFO]     [creator]     Paketo Executable JAR Buildpack 5.1.2
[INFO]     [creator]       https://github.com/paketo-buildpacks/executable-jar
[INFO]     [creator]       Class Path: Contributing to layer
[INFO]     [creator]         Writing env.build/CLASSPATH.delim
[INFO]     [creator]         Writing env.build/CLASSPATH.prepend
[INFO]     [creator]
[INFO]     [creator]     Paketo Spring Boot Buildpack 4.4.2
[INFO]     [creator]       https://github.com/paketo-buildpacks/spring-boot
[INFO]     [creator]       Class Path: Contributing to layer
[INFO]     [creator]         Writing env.build/CLASSPATH.append
[INFO]     [creator]         Writing env.build/CLASSPATH.delim
[INFO]     [creator]       Image labels:
[INFO]     [creator]         org.opencontainers.image.title
[INFO]     [creator]         org.opencontainers.image.version
[INFO]     [creator]         org.springframework.boot.version
[INFO]     [creator]
[INFO]     [creator]     Paketo Native Image Buildpack 4.2.0
[INFO]     [creator]       https://github.com/paketo-buildpacks/native-image
[INFO]     [creator]       Build Configuration:
[INFO]     [creator]         $BP_NATIVE_IMAGE                  true                                                                                                                                                                                                                                                                                                                                       enable native image build
[INFO]     [creator]         $BP_NATIVE_IMAGE_BUILD_ARGUMENTS  -H:+ReportExceptionStackTraces
[INFO]     [creator]                                                                                                            --enable-https
[INFO]     [creator]                                                                                                            -H:+InlineBeforeAnalysis
[INFO]     [creator]                                                                                                            --initialize-at-run-time=io.netty.handler.codec.compression.BrotliDecoder
[INFO]     [creator]                                                                                                            --verbose
[INFO]     [creator]                                                                                                            --allow-incomplete-classpath
[INFO]     [creator]                                                                                                            --trace-class-initialization=org.springframework.util.unit.DataSize  arguments to pass to the native-image command
[INFO]     [creator]       Native Image: Contributing to layer
[INFO]     [creator]         GraalVM 21.2.0 Java 16 CE (Java Version 16.0.2+7-jvmci-21.2-b08)
[INFO]     [creator]         Executing native-image -H:+ReportExceptionStackTraces --enable-https -H:+InlineBeforeAnalysis --initialize-at-run-time=io.netty.handler.codec.compression.BrotliDecoder --verbose --allow-incomplete-classpath --trace-class-initialization=org.springframework.util.unit.DataSize -H:+StaticExecutableWithDynamicLibC -H:Name=/layers/paketo-buildpacks_native-image/native-image/com.c4_soft.starter.FaultsEndpointsApplication -cp /workspace:/workspace/BOOT-INF/classes:/workspace/BOOT-INF/lib/common-exception-webflux-0.0.1-SNAPSHOT.jar:/workspace/BOOT-INF/lib/reactor-core-3.4.9.jar:/workspace/BOOT-INF/lib/reactive-streams-1.0.3.jar:/workspace/BOOT-INF/lib/spring-context-5.3.9.jar:/workspace/BOOT-INF/lib/spring-aop-5.3.9.jar:/workspace/BOOT-INF/lib/spring-beans-5.3.9.jar:/workspace/BOOT-INF/lib/spring-expression-5.3.9.jar:/workspace/BOOT-INF/lib/spring-web-5.3.9.jar:/workspace/BOOT-INF/lib/spring-boot-autoconfigure-2.5.4.jar:/workspace/BOOT-INF/lib/common-security-webflux-0.0.1-SNAPSHOT.jar:/workspace/BOOT-INF/lib/spring-webflux-5.3.9.jar:/workspace/BOOT-INF/lib/spring-security-config-5.5.2.jar:/workspace/BOOT-INF/lib/spring-security-core-5.5.2.jar:/workspace/BOOT-INF/lib/spring-security-crypto-5.5.2.jar:/workspace/BOOT-INF/lib/spring-security-oauth2-jose-5.5.2.jar:/workspace/BOOT-INF/lib/spring-security-oauth2-core-5.5.2.jar:/workspace/BOOT-INF/lib/nimbus-jose-jwt-9.10.1.jar:/workspace/BOOT-INF/lib/jcip-annotations-1.0-1.jar:/workspace/BOOT-INF/lib/common-storage-0.0.1-SNAPSHOT.jar:/workspace/BOOT-INF/lib/spring-boot-2.5.4.jar:/workspace/BOOT-INF/lib/starter-domain-relational-0.0.1-SNAPSHOT.jar:/workspace/BOOT-INF/lib/spring-data-r2dbc-1.3.4.jar:/workspace/BOOT-INF/lib/spring-data-relational-2.2.4.jar:/workspace/BOOT-INF/lib/spring-r2dbc-5.3.9.jar:/workspace/BOOT-INF/lib/spring-tx-5.3.9.jar:/workspace/BOOT-INF/lib/slf4j-api-1.7.32.jar:/workspace/BOOT-INF/lib/spring-data-commons-2.5.4.jar:/workspace/BOOT-INF/lib/logback-classic-1.2.5.jar:/workspace/BOOT-INF/lib/logback-core-1.2.5.jar:/workspace/BOOT-INF/lib/log4j-to-slf4j-2.14.1.jar:/workspace/BOOT-INF/lib/log4j-api-2.14.1.jar:/workspace/BOOT-INF/lib/jul-to-slf4j-1.7.32.jar:/workspace/BOOT-INF/lib/jakarta.annotation-api-1.3.5.jar:/workspace/BOOT-INF/lib/snakeyaml-1.28.jar:/workspace/BOOT-INF/lib/spring-boot-actuator-autoconfigure-2.5.4.jar:/workspace/BOOT-INF/lib/spring-boot-actuator-2.5.4.jar:/workspace/BOOT-INF/lib/jackson-databind-2.12.4.jar:/workspace/BOOT-INF/lib/jackson-annotations-2.12.4.jar:/workspace/BOOT-INF/lib/jackson-core-2.12.4.jar:/workspace/BOOT-INF/lib/jackson-datatype-jsr310-2.12.4.jar:/workspace/BOOT-INF/lib/micrometer-core-1.7.3.jar:/workspace/BOOT-INF/lib/HdrHistogram-2.1.12.jar:/workspace/BOOT-INF/lib/LatencyUtils-2.0.3.jar:/workspace/BOOT-INF/lib/r2dbc-spi-0.8.5.RELEASE.jar:/workspace/BOOT-INF/lib/r2dbc-pool-0.8.7.RELEASE.jar:/workspace/BOOT-INF/lib/reactor-pool-0.2.6.jar:/workspace/BOOT-INF/lib/jackson-datatype-jdk8-2.12.4.jar:/workspace/BOOT-INF/lib/jackson-module-parameter-names-2.12.4.jar:/workspace/BOOT-INF/lib/reactor-netty-http-1.0.10.jar:/workspace/BOOT-INF/lib/netty-codec-http-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-common-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-buffer-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-transport-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-codec-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-codec-http2-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-resolver-dns-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-resolver-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-codec-dns-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-resolver-dns-native-macos-4.1.67.Final-osx-x86_64.jar:/workspace/BOOT-INF/lib/netty-transport-native-unix-common-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-transport-native-epoll-4.1.67.Final-linux-x86_64.jar:/workspace/BOOT-INF/lib/spring-native-0.10.4-SNAPSHOT.jar:/workspace/BOOT-INF/lib/spring-security-oauth2-addons-2.6.1.jar:/workspace/BOOT-INF/lib/spring-security-oauth2-resource-server-5.5.2.jar:/workspace/BOOT-INF/lib/spring-security-web-5.5.2.jar:/workspace/BOOT-INF/lib/r2dbc-postgresql-0.8.8.RELEASE.jar:/workspace/BOOT-INF/lib/client-2.1.jar:/workspace/BOOT-INF/lib/common-2.1.jar:/workspace/BOOT-INF/lib/saslprep-1.1.jar:/workspace/BOOT-INF/lib/stringprep-1.1.jar:/workspace/BOOT-INF/lib/reactor-netty-1.0.10.jar:/workspace/BOOT-INF/lib/reactor-netty-core-1.0.10.jar:/workspace/BOOT-INF/lib/netty-handler-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-handler-proxy-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-codec-socks-4.1.67.Final.jar:/workspace/BOOT-INF/lib/reactor-netty-http-brave-1.0.10.jar:/workspace/BOOT-INF/lib/brave-instrumentation-http-5.13.3.jar:/workspace/BOOT-INF/lib/brave-5.13.3.jar:/workspace/BOOT-INF/lib/zipkin-reporter-brave-2.16.3.jar:/workspace/BOOT-INF/lib/zipkin-reporter-2.16.3.jar:/workspace/BOOT-INF/lib/zipkin-2.23.2.jar:/workspace/BOOT-INF/lib/postgresql-42.2.23.jar:/workspace/BOOT-INF/lib/checker-qual-3.5.0.jar:/workspace/BOOT-INF/lib/spring-security-oauth2-test-addons-2.6.1.jar:/workspace/BOOT-INF/lib/spring-boot-test-autoconfigure-2.5.4.jar:/workspace/BOOT-INF/lib/spring-security-test-5.5.2.jar:/workspace/BOOT-INF/lib/mockito-core-3.9.0.jar:/workspace/BOOT-INF/lib/byte-buddy-1.10.22.jar:/workspace/BOOT-INF/lib/byte-buddy-agent-1.10.22.jar:/workspace/BOOT-INF/lib/objenesis-3.2.jar:/workspace/BOOT-INF/lib/spring-boot-test-2.5.4.jar:/workspace/BOOT-INF/lib/spring-core-5.3.9.jar:/workspace/BOOT-INF/lib/spring-jcl-5.3.9.jar:/workspace/BOOT-INF/lib/spring-test-5.3.9.jar:/workspace/BOOT-INF/lib/spring-boot-jarmode-layertools-2.5.4.jar com.c4_soft.starter.FaultsEndpointsApplication
[INFO]     [creator]     Apply file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/native-image.properties
[INFO]     [creator]     Warning: Ignoring server-mode native-image argument --no-server.
[INFO]     [creator]     Apply file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/reflect-config.json
[INFO]     [creator]     Apply file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/resource-config.json
[INFO]     [creator]     Apply file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/proxy-config.json
[INFO]     [creator]     Apply file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/serialization-config.json
[INFO]     [creator]     Apply jar:file:///workspace/BOOT-INF/lib/micrometer-core-1.7.3.jar!/META-INF/native-image/io.micrometer/micrometer-core/native-image.properties
[INFO]     [creator]     Apply jar:file:///workspace/BOOT-INF/lib/micrometer-core-1.7.3.jar!/META-INF/native-image/io.micrometer/micrometer-core/reflect-config.json
[INFO]     [creator]     Apply jar:file:///workspace/BOOT-INF/lib/netty-codec-http-4.1.67.Final.jar!/META-INF/native-image/io.netty/codec-http/native-image.properties
[INFO]     [creator]     Apply jar:file:///workspace/BOOT-INF/lib/netty-common-4.1.67.Final.jar!/META-INF/native-image/io.netty/common/native-image.properties
[INFO]     [creator]     Apply jar:file:///workspace/BOOT-INF/lib/netty-buffer-4.1.67.Final.jar!/META-INF/native-image/io.netty/buffer/native-image.properties
[INFO]     [creator]     Apply jar:file:///workspace/BOOT-INF/lib/netty-transport-4.1.67.Final.jar!/META-INF/native-image/io.netty/transport/native-image.properties
[INFO]     [creator]     Apply jar:file:///workspace/BOOT-INF/lib/netty-codec-http2-4.1.67.Final.jar!/META-INF/native-image/io.netty/codec-http2/native-image.properties
[INFO]     [creator]     Apply jar:file:///workspace/BOOT-INF/lib/netty-resolver-dns-4.1.67.Final.jar!/META-INF/native-image/io.netty/resolver-dns/native-image.properties
[INFO]     [creator]     Apply jar:file:///workspace/BOOT-INF/lib/netty-handler-4.1.67.Final.jar!/META-INF/native-image/io.netty/handler/native-image.properties
[INFO]     [creator]     Executing [
[INFO]     [creator]     /layers/paketo-buildpacks_graalvm/jdk/bin/java \
[INFO]     [creator]     -XX:+UseParallelGC \
[INFO]     [creator]     -XX:+UnlockExperimentalVMOptions \
[INFO]     [creator]     -XX:+EnableJVMCI \
[INFO]     [creator]     -Dtruffle.TrustAllTruffleRuntimeProviders=true \
[INFO]     [creator]     -Dtruffle.TruffleRuntime=com.oracle.truffle.api.impl.DefaultTruffleRuntime \
[INFO]     [creator]     -Dgraalvm.ForcePolyglotInvalid=true \
[INFO]     [creator]     -Dgraalvm.locatorDisabled=true \
[INFO]     [creator]     -Dsubstratevm.IgnoreGraalVersionCheck=true \
[INFO]     [creator]     --add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.access.foreign=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.event=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.loader=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.logger=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.module=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.org.xml.sax.helpers=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.perf=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.util.xml.impl=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/jdk.internal.util.xml=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.invoke.util=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.reflect.annotation=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.reflect.generics.repository=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.reflect.generics.tree=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.security.jca=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.security.provider=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.security.util=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.text.spi=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.util.calendar=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.util.locale.provider=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.base/sun.util.resources=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=java.xml.crypto/org.jcp.xml.dsig.internal.dom=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.aarch64=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.amd64=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.site=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code.stack=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.code=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.common=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.hotspot=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.meta=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.runtime=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.internal.vm.ci/jdk.vm.ci.services=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.jfr/jdk.jfr.events=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.jfr/jdk.jfr.internal.consumer=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.jfr/jdk.jfr.internal.handlers=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.jfr/jdk.jfr.internal.jfc=ALL-UNNAMED \
[INFO]     [creator]     --add-exports=jdk.jfr/jdk.jfr.internal=ALL-UNNAMED \
[INFO]     [creator]     -XX:+UseJVMCINativeLibrary \
[INFO]     [creator]     -Xss10m \
[INFO]     [creator]     -Xms1g \
[INFO]     [creator]     -Xmx14g \
[INFO]     [creator]     -Duser.country=US \
[INFO]     [creator]     -Duser.language=en \
[INFO]     [creator]     -Djava.awt.headless=true \
[INFO]     [creator]     -Dorg.graalvm.version=21.2.0 \
[INFO]     [creator]     -Dorg.graalvm.config=CE \
[INFO]     [creator]     -Dcom.oracle.graalvm.isaot=true \
[INFO]     [creator]     -Djava.system.class.loader=com.oracle.svm.hosted.NativeImageSystemClassLoader \
[INFO]     [creator]     -Dawt.toolkit=sun.awt.X11.XToolkit \
[INFO]     [creator]     -Djava.awt.graphicsenv=sun.awt.X11GraphicsEnvironment \
[INFO]     [creator]     -Djava.awt.printerjob=sun.print.PSPrinterJob \
[INFO]     [creator]     -Xshare:off \
[INFO]     [creator]     --module-path \
[INFO]     [creator]     /layers/paketo-buildpacks_graalvm/jdk/lib/truffle/truffle-api.jar \
[INFO]     [creator]     -Djdk.internal.lambda.disableEagerInitialization=true \
[INFO]     [creator]     -Djdk.internal.lambda.eagerlyInitialize=false \
[INFO]     [creator]     -Djava.lang.invoke.InnerClassLambdaMetafactory.initializeLambdas=false \
[INFO]     [creator]     -agentlib:native-image-diagnostics-agent=c=org.springframework.util.unit.DataSize \
[INFO]     [creator]     -javaagent:/layers/paketo-buildpacks_graalvm/jdk/lib/svm/builder/svm.jar=c=org.springframework.util.unit.DataSize \
[INFO]     [creator]     -cp \
[INFO]     [creator]     /layers/paketo-buildpacks_graalvm/jdk/lib/svm/builder/llvm-platform-specific-shadowed.jar:/layers/paketo-buildpacks_graalvm/jdk/lib/svm/builder/javacpp-shadowed.jar:/layers/paketo-buildpacks_graalvm/jdk/lib/svm/builder/objectfile.jar:/layers/paketo-buildpacks_graalvm/jdk/lib/svm/builder/svm.jar:/layers/paketo-buildpacks_graalvm/jdk/lib/svm/builder/svm-llvm.jar:/layers/paketo-buildpacks_graalvm/jdk/lib/svm/builder/llvm-wrapper-shadowed.jar:/layers/paketo-buildpacks_graalvm/jdk/lib/svm/builder/pointsto.jar \
[INFO]     [creator]     'com.oracle.svm.hosted.NativeImageGeneratorRunner$JDK9Plus' \
[INFO]     [creator]     -watchpid \
[INFO]     [creator]     183 \
[INFO]     [creator]     -imagecp \
[INFO]     [creator]     /workspace:/workspace/BOOT-INF/classes:/workspace/BOOT-INF/lib/common-exception-webflux-0.0.1-SNAPSHOT.jar:/workspace/BOOT-INF/lib/reactor-core-3.4.9.jar:/workspace/BOOT-INF/lib/reactive-streams-1.0.3.jar:/workspace/BOOT-INF/lib/spring-context-5.3.9.jar:/workspace/BOOT-INF/lib/spring-aop-5.3.9.jar:/workspace/BOOT-INF/lib/spring-beans-5.3.9.jar:/workspace/BOOT-INF/lib/spring-expression-5.3.9.jar:/workspace/BOOT-INF/lib/spring-web-5.3.9.jar:/workspace/BOOT-INF/lib/spring-boot-autoconfigure-2.5.4.jar:/workspace/BOOT-INF/lib/common-security-webflux-0.0.1-SNAPSHOT.jar:/workspace/BOOT-INF/lib/spring-webflux-5.3.9.jar:/workspace/BOOT-INF/lib/spring-security-config-5.5.2.jar:/workspace/BOOT-INF/lib/spring-security-core-5.5.2.jar:/workspace/BOOT-INF/lib/spring-security-crypto-5.5.2.jar:/workspace/BOOT-INF/lib/spring-security-oauth2-jose-5.5.2.jar:/workspace/BOOT-INF/lib/spring-security-oauth2-core-5.5.2.jar:/workspace/BOOT-INF/lib/nimbus-jose-jwt-9.10.1.jar:/workspace/BOOT-INF/lib/jcip-annotations-1.0-1.jar:/workspace/BOOT-INF/lib/common-storage-0.0.1-SNAPSHOT.jar:/workspace/BOOT-INF/lib/spring-boot-2.5.4.jar:/workspace/BOOT-INF/lib/starter-domain-relational-0.0.1-SNAPSHOT.jar:/workspace/BOOT-INF/lib/spring-data-r2dbc-1.3.4.jar:/workspace/BOOT-INF/lib/spring-data-relational-2.2.4.jar:/workspace/BOOT-INF/lib/spring-r2dbc-5.3.9.jar:/workspace/BOOT-INF/lib/spring-tx-5.3.9.jar:/workspace/BOOT-INF/lib/slf4j-api-1.7.32.jar:/workspace/BOOT-INF/lib/spring-data-commons-2.5.4.jar:/workspace/BOOT-INF/lib/logback-classic-1.2.5.jar:/workspace/BOOT-INF/lib/logback-core-1.2.5.jar:/workspace/BOOT-INF/lib/log4j-to-slf4j-2.14.1.jar:/workspace/BOOT-INF/lib/log4j-api-2.14.1.jar:/workspace/BOOT-INF/lib/jul-to-slf4j-1.7.32.jar:/workspace/BOOT-INF/lib/jakarta.annotation-api-1.3.5.jar:/workspace/BOOT-INF/lib/snakeyaml-1.28.jar:/workspace/BOOT-INF/lib/spring-boot-actuator-autoconfigure-2.5.4.jar:/workspace/BOOT-INF/lib/spring-boot-actuator-2.5.4.jar:/workspace/BOOT-INF/lib/jackson-databind-2.12.4.jar:/workspace/BOOT-INF/lib/jackson-annotations-2.12.4.jar:/workspace/BOOT-INF/lib/jackson-core-2.12.4.jar:/workspace/BOOT-INF/lib/jackson-datatype-jsr310-2.12.4.jar:/workspace/BOOT-INF/lib/micrometer-core-1.7.3.jar:/workspace/BOOT-INF/lib/HdrHistogram-2.1.12.jar:/workspace/BOOT-INF/lib/LatencyUtils-2.0.3.jar:/workspace/BOOT-INF/lib/r2dbc-spi-0.8.5.RELEASE.jar:/workspace/BOOT-INF/lib/r2dbc-pool-0.8.7.RELEASE.jar:/workspace/BOOT-INF/lib/reactor-pool-0.2.6.jar:/workspace/BOOT-INF/lib/jackson-datatype-jdk8-2.12.4.jar:/workspace/BOOT-INF/lib/jackson-module-parameter-names-2.12.4.jar:/workspace/BOOT-INF/lib/reactor-netty-http-1.0.10.jar:/workspace/BOOT-INF/lib/netty-codec-http-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-common-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-buffer-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-transport-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-codec-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-codec-http2-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-resolver-dns-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-resolver-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-codec-dns-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-resolver-dns-native-macos-4.1.67.Final-osx-x86_64.jar:/workspace/BOOT-INF/lib/netty-transport-native-unix-common-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-transport-native-epoll-4.1.67.Final-linux-x86_64.jar:/workspace/BOOT-INF/lib/spring-native-0.10.4-SNAPSHOT.jar:/workspace/BOOT-INF/lib/spring-security-oauth2-addons-2.6.1.jar:/workspace/BOOT-INF/lib/spring-security-oauth2-resource-server-5.5.2.jar:/workspace/BOOT-INF/lib/spring-security-web-5.5.2.jar:/workspace/BOOT-INF/lib/r2dbc-postgresql-0.8.8.RELEASE.jar:/workspace/BOOT-INF/lib/client-2.1.jar:/workspace/BOOT-INF/lib/common-2.1.jar:/workspace/BOOT-INF/lib/saslprep-1.1.jar:/workspace/BOOT-INF/lib/stringprep-1.1.jar:/workspace/BOOT-INF/lib/reactor-netty-1.0.10.jar:/workspace/BOOT-INF/lib/reactor-netty-core-1.0.10.jar:/workspace/BOOT-INF/lib/netty-handler-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-handler-proxy-4.1.67.Final.jar:/workspace/BOOT-INF/lib/netty-codec-socks-4.1.67.Final.jar:/workspace/BOOT-INF/lib/reactor-netty-http-brave-1.0.10.jar:/workspace/BOOT-INF/lib/brave-instrumentation-http-5.13.3.jar:/workspace/BOOT-INF/lib/brave-5.13.3.jar:/workspace/BOOT-INF/lib/zipkin-reporter-brave-2.16.3.jar:/workspace/BOOT-INF/lib/zipkin-reporter-2.16.3.jar:/workspace/BOOT-INF/lib/zipkin-2.23.2.jar:/workspace/BOOT-INF/lib/postgresql-42.2.23.jar:/workspace/BOOT-INF/lib/checker-qual-3.5.0.jar:/workspace/BOOT-INF/lib/spring-security-oauth2-test-addons-2.6.1.jar:/workspace/BOOT-INF/lib/spring-boot-test-autoconfigure-2.5.4.jar:/workspace/BOOT-INF/lib/spring-security-test-5.5.2.jar:/workspace/BOOT-INF/lib/mockito-core-3.9.0.jar:/workspace/BOOT-INF/lib/byte-buddy-1.10.22.jar:/workspace/BOOT-INF/lib/byte-buddy-agent-1.10.22.jar:/workspace/BOOT-INF/lib/objenesis-3.2.jar:/workspace/BOOT-INF/lib/spring-boot-test-2.5.4.jar:/workspace/BOOT-INF/lib/spring-core-5.3.9.jar:/workspace/BOOT-INF/lib/spring-jcl-5.3.9.jar:/workspace/BOOT-INF/lib/spring-test-5.3.9.jar:/workspace/BOOT-INF/lib/spring-boot-jarmode-layertools-2.5.4.jar:/layers/paketo-buildpacks_graalvm/jdk/lib/svm/library-support.jar \
[INFO]     [creator]     -H:Path=/layers/paketo-buildpacks_native-image/native-image \
[INFO]     [creator]     -H:+ReportExceptionStackTraces \
[INFO]     [creator]     -H:EnableURLProtocols=https \
[INFO]     [creator]     -H:+InlineBeforeAnalysis \
[INFO]     [creator]     -H:ClassInitialization=io.netty.handler.codec.compression.BrotliDecoder:run_time \
[INFO]     [creator]     -H:+AllowIncompleteClasspath \
[INFO]     [creator]     -H:TraceClassInitialization=org.springframework.util.unit.DataSize \
[INFO]     [creator]     -H:+StaticExecutableWithDynamicLibC \
[INFO]     [creator]     -H:Name=/layers/paketo-buildpacks_native-image/native-image/com.c4_soft.starter.FaultsEndpointsApplication \
[INFO]     [creator]     -H:+AllowIncompleteClasspath@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/native-image.properties \
[INFO]     [creator]     -H:+ReportUnsupportedElementsAtRuntime@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/native-image.properties \
[INFO]     [creator]     -H:FallbackThreshold@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/native-image.properties=0 \
[INFO]     [creator]     -H:+InstallExitHandlers@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/native-image.properties \
[INFO]     [creator]     -H:+InlineBeforeAnalysis@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/native-image.properties \
[INFO]     [creator]     '-H:ClassInitialization@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/native-image.properties=com.c4_soft.starter.persistence.intervention.FaultAttachmentRepo:build_time,com.c4_soft.starter.persistence.intervention.FaultRepo:build_time,com.c4_soft.starter.persistence.user.LifixUserRepo:build_time,com.fasterxml.jackson.databind.ext.Java7Handlers:build_time,com.fasterxml.jackson.databind.ext.Java7HandlersImpl:build_time,com.fasterxml.jackson.databind.ext.Java7Support:build_time,com.fasterxml.jackson.databind.ext.Java7SupportImpl:build_time,com.fasterxml.jackson.databind.util.ClassUtil:build_time,com.google.protobuf.Extension:build_time,com.google.protobuf.ExtensionLite:build_time,com.google.protobuf.ExtensionRegistry:build_time,com.rabbitmq.client.SocketChannelConfigurator:build_time,org.aopalliance.aop.Advice:build_time,org.apache.commons.logging.LogAdapter:build_time,org.apache.commons.logging.LogAdapter$1:build_time,org.apache.commons.logging.LogAdapter$Log4jLog:build_time,org.apache.commons.logging.LogAdapter$Slf4jLocationAwareLog:build_time,org.apache.commons.logging.LogFactory:build_time,org.apache.lucene.util.Constants:build_time,org.apache.lucene.util.RamUsageEstimator:build_time,org.elasticsearch.common.unit.TimeValue:build_time,org.slf4j.Logger:build_time,org.slf4j.LoggerFactory:build_time,org.slf4j.MDC:build_time,org.slf4j.event.EventRecodingLogger:build_time,org.slf4j.event.SubstituteLoggingEvent:build_time,org.slf4j.helpers.FormattingTuple:build_time,org.slf4j.helpers.MessageFormatter:build_time,org.slf4j.helpers.NOPLogger:build_time,org.slf4j.helpers.NOPLoggerFactory:build_time,org.slf4j.helpers.SubstituteLogger:build_time,org.slf4j.helpers.SubstituteLoggerFactory:build_time,org.slf4j.helpers.Util:build_time,org.slf4j.impl.StaticLoggerBinder:build_time,org.slf4j.spi.LocationAwareLogger:build_time,org.springframework.aop.Advisor:build_time,org.springframework.aop.Advisor$1:build_time,org.springframework.aop.TargetSource:build_time,org.springframework.aop.framework.Advised:build_time,org.springframework.aot.StaticSpringFactories:build_time,org.springframework.beans.CachedIntrospectionResults:build_time,org.springframework.beans.PropertyEditorRegistrySupport:build_time,org.springframework.beans.factory.xml.XmlBeanDefinitionReader:build_time,org.springframework.boot.BeanDefinitionLoader:build_time,org.springframework.boot.autoconfigure.cache.CacheConfigurations:build_time,org.springframework.boot.logging.LoggingSystem:build_time,org.springframework.boot.logging.java.JavaLoggingSystem$Factory:build_time,org.springframework.boot.logging.log4j2.Log4J2LoggingSystem$Factory:build_time,org.springframework.boot.logging.logback.LogbackLoggingSystem:build_time,org.springframework.boot.logging.logback.LogbackLoggingSystem$Factory:build_time,org.springframework.cloud.function.web.function.FunctionEndpointInitializer:build_time,org.springframework.context.annotation.CommonAnnotationBeanPostProcessor:build_time,org.springframework.context.event.EventListenerMethodProcessor:build_time,org.springframework.context.support.AbstractApplicationContext:build_time,org.springframework.core.DecoratingProxy:build_time,org.springframework.core.DefaultParameterNameDiscoverer:build_time,org.springframework.core.KotlinDetector:build_time,org.springframework.core.NativeDetector:build_time,org.springframework.core.ReactiveAdapterRegistry:build_time,org.springframework.core.ResolvableType:build_time,org.springframework.core.SpringProperties:build_time,org.springframework.core.annotation.AnnotationFilter:build_time,org.springframework.core.annotation.AnnotationFilter$1:build_time,org.springframework.core.annotation.AnnotationFilter$2:build_time,org.springframework.core.annotation.AnnotationUtils:build_time,org.springframework.core.annotation.PackagesAnnotationFilter:build_time,org.springframework.core.annotation.TypeMappedAnnotations:build_time,org.springframework.core.io.support.PropertiesLoaderUtils:build_time,org.springframework.core.io.support.ResourcePropertiesPersister:build_time,org.springframework.core.io.support.SpringFactoriesLoader:build_time,org.springframework.data.mapping.context.AbstractMappingContext:build_time,org.springframework.format.annotation.DateTimeFormat$ISO:build_time,org.springframework.hateoas.MediaTypes:build_time,org.springframework.http.HttpStatus:build_time,org.springframework.http.MediaType:build_time,org.springframework.http.codec.CodecConfigurerFactory:build_time,org.springframework.http.codec.support.BaseDefaultCodecs:build_time,org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter:build_time,org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter:build_time,org.springframework.integration.support.json.Jackson2JsonObjectMapper:build_time,org.springframework.jdbc.datasource.ConnectionProxy:build_time,org.springframework.jdbc.support.JdbcAccessor:build_time,org.springframework.jdbc.support.JdbcTransactionManager:build_time,org.springframework.messaging.simp.config.AbstractMessageBrokerConfiguration:build_time,org.springframework.nativex.AotModeDetector:build_time,org.springframework.nativex.substitutions.boot.NativeSpringBootVersion:build_time,org.springframework.test.web.reactive.server.DefaultWebTestClientBuilder:build_time,org.springframework.transaction.annotation.Isolation:build_time,org.springframework.transaction.annotation.Propagation:build_time,org.springframework.util.Assert:build_time,org.springframework.util.ClassUtils:build_time,org.springframework.util.CollectionUtils:build_time,org.springframework.util.ConcurrentReferenceHashMap:build_time,org.springframework.util.DefaultPropertiesPersister:build_time,org.springframework.util.LinkedCaseInsensitiveMap:build_time,org.springframework.util.MimeType:build_time,org.springframework.util.MimeTypeUtils:build_time,org.springframework.util.ReflectionUtils:build_time,org.springframework.util.StringUtils:build_time,org.springframework.util.unit.DataSize:build_time,org.springframework.util.unit.DataUnit:build_time,org.springframework.web.client.RestTemplate:build_time,org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport:build_time,org.springframework.web.servlet.function.support.RouterFunctionMapping:build_time,org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver:build_time,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter:build_time,org.springframework.web.socket.sockjs.transport.TransportHandlingSockJsService:build_time,ch.qos.logback.classic:build_time,ch.qos.logback.classic.util:build_time,ch.qos.logback.core:build_time,io.r2dbc.spi:build_time,org.apache.logging.log4j:build_time,org.apache.logging.slf4j:build_time,org.jboss.logging:build_time,org.springframework.core.env:build_time,org.springframework.data.r2dbc.connectionfactory:build_time' \
[INFO]     [creator]     -H:ClassInitialization@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/native-image.properties=io.netty.channel.DefaultChannelId:run_time,io.netty.channel.unix.Errors:run_time,io.netty.channel.unix.IovArray:run_time,io.netty.channel.unix.Limits:run_time,io.netty.channel.unix.Socket:run_time,io.netty.handler.codec.compression.BrotliDecoder:run_time,io.netty.handler.codec.http.websocketx.extensions.compression.DeflateDecoder:run_time,io.netty.handler.codec.http2.CleartextHttp2ServerUpgradeHandler:run_time,io.netty.handler.codec.http2.Http2ConnectionHandler:run_time,io.netty.handler.codec.http2.Http2ServerUpgradeCodec:run_time,io.netty.resolver.HostsFileEntriesResolver:run_time,io.netty.channel.epoll:run_time \
[INFO]     [creator]     -H:EnableURLProtocols@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/native-image.properties=https \
[INFO]     [creator]     -H:Class@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/native-image.properties=com.c4_soft.starter.FaultsEndpointsApplication \
[INFO]     [creator]     -H:ReflectionConfigurationResources@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/reflect-config.json=META-INF/native-image/org.springframework.aot/spring-aot/reflect-config.json \
[INFO]     [creator]     -H:ResourceConfigurationResources@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/resource-config.json=META-INF/native-image/org.springframework.aot/spring-aot/resource-config.json \
[INFO]     [creator]     -H:DynamicProxyConfigurationResources@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/proxy-config.json=META-INF/native-image/org.springframework.aot/spring-aot/proxy-config.json \
[INFO]     [creator]     -H:SerializationConfigurationResources@file:///workspace/META-INF/native-image/org.springframework.aot/spring-aot/serialization-config.json=META-INF/native-image/org.springframework.aot/spring-aot/serialization-config.json \
[INFO]     [creator]     '-H:ReflectionConfigurationResources@jar:file:///workspace/BOOT-INF/lib/micrometer-core-1.7.3.jar!/META-INF/native-image/io.micrometer/micrometer-core/native-image.properties=META-INF/native-image/io.micrometer/micrometer-core/reflect-config.json' \
[INFO]     [creator]     '-H:ReflectionConfigurationResources@jar:file:///workspace/BOOT-INF/lib/micrometer-core-1.7.3.jar!/META-INF/native-image/io.micrometer/micrometer-core/reflect-config.json=META-INF/native-image/io.micrometer/micrometer-core/reflect-config.json' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-codec-http-4.1.67.Final.jar!/META-INF/native-image/io.netty/codec-http/native-image.properties=io.netty:build_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-codec-http-4.1.67.Final.jar!/META-INF/native-image/io.netty/codec-http/native-image.properties=io.netty.handler.codec.http.HttpObjectEncoder:run_time,io.netty.handler.codec.http.websocketx.WebSocket00FrameEncoder:run_time,io.netty.handler.codec.http.websocketx.extensions.compression.DeflateDecoder:run_time,io.netty.handler.codec.compression.BrotliDecoder:run_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-common-4.1.67.Final.jar!/META-INF/native-image/io.netty/common/native-image.properties=io.netty.util.AbstractReferenceCounted:run_time,io.netty.util.concurrent.GlobalEventExecutor:run_time,io.netty.util.concurrent.ImmediateEventExecutor:run_time,io.netty.util.concurrent.ScheduledFutureTask:run_time,io.netty.util.internal.ThreadLocalRandom:run_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-common-4.1.67.Final.jar!/META-INF/native-image/io.netty/common/native-image.properties=io.netty.util.NetUtilSubstitutions$NetUtilLocalhost4LazyHolder:run_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-common-4.1.67.Final.jar!/META-INF/native-image/io.netty/common/native-image.properties=io.netty.util.NetUtilSubstitutions$NetUtilLocalhost6LazyHolder:run_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-common-4.1.67.Final.jar!/META-INF/native-image/io.netty/common/native-image.properties=io.netty.util.NetUtilSubstitutions$NetUtilLocalhostLazyHolder:run_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-buffer-4.1.67.Final.jar!/META-INF/native-image/io.netty/buffer/native-image.properties=io.netty.buffer.PooledByteBufAllocator:run_time,io.netty.buffer.ByteBufAllocator:run_time,io.netty.buffer.ByteBufUtil:run_time,io.netty.buffer.AbstractReferenceCountedByteBuf:run_time' \
[INFO]     [creator]     '-H:ReflectionConfigurationResources@jar:file:///workspace/BOOT-INF/lib/netty-transport-4.1.67.Final.jar!/META-INF/native-image/io.netty/transport/native-image.properties=META-INF/native-image/io.netty/transport/reflection-config.json' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-codec-http2-4.1.67.Final.jar!/META-INF/native-image/io.netty/codec-http2/native-image.properties=io.netty:build_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-codec-http2-4.1.67.Final.jar!/META-INF/native-image/io.netty/codec-http2/native-image.properties=io.netty.handler.codec.http2.Http2CodecUtil:run_time,io.netty.handler.codec.http2.Http2ClientUpgradeCodec:run_time,io.netty.handler.codec.http2.Http2ConnectionHandler:run_time,io.netty.handler.codec.http2.DefaultHttp2FrameWriter:run_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-resolver-dns-4.1.67.Final.jar!/META-INF/native-image/io.netty/resolver-dns/native-image.properties=io.netty.resolver.dns.DefaultDnsServerAddressStreamProvider:run_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-resolver-dns-4.1.67.Final.jar!/META-INF/native-image/io.netty/resolver-dns/native-image.properties=io.netty.resolver.dns.DnsServerAddressStreamProviders$DefaultProviderHolder:run_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-resolver-dns-4.1.67.Final.jar!/META-INF/native-image/io.netty/resolver-dns/native-image.properties=io.netty.resolver.dns.DnsNameResolver:run_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-resolver-dns-4.1.67.Final.jar!/META-INF/native-image/io.netty/resolver-dns/native-image.properties=io.netty.resolver.HostsFileEntriesResolver:run_time' \
[INFO]     [creator]     '-H:ClassInitialization@jar:file:///workspace/BOOT-INF/lib/netty-handler-4.1.67.Final.jar!/META-INF/native-image/io.netty/handler/native-image.properties=io.netty.handler.ssl.util.ThreadLocalInsecureRandom:run_time' \
[INFO]     [creator]     -H:CLibraryPath=/layers/paketo-buildpacks_graalvm/jdk/lib/svm/clibraries/linux-amd64 \
[INFO]     [creator]     '-H:Class@explicit main-class=com.c4_soft.starter.FaultsEndpointsApplication'
[INFO]     [creator]     ]
[INFO]     [creator]     [/layers/paketo-buildpacks_native-image/native-image/com.c4_soft.starter.FaultsEndpointsApplication:205]    classlist:   3,072.52 ms,  0.94 GB
[INFO]     [creator]     [/layers/paketo-buildpacks_native-image/native-image/com.c4_soft.starter.FaultsEndpointsApplication:205]        (cap):   6,110.12 ms,  1.18 GB
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.actuate.autoconfigure.cloudfoundry.servlet.CloudFoundryActuatorAutoConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/web/servlet/handler/MatchableHandlerMapping.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.boot.actuate.autoconfigure.cloudfoundry.servlet.CloudFoundryWebEndpointServletHandlerMapping for reflection configuration. Reason: java.lang.NoClassDefFoundError: org/springframework/web/servlet/handler/MatchableHandlerMapping.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.actuate.autoconfigure.endpoint.web.servlet.WebMvcEndpointManagementContextConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/web/servlet/handler/MatchableHandlerMapping.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.actuate.autoconfigure.metrics.web.servlet.WebMvcMetricsAutoConfiguration: allDeclaredFields for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.actuate.autoconfigure.trace.http.HttpTraceAutoConfiguration$ServletTraceFilterConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration$ApplicationContextFilterConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping for reflection configuration. Reason: java.lang.NoClassDefFoundError: org/springframework/web/servlet/handler/MatchableHandlerMapping.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.actuate.metrics.export.prometheus.PrometheusScrapeEndpoint: allDeclaredFields for reflection. Reason: java.lang.NoClassDefFoundError: io/prometheus/client/CollectorRegistry.
[INFO]     [creator]     WARNING: Could not register method org.springframework.boot.actuate.quartz.QuartzEndpointWebExtension.quartzJobOrTriggerGroups(String) for reflection. Reason: java.lang.NoClassDefFoundError: org/quartz/SchedulerException.
[INFO]     [creator]     WARNING: Could not register method org.springframework.boot.actuate.quartz.QuartzEndpointWebExtension.quartzJobOrTriggerGroup(String, String) for reflection. Reason: java.lang.NoClassDefFoundError: org/quartz/SchedulerException.
[INFO]     [creator]     WARNING: Could not register method org.springframework.boot.actuate.quartz.QuartzEndpointWebExtension.quartzJobOrTrigger(String, String, String) for reflection. Reason: java.lang.NoClassDefFoundError: org/quartz/SchedulerException.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter for reflection configuration. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.amqp.RabbitProperties$DirectContainer: allPublicMethods for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/amqp/core/AcknowledgeMode.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.amqp.RabbitProperties$SimpleContainer: allPublicMethods for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/amqp/core/AcknowledgeMode.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.batch.BatchConfigurerConfiguration$JdbcBatchConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/batch/core/configuration/annotation/BatchConfigurer.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.batch.BatchDataSourceInitializer: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/jdbc/support/MetaDataAccessException.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration$JacksonConfiguration: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: com/couchbase/client/java/json/JsonValueModule.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration$JacksonConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: com/couchbase/client/java/json/JsonValueModule.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration$JacksonConfiguration: allDeclaredFields for reflection. Reason: java.lang.NoClassDefFoundError: com/couchbase/client/java/json/JsonValueModule.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/data/rest/webmvc/config/RepositoryRestConfigurer.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.integration.IntegrationDataSourceInitializer: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/jdbc/support/MetaDataAccessException.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.session.JdbcSessionDataSourceInitializer: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/jdbc/support/MetaDataAccessException.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorConfiguration$JettyClient: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: org/eclipse/jetty/util/ssl/SslContextFactory.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorConfiguration$JettyClient: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: org/eclipse/jetty/util/ssl/SslContextFactory.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorConfiguration$JettyClient: allDeclaredFields for reflection. Reason: java.lang.NoClassDefFoundError: org/eclipse/jetty/util/ssl/SslContextFactory.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration: allDeclaredFields for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration: allDeclaredFields for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/web/servlet/HandlerExceptionResolver.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/init/DatabasePopulator.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerAutoConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: org/springframework/ws/test/client/MockWebServiceServer.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/ServletException.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/ServletException.
[INFO]     [creator]     WARNING: Could not register org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext: allDeclaredFields for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/ServletException.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.boot.web.servlet.filter.ApplicationContextHeaderFilter for reflection configuration. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.boot.web.servlet.filter.OrderedFormContentFilter for reflection configuration. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.boot.web.servlet.filter.OrderedHiddenHttpMethodFilter for reflection configuration. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.data.web.config.HateoasAwareSpringDataWebConfiguration for reflection configuration. Reason: java.lang.NoClassDefFoundError: org/springframework/web/servlet/config/annotation/WebMvcConfigurer.
[INFO]     [creator]     WARNING: Could not register org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration: allDeclaredMethods for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.security.config.annotation.web.configuration.HttpSecurityConfiguration: allDeclaredFields for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.security.web.FilterChainProxy for reflection configuration. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register org.springframework.security.web.access.expression.WebSecurityExpressionRoot: allDeclaredFields for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.security.web.context.SecurityContextPersistenceFilter for reflection configuration. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.security.web.csrf.CsrfFilter for reflection configuration. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not register method org.springframework.test.context.web.ServletTestExecutionListener.<init>() for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/ServletContext.
[INFO]     [creator]     WARNING: Could not register org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder: allDeclaredConstructors for reflection. Reason: java.lang.NoClassDefFoundError: javax/servlet/ServletException.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.web.filter.CharacterEncodingFilter for reflection configuration. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.web.filter.FormContentFilter for reflection configuration. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.web.filter.HiddenHttpMethodFilter for reflection configuration. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     WARNING: Could not resolve org.springframework.web.filter.RequestContextFilter for reflection configuration. Reason: java.lang.NoClassDefFoundError: javax/servlet/Filter.
[INFO]     [creator]     [/layers/paketo-buildpacks_native-image/native-image/com.c4_soft.starter.FaultsEndpointsApplication:205]        setup:   7,384.56 ms,  1.18 GB
[INFO]     [creator]     Error: Error parsing dynamic proxy configuration in file:/workspace/META-INF/native-image/org.springframework.aot/spring-aot/proxy-config.json:
[INFO]     [creator]     java.lang.IllegalArgumentException: repeated interface: org.springframework.aop.SpringProxy
[INFO]     [creator]     Verify that the configuration matches the schema described in the -H:PrintFlags=+ output for option DynamicProxyConfigurationResources.
[INFO]     [creator]     com.oracle.svm.core.util.UserError$UserException: Error parsing dynamic proxy configuration in file:/workspace/META-INF/native-image/org.springframework.aot/spring-aot/proxy-config.json:
[INFO]     [creator]     java.lang.IllegalArgumentException: repeated interface: org.springframework.aop.SpringProxy
[INFO]     [creator]     Verify that the configuration matches the schema described in the -H:PrintFlags=+ output for option DynamicProxyConfigurationResources.
[INFO]     [creator]            at com.oracle.svm.core.util.UserError.abort(UserError.java:68)
[INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils.doParseAndRegister(ConfigurationParserUtils.java:133)
[INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils.lambda$parseAndRegisterConfigurations$3(ConfigurationParserUtils.java:111)
[INFO]     [creator]            at java.base/java.util.stream.ReferencePipeline$4$1.accept(ReferencePipeline.java:214)
[INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils$1.tryAdvance(ConfigurationParserUtils.java:104)
[INFO]     [creator]            at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:326)
[INFO]     [creator]            at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
[INFO]     [creator]            at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
[INFO]     [creator]            at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
[INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
[INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
[INFO]     [creator]            at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312)
[INFO]     [creator]            at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
[INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
[INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
[INFO]     [creator]            at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
[INFO]     [creator]            at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
[INFO]     [creator]            at java.base/java.util.stream.IntPipeline.reduce(IntPipeline.java:515)
[INFO]     [creator]            at java.base/java.util.stream.IntPipeline.sum(IntPipeline.java:473)
[INFO]     [creator]            at com.oracle.svm.hosted.config.ConfigurationParserUtils.parseAndRegisterConfigurations(ConfigurationParserUtils.java:113)
[INFO]     [creator]            at com.oracle.svm.reflect.proxy.hosted.DynamicProxyFeature.duringSetup(DynamicProxyFeature.java:81)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.lambda$setupNativeImage$16(NativeImageGenerator.java:896)
[INFO]     [creator]            at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:71)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:896)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:530)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:491)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:380)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:543)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:119)
[INFO]     [creator]            at com.oracle.svm.hosted.NativeImageGeneratorRunner$JDK9Plus.main(NativeImageGeneratorRunner.java:573)
[INFO]     [creator]     [/layers/paketo-buildpacks_native-image/native-image/com.c4_soft.starter.FaultsEndpointsApplication:205]      [total]:  10,504.77 ms,  1.18 GB
[INFO]     [creator]     # Printing build artifacts to: /layers/paketo-buildpacks_native-image/native-image/com.c4_soft.starter.FaultsEndpointsApplication.build_artifacts.txt
[INFO]     [creator]     Error: Image build request failed with exit status 1
[INFO]     [creator]     com.oracle.svm.driver.NativeImage$NativeImageError: Image build request failed with exit status 1
[INFO]     [creator]            at com.oracle.svm.driver.NativeImage.showError(NativeImage.java:1916)
[INFO]     [creator]            at com.oracle.svm.driver.NativeImage.build(NativeImage.java:1584)
[INFO]     [creator]            at com.oracle.svm.driver.NativeImage.performBuild(NativeImage.java:1545)
[INFO]     [creator]            at com.oracle.svm.driver.NativeImage.main(NativeImage.java:1532)
[INFO]     [creator]     unable to invoke layer creator
[INFO]     [creator]     unable to contribute native-image layer
[INFO]     [creator]     error running build
[INFO]     [creator]     exit status 1
[INFO]     [creator]     ERROR: failed to build: exit status 1

This way of building native image is the only option on Windows because of a bug on GraalVM native-build-tools

ttddyy commented 3 years ago

@ch4mpy For maven plugin in master, here is the main entry point to the AOT generation process. Then, here generates proxy-config.json.

I don't think there is anything specific to windows in the aot code.

If the failure is due to the long names, as the linked native-build-tools issue has been resolved, please try with their snapshot.

ch4mpy commented 3 years ago

Any idea why org.springframework.nativex.domain.proxies.ProxiesDescriptor::proxyDescriptors is a List and not a Set?

@ttddyy the linked native-build-tools issue was preventing from building Windows exe.

Yes it is fixed but the issue in this ticket is preventing me from building native docker image and occurs under Windows only: I can build native docker image under Linux but not Windows.

native-build-tools plugin is not involved in my build-native-image profile (only spring-boot-maven-plugin and spring-aot-maven-pluginwith configuration from grand-parent pom:

grand-parent pom.xml:

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <excludes>
                            <exclude>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                            </exclude>
                        </excludes>
                        <classifier>${repackage.classifier}</classifier>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.springframework.experimental</groupId>
                    <artifactId>spring-aot-maven-plugin</artifactId>
                    <version>${spring-native.version}</version>
                    <configuration>
                        <removeXmlSupport>true</removeXmlSupport>
                        <removeSpelSupport>false</removeSpelSupport>
                        <removeYamlSupport>true</removeYamlSupport>
                        <removeJmxSupport>true</removeJmxSupport>
                        <removeUnusedConfig>false</removeUnusedConfig>
                    </configuration>
                    <executions>
                        <execution>
                            <id>test-generate</id>
                            <goals>
                                <goal>test-generate</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>generate</id>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
        </pluginManagement>

        <profile>
            <id>build-native-image</id>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-maven-plugin</artifactId>
                            <executions>
                                <execution>
                                    <id>build-image</id>
                                    <goals>
                                        <goal>build-image</goal>
                                    </goals>
                                    <configuration>
                                        <image>
                                            <builder>${builder}</builder>
                                            <env>
                                                <BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
                                                <BP_NATIVE_IMAGE_BUILD_ARGUMENTS>
                                                    -H:+ReportExceptionStackTraces
                                                    --enable-https
                                                    -H:+InlineBeforeAnalysis
                                                    --initialize-at-run-time=io.netty.handler.codec.compression.BrotliDecoder
                                                    --verbose
                                                    --allow-incomplete-classpath
                                                    --trace-class-initialization=org.springframework.util.unit.DataSize
                                                </BP_NATIVE_IMAGE_BUILD_ARGUMENTS>
                                            </env>
                                            <bindings>
                                                <binding>${ca-certificates.binding}:/platform/bindings/ca-certificates:ro
                                                </binding>
                                            </bindings>
                                            <pullPolicy>IF_NOT_PRESENT</pullPolicy>
                                        </image>
                                    </configuration>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>

pom.xml

        <profile>
            <id>build-native-image</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.experimental</groupId>
                        <artifactId>spring-aot-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
ttddyy commented 3 years ago

Since the error message says "error parsing the file", have you checked the generated proxy-config.json file? Probably compare with the successful one in linux and failed one in windows?

[INFO]     [creator]     com.oracle.svm.core.util.UserError$UserException: Error parsing dynamic proxy configuration in file:/workspace/META-INF/native-image/org.springframework.aot/spring-aot/proxy-config.json:
ch4mpy commented 3 years ago

have you checked the generated proxy-config.json file?

Of course, I did. I put it's content in this thread around August 5th.

I can spot a collection with duplicate entry for SpringProxy in it but have not found documentation on how to influence the way this file is generated.

Additionally, I have no idea of how to debug this plugin code during docker native-image build.

arielcarrera commented 3 years ago

I have the same problem @ch4mpy, the plugin generates this duplicate definition...

  [
    "org.springframework.aop.SpringProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.aop.framework._AdvisedSupportAware",
    "org.springframework.aop.SpringProxy",
    "org.springframework.aop.framework.Advised",
    "org.springframework.core.DecoratingProxy"
  ],

I am also using security annotations (@Secured). I will try without them.

ch4mpy commented 3 years ago

@arielcarrera it should build without security annotation.

But what I experienced so far is not that simple: this issue happens only on Windows and only when security annotations are associated with something else (a simple module with just secured annotations builds even on Windows).

Any idea why org.springframework.nativex.domain.proxies.ProxiesDescriptor::proxyDescriptors is a List and not a Set?

I still haven't understood why order is important in this collection.

arielcarrera commented 3 years ago

yes, I think your proposal should be successful. After some testing, I have a simple reproducer.

The problem seems to be reproducible with a simple class annotated with two annotations that require a proxy like @Validated and @ConfigurationProperties:

@Validated
@ConfigurationProperties(prefix = "sample")
@Data
@Component
public class SampleConfig {

    private List<String> paths;
}

After @Validated is removed, it works.

ch4mpy commented 3 years ago

@aclement, it seems that you authored most of proxy descriptors related code. What do you think of using sets instead of lists?

arielcarrera commented 3 years ago

I was working on some similar changes, in my PR I used a SortedSet instead of a HashSet in order to make the order in the resulting file more predictable. I tested these changes with the plugin and I was able to build my repro project.

However, for some reason I needed to add some proxy definition (not generated):

["org.springframework.web.bind.annotation.RequestMapping", "org.springframework.core.annotation.SynthesizedAnnotation"]

I don't know the reason why the plugin didn't found the proxy (even I had put a hint for the controller).

I leave the reproducer project in case somebody can take a look to see if it is a configuration problem, or it is related to the "fix" or not.

https://github.com/arielcarrera/spring-native-repeated-interface-reproducer

Maybe you can try to build this repro project with your PR if you built it!

ch4mpy commented 3 years ago

@arielcarrera did you manage to force proxy definition for RequestMapping, SynthesizedAnnotation or QueryAnnotation?

If yes, how?

arielcarrera commented 3 years ago

@arielcarrera did you manage to force proxy definition for RequestMapping, SynthesizedAnnotation or QueryAnnotation?

If yes, how?

Yes, you can add your graalvm descriptors in META-INF/native-image folder... in this case proxy-config.json file.

aclement commented 3 years ago

@aclement, it seems that you authored most of proxy descriptors related code. What do you think of using sets instead of lists? Yep, sounds good. But as @arielcarrera mentioned, I'd keep them ordered for reliability.

arielcarrera commented 3 years ago

@aclement, it seems that you authored most of proxy descriptors related code. What do you think of using sets instead of lists?

Yep, sounds good. But as @arielcarrera mentioned, I'd keep them ordered for reliability.

Hi @aclement, my PR is based on a SortedSet (TreeSet) so maybe it can be useful. Although the main problem would be solved with this PR, there is still a problem whereby in my reproducer project, the proxy (RequestMapping) is not detected and the config is not generated automatically. The repro project is really simple, it has only a few classes.

if I can help with something to solve just tell me. I could try it.

arielcarrera commented 3 years ago

After some tests again I can see that the plugin with the fix is generating the definition right but in inverse ordering:

[
    "org.springframework.core.annotation.SynthesizedAnnotation",
    "org.springframework.web.bind.annotation.RequestMapping"
  ],

When I run the image i get the following error from GraalVm:

Caused by: com.oracle.svm.core.jdk.UnsupportedFeatureError: Proxy class defined by interfaces [interface org.springframework.web.bind.anno
tation.RequestMapping, interface org.springframework.core.annotation.SynthesizedAnnotation] not found.

I tried with a custom dynamic proxy in both sides and only works when you respect the ordering that appears in the log file so I think that GraalVm has an issue in the dynamic proxy configuration and some kind of ordering is required but the documentation never talks about this (https://www.graalvm.org/reference-manual/native-image/DynamicProxy/#manual-configuration). I filled an issue in graalvm about it: https://github.com/oracle/graal/issues/3735

At this moment, due to this problem, I think that neither a HashSet or a TreeSet so I will try with a LinkedHashSet.

ttddyy commented 3 years ago

@arielcarrera FYI, the ordering of parameter classes is important in proxy-config.json. For example foo(String s, Integer i) and foo(Integer i, String s) are two different methods. The proxy-config.json requires exact parameter order to determine the target method.

arielcarrera commented 3 years ago

@arielcarrera FYI, the ordering of parameter classes is important in proxy-config.json. For example foo(String s, Integer i) and foo(Integer i, String s) are two different methods. The proxy-config.json requires exact parameter order to determine the target method.

Thanks @ttddyy, that sounds consistent to me

arielcarrera commented 3 years ago

Thanks @ttddyy ! the last commit in the PR with a LinkedHashSet implementation works successful! Thank you again.

ch4mpy commented 3 years ago

@arielcarrera with your latest commit, my project builds valid docker native-images on Windows without any additional proxy-config.json file (as it was already doing on Linux).

Thanks.

arielcarrera commented 3 years ago

We did it! Thanks @ch4mpy.

I tried another project and it also worked!

aclement commented 3 years ago

The ordering of the interfaces being important is actually a Java thing, from https://docs.oracle.com/javase/7/docs/technotes/guides/reflection/proxy.html

Note that the order of the specified proxy interfaces is significant: two requests for a proxy class with the same
combination of interfaces but in a different order will result in two distinct proxy classes. Proxy classes are
distinguished by the order of their proxy interfaces in order to provide deterministic method invocation
encoding in cases where two or more of the proxy interfaces share a method with the same name and 
parameter signature.
arielcarrera commented 3 years ago

The ordering of the interfaces being important is actually a Java thing, from https://docs.oracle.com/javase/7/docs/technotes/guides/reflection/proxy.html


Note that the order of the specified proxy interfaces is significant: two requests for a proxy class with the same

combination of interfaces but in a different order will result in two distinct proxy classes. Proxy classes are

distinguished by the order of their proxy interfaces in order to provide deterministic method invocation

encoding in cases where two or more of the proxy interfaces share a method with the same name and 

parameter signature.

yes, it makes perfect sense, setting proxies in json files is not something that I used to know! Thank you!

ch4mpy commented 3 years ago

@ttddyy , @aclement , any chance we have @arielcarrera PR merged soon? I have a Windows environement on which I can hardly mvn install a branch SNAPSHOT :/