Open
Description
Hello,
First of all, thank you for your continued work on the Spring ecosystem.
I encountered a NullPointerException
while using Spring Boot 3.4.5 with AOT processing enabled, and I'd like to report a potential bug.
Based on my debugging, it seems that a NullPointerException occurs when using Jackson with Mongo data models annotated with @ Document.
If this issue is not already being worked on, I would like to submit a pull request with a fix.
Environment
- Spring Boot: 3.4.5
- Spring Data MongoDB
- GraalVM / Native AOT enabled
Stack Trace
Exception in thread "main" org.springframework.beans.factory.aot.AotBeanProcessingException: Error processing bean with name 'mongoManagedTypes' defined in class path resource [org/springframework/boot/autoconfigure/data/mongo/MongoDataConfiguration.class]: failed to generate code for bean definition
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution$BeanDefinitionsRegistrationGenerator.lambda$generateRegisterBeanDefinitionMethods$2(BeanRegistrationsAotContribution.java:217)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution$BeanDefinitionsRegistrationGenerator.generateRegisterBeanDefinitionMethods(BeanRegistrationsAotContribution.java:207)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution$BeanDefinitionsRegistrationGenerator.lambda$generateSliceMethod$1(BeanRegistrationsAotContribution.java:198)
at org.springframework.aot.generate.GeneratedMethod.<init>(GeneratedMethod.java:54)
at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:112)
at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:89)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution$BeanDefinitionsRegistrationGenerator.generateSliceMethod(BeanRegistrationsAotContribution.java:194)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution$BeanDefinitionsRegistrationGenerator.lambda$generateRegisterBeanDefinitionsMethod$0(BeanRegistrationsAotContribution.java:181)
at org.springframework.aot.generate.GeneratedMethod.<init>(GeneratedMethod.java:54)
at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:112)
at org.springframework.aot.generate.GeneratedMethods.add(GeneratedMethods.java:89)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution$BeanDefinitionsRegistrationGenerator.generateRegisterBeanDefinitionsMethod(BeanRegistrationsAotContribution.java:166)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.applyTo(BeanRegistrationsAotContribution.java:77)
at org.springframework.context.aot.BeanFactoryInitializationAotContributions.applyTo(BeanFactoryInitializationAotContributions.java:96)
at org.springframework.context.aot.ApplicationContextAotGenerator.lambda$processAheadOfTime$0(ApplicationContextAotGenerator.java:58)
at org.springframework.context.aot.ApplicationContextAotGenerator.withCglibClassHandler(ApplicationContextAotGenerator.java:67)
at org.springframework.context.aot.ApplicationContextAotGenerator.processAheadOfTime(ApplicationContextAotGenerator.java:53)
at org.springframework.context.aot.ContextAotProcessor.performAotProcessing(ContextAotProcessor.java:106)
at org.springframework.context.aot.ContextAotProcessor.doProcess(ContextAotProcessor.java:84)
at org.springframework.context.aot.ContextAotProcessor.doProcess(ContextAotProcessor.java:49)
at org.springframework.context.aot.AbstractAotProcessor.process(AbstractAotProcessor.java:83)
at org.springframework.boot.SpringApplicationAotProcessor.main(SpringApplicationAotProcessor.java:80)
Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Package.getName()" because the return value of "java.lang.Class.getPackage()" is null
Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Package.getName()" because the return value of "java.lang.Class.getPackage()" is null
at org.springframework.data.util.QTypeContributor.getQueryClassName(QTypeContributor.java:83)
at org.springframework.data.util.QTypeContributor.contributeEntityPath(QTypeContributor.java:44)
at org.springframework.data.aot.ManagedTypesBeanRegistrationAotProcessor.contributeType(ManagedTypesBeanRegistrationAotProcessor.java:140)
at org.springframework.data.mongodb.aot.MongoManagedTypesBeanRegistrationAotProcessor.contributeType(MongoManagedTypesBeanRegistrationAotProcessor.java:53)
at org.springframework.data.aot.ManagedTypesRegistrationAotContribution.lambda$applyTo$0(ManagedTypesRegistrationAotContribution.java:96)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:103)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:117)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:117)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:117)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:117)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:117)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:117)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:117)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:117)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:117)
at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:117)
at org.springframework.data.util.TypeCollector.process(TypeCollector.java:90)
at org.springframework.data.util.TypeCollector$ReachableTypes.lambda$forEach$0(TypeCollector.java:229)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at org.springframework.data.util.TypeCollector$ReachableTypes.forEach(TypeCollector.java:229)
at org.springframework.data.aot.ManagedTypesRegistrationAotContribution.applyTo(ManagedTypesRegistrationAotContribution.java:96)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.lambda$generateBeanDefinitionMethod$2(BeanDefinitionMethodGenerator.java:165)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.generateBeanDefinitionMethod(BeanDefinitionMethodGenerator.java:165)
at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.generateBeanDefinitionMethod(BeanDefinitionMethodGenerator.java:89)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution$BeanDefinitionsRegistrationGenerator.generateBeanRegistration(BeanRegistrationsAotContribution.java:226)
at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution$BeanDefinitionsRegistrationGenerator.lambda$generateRegisterBeanDefinitionMethods$2(BeanRegistrationsAotContribution.java:209)
... 22 more