Spring Boot v3.2.0 on graalvm-community-openjdk-21.0.1+12.1
Spring AOT process mvn -Pnative package
is resulting in the below error,
Error: Classes that should be initialized at run time got initialized during image building:
com.ctc.wstx.api.ReaderConfig was unintentionally initialized at build time. org.springframework.http.codec.xml.XmlEventDecoder caused initialization of this class with the following trace:
at com.ctc.wstx.api.ReaderConfig.<clinit>(ReaderConfig.java:264)
at com.ctc.wstx.stax.WstxInputFactory.<init>(WstxInputFactory.java:149)
at java.lang.invoke.DirectMethodHandle$Holder.newInvokeSpecial(DirectMethodHandle$Holder)
at java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
at jdk.internal.reflect.DirectConstructorHandleAccessor.invokeImpl(DirectConstructorHandleAccessor.java:86)
at jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
at java.lang.reflect.Constructor.newInstance(Constructor.java:486)
at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
at java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
at java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
at javax.xml.stream.FactoryFinder$1.run(FactoryFinder.java:305)
at java.security.AccessController.executePrivileged(AccessController.java:778)
at java.security.AccessController.doPrivileged(AccessController.java:319)
at javax.xml.stream.FactoryFinder.findServiceProvider(FactoryFinder.java:293)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:264)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:210)
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:166)
at org.springframework.util.xml.StaxUtils$$Lambda/0x000000080369ce18.get(Unknown Source)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:77)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:67)
at org.springframework.http.codec.xml.XmlEventDecoder.<clinit>(XmlEventDecoder.java:87)
Comment From: snicoll
Spring AOT process
It looks like that is native-image trying to process the application, not Spring AOT. Please share a small sample that lets us reproduce the issue. You can attach a zip here or push the code to a separate GitHub repository.
Comment From: syedyusufh
Tried creating a minimal reproducible, still not successful. Is there anyway I could get to know what class or component from the application would trigger this? Thanks
Comment From: bclozel
What Stephane means is that this error looks like a more foundational problem in your build, maybe skipping entirely the AOT phase. Trying to solve this particular instance is likely to let the next one appear and won't solve the bigger problem. Maybe some particular config in your build interferes with how the native build tool plugin should be configured? A sample is really key here. Thanks!
Comment From: syedyusufh
Please find the sample to reproduce the issue
https://github.com/syedyusufh/hello-sample.git
Comment From: snicoll
Thanks for the sample. It looks like that's org.springframework.http.codec.xml.XmlEventDecoder
creating a XMLInputFactory
.
Full stacktrace:
Error: Classes that should be initialized at run time got initialized during image building:
com.ctc.wstx.util.DefaultXmlSymbolTable was unintentionally initialized at build time. org.springframework.http.codec.xml.XmlEventDecoder caused initialization of this class with the following trace:
at com.ctc.wstx.util.DefaultXmlSymbolTable.<clinit>(DefaultXmlSymbolTable.java:30)
at com.ctc.wstx.stax.WstxInputFactory.<clinit>(WstxInputFactory.java:122)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Unknown Source)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
at java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
at java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
at javax.xml.stream.FactoryFinder$1.run(FactoryFinder.java:351)
at java.security.AccessController.executePrivileged(AccessController.java:776)
at java.security.AccessController.doPrivileged(AccessController.java:318)
at javax.xml.stream.FactoryFinder.findServiceProvider(FactoryFinder.java:339)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:310)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:223)
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:166)
at org.springframework.util.xml.StaxUtils$$Lambda$3617/0x00000008021b75d8.get(Unknown Source)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:77)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:67)
at org.springframework.http.codec.xml.XmlEventDecoder.<clinit>(XmlEventDecoder.java:87)
com.ctc.wstx.api.ReaderConfig was unintentionally initialized at build time. org.springframework.http.codec.xml.XmlEventDecoder caused initialization of this class with the following trace:
at com.ctc.wstx.api.ReaderConfig.<clinit>(ReaderConfig.java:264)
at com.ctc.wstx.stax.WstxInputFactory.<init>(WstxInputFactory.java:149)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Unknown Source)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
at java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
at java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
at javax.xml.stream.FactoryFinder$1.run(FactoryFinder.java:351)
at java.security.AccessController.executePrivileged(AccessController.java:776)
at java.security.AccessController.doPrivileged(AccessController.java:318)
at javax.xml.stream.FactoryFinder.findServiceProvider(FactoryFinder.java:339)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:310)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:223)
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:166)
at org.springframework.util.xml.StaxUtils$$Lambda$3617/0x00000008021b75d8.get(Unknown Source)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:77)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:67)
at org.springframework.http.codec.xml.XmlEventDecoder.<clinit>(XmlEventDecoder.java:87)
com.ctc.wstx.api.CommonConfig was unintentionally initialized at build time. org.springframework.http.codec.xml.XmlEventDecoder caused initialization of this class with the following trace:
at com.ctc.wstx.api.CommonConfig.<clinit>(CommonConfig.java:59)
at com.ctc.wstx.stax.WstxInputFactory.<init>(WstxInputFactory.java:149)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Unknown Source)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
at java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
at java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
at javax.xml.stream.FactoryFinder$1.run(FactoryFinder.java:351)
at java.security.AccessController.executePrivileged(AccessController.java:776)
at java.security.AccessController.doPrivileged(AccessController.java:318)
at javax.xml.stream.FactoryFinder.findServiceProvider(FactoryFinder.java:339)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:310)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:223)
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:166)
at org.springframework.util.xml.StaxUtils$$Lambda$3617/0x00000008021b75d8.get(Unknown Source)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:77)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:67)
at org.springframework.http.codec.xml.XmlEventDecoder.<clinit>(XmlEventDecoder.java:87)
com.ctc.wstx.stax.WstxInputFactory was unintentionally initialized at build time. org.springframework.http.codec.xml.XmlEventDecoder caused initialization of this class with the following trace:
at com.ctc.wstx.stax.WstxInputFactory.<clinit>(WstxInputFactory.java:122)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Unknown Source)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
at java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
at java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
at javax.xml.stream.FactoryFinder$1.run(FactoryFinder.java:351)
at java.security.AccessController.executePrivileged(AccessController.java:776)
at java.security.AccessController.doPrivileged(AccessController.java:318)
at javax.xml.stream.FactoryFinder.findServiceProvider(FactoryFinder.java:339)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:310)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:223)
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:166)
at org.springframework.util.xml.StaxUtils$$Lambda$3617/0x00000008021b75d8.get(Unknown Source)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:77)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:67)
at org.springframework.http.codec.xml.XmlEventDecoder.<clinit>(XmlEventDecoder.java:87)
com.oracle.svm.core.util.UserError$UserException: Classes that should be initialized at run time got initialized during image building:
com.ctc.wstx.util.DefaultXmlSymbolTable was unintentionally initialized at build time. org.springframework.http.codec.xml.XmlEventDecoder caused initialization of this class with the following trace:
at com.ctc.wstx.util.DefaultXmlSymbolTable.<clinit>(DefaultXmlSymbolTable.java:30)
at com.ctc.wstx.stax.WstxInputFactory.<clinit>(WstxInputFactory.java:122)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Unknown Source)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
at java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
at java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
at javax.xml.stream.FactoryFinder$1.run(FactoryFinder.java:351)
at java.security.AccessController.executePrivileged(AccessController.java:776)
at java.security.AccessController.doPrivileged(AccessController.java:318)
at javax.xml.stream.FactoryFinder.findServiceProvider(FactoryFinder.java:339)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:310)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:223)
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:166)
at org.springframework.util.xml.StaxUtils$$Lambda$3617/0x00000008021b75d8.get(Unknown Source)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:77)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:67)
at org.springframework.http.codec.xml.XmlEventDecoder.<clinit>(XmlEventDecoder.java:87)
com.ctc.wstx.api.ReaderConfig was unintentionally initialized at build time. org.springframework.http.codec.xml.XmlEventDecoder caused initialization of this class with the following trace:
at com.ctc.wstx.api.ReaderConfig.<clinit>(ReaderConfig.java:264)
at com.ctc.wstx.stax.WstxInputFactory.<init>(WstxInputFactory.java:149)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Unknown Source)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
at java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
at java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
at javax.xml.stream.FactoryFinder$1.run(FactoryFinder.java:351)
at java.security.AccessController.executePrivileged(AccessController.java:776)
at java.security.AccessController.doPrivileged(AccessController.java:318)
at javax.xml.stream.FactoryFinder.findServiceProvider(FactoryFinder.java:339)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:310)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:223)
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:166)
at org.springframework.util.xml.StaxUtils$$Lambda$3617/0x00000008021b75d8.get(Unknown Source)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:77)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:67)
at org.springframework.http.codec.xml.XmlEventDecoder.<clinit>(XmlEventDecoder.java:87)
com.ctc.wstx.api.CommonConfig was unintentionally initialized at build time. org.springframework.http.codec.xml.XmlEventDecoder caused initialization of this class with the following trace:
at com.ctc.wstx.api.CommonConfig.<clinit>(CommonConfig.java:59)
at com.ctc.wstx.stax.WstxInputFactory.<init>(WstxInputFactory.java:149)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Unknown Source)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
at java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
at java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
at javax.xml.stream.FactoryFinder$1.run(FactoryFinder.java:351)
at java.security.AccessController.executePrivileged(AccessController.java:776)
at java.security.AccessController.doPrivileged(AccessController.java:318)
at javax.xml.stream.FactoryFinder.findServiceProvider(FactoryFinder.java:339)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:310)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:223)
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:166)
at org.springframework.util.xml.StaxUtils$$Lambda$3617/0x00000008021b75d8.get(Unknown Source)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:77)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:67)
at org.springframework.http.codec.xml.XmlEventDecoder.<clinit>(XmlEventDecoder.java:87)
com.ctc.wstx.stax.WstxInputFactory was unintentionally initialized at build time. org.springframework.http.codec.xml.XmlEventDecoder caused initialization of this class with the following trace:
at com.ctc.wstx.stax.WstxInputFactory.<clinit>(WstxInputFactory.java:122)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Unknown Source)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
at java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
at java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
at javax.xml.stream.FactoryFinder$1.run(FactoryFinder.java:351)
at java.security.AccessController.executePrivileged(AccessController.java:776)
at java.security.AccessController.doPrivileged(AccessController.java:318)
at javax.xml.stream.FactoryFinder.findServiceProvider(FactoryFinder.java:339)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:310)
at javax.xml.stream.FactoryFinder.find(FactoryFinder.java:223)
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:166)
at org.springframework.util.xml.StaxUtils$$Lambda$3617/0x00000008021b75d8.get(Unknown Source)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:77)
at org.springframework.util.xml.StaxUtils.createDefensiveInputFactory(StaxUtils.java:67)
at org.springframework.http.codec.xml.XmlEventDecoder.<clinit>(XmlEventDecoder.java:87)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.UserError.abort(UserError.java:73)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.classinitialization.ProvenSafeClassInitializationSupport.checkDelayedInitialization(ProvenSafeClassInitializationSupport.java:277)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.classinitialization.ClassInitializationFeature.duringAnalysis(ClassInitializationFeature.java:164)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$10(NativeImageGenerator.java:770)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:86)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$11(NativeImageGenerator.java:770)
at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.AbstractAnalysisEngine.runAnalysis(AbstractAnalysisEngine.java:179)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:767)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:582)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:539)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:408)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:612)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.start(NativeImageGeneratorRunner.java:134)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:94)
Comment From: syedyusufh
@bclozel / @snicoll kindly help with the reported issue. Thx in advance
Comment From: sdeleuze
This is a GraalVM level issue. You can use --strict-image-heap
build argument at native-image
level with recent GraalVM 21 builds to fix it, that flag should be enabled by default as of GraalVM 22.