Skip to content

Issue with AOT and Kotlin data class: The following must be non-sealed interfaces #4351

Closed
@fab918

Description

@fab918

When I add the gradle AOT plugin id("org.graalvm.buildtools.native") I have an error on a simple data class document from org.springframework.data.mongodb.aot.LazyLoadingProxyAotProcessor:

Exception in thread "main" java.lang.IllegalArgumentException: The following must be non-sealed interfaces: [...persistence.entity.Tags]
	at org.springframework.aot.hint.JdkProxyHint$Builder.toTypeReferences(JdkProxyHint.java:159)
	at org.springframework.aot.hint.JdkProxyHint$Builder.proxiedInterfaces(JdkProxyHint.java:129)
	at org.springframework.aot.hint.ProxyHints.lambda$registerJdkProxy$1(ProxyHints.java:78)
	at org.springframework.aot.hint.ProxyHints.registerJdkProxy(ProxyHints.java:50)
	at org.springframework.aot.hint.ProxyHints.registerJdkProxy(ProxyHints.java:77)
	at org.springframework.data.mongodb.aot.LazyLoadingProxyAotProcessor.lambda$registerLazyLoadingProxyIfNeeded$2(LazyLoadingProxyAotProcessor.java:76)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
	at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at org.springframework.data.mongodb.aot.LazyLoadingProxyAotProcessor.registerLazyLoadingProxyIfNeeded(LazyLoadingProxyAotProcessor.java:55)
	at org.springframework.data.mongodb.aot.MongoManagedTypesBeanRegistrationAotProcessor.contributeType(MongoManagedTypesBeanRegistrationAotProcessor.java:54)
	at org.springframework.data.aot.ManagedTypesRegistrationAotContribution.lambda$applyTo$0(ManagedTypesRegistrationAotContribution.java:97)
	at org.springframework.data.util.TypeCollector.processType(TypeCollector.java:103)
	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:1511)
	at org.springframework.data.util.TypeCollector$ReachableTypes.forEach(TypeCollector.java:229)
	at org.springframework.data.aot.ManagedTypesRegistrationAotContribution.applyTo(ManagedTypesRegistrationAotContribution.java:97)
	at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.lambda$generateBeanDefinitionMethod$2(BeanDefinitionMethodGenerator.java:186)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.generateBeanDefinitionMethod(BeanDefinitionMethodGenerator.java:186)
	at org.springframework.beans.factory.aot.BeanDefinitionMethodGenerator.generateBeanDefinitionMethod(BeanDefinitionMethodGenerator.java:109)
	at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.lambda$generateRegisterBeanDefinitionsMethod$2(BeanRegistrationsAotContribution.java:85)
	at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:721)
	at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.generateRegisterBeanDefinitionsMethod(BeanRegistrationsAotContribution.java:83)
	at org.springframework.beans.factory.aot.BeanRegistrationsAotContribution.lambda$applyTo$1(BeanRegistrationsAotContribution.java:67)
	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.applyTo(BeanRegistrationsAotContribution.java:66)
	at org.springframework.context.aot.BeanFactoryInitializationAotContributions.applyTo(BeanFactoryInitializationAotContributions.java:78)
	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:82)
	at org.springframework.boot.SpringApplicationAotProcessor.main(SpringApplicationAotProcessor.java:80)

FAILURE: Build failed with an exception.

The Tags class is a simple data class:

@Document
data class Tags(
    @Id var key: String = "",
    var url: String = "",
    var langs: Map<LangEnum, String> = emptyMap()
)

Here is the gradle.kts plugin file, note that to use dataclass with spring data mongodb, you already have to open these classes with allOpen, I guess it is probably related.

plugins {
    id("org.springframework.boot") version "3.0.5"
    id("io.spring.dependency-management") version "1.1.0"
    id("org.jetbrains.kotlin.plugin.allopen") version "1.8.20-RC2"
    id("org.graalvm.buildtools.native") version "0.9.20"
    kotlin("jvm") version "1.7.22"
    kotlin("plugin.spring") version "1.7.22"
}

allOpen {
    annotation("org.springframework.data.mongodb.core.mapping.Document")
}

Metadata

Metadata

Labels

in: kotlinKotlin supporttheme: aotAn issue related to Ahead-Of-Time processingtype: bugA general bug

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions