When using springdoc-openapi-starter-webmvc-api v5.0.0 in a pure Java project (without any Kotlin source code or explicit Kotlin dependencies) powered by Spring Boot 4.1.0, accessing the OpenAPI description endpoint (http://127.0.0.1:8017/v3/api-docs) fails with a jakarta.servlet.ServletException caused by java.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses.
It appears that KotlinRequiredPropertyCustomizer is being invoked unconditionally during model resolution, forcing a runtime dependency on Kotlin reflection even for non-Kotlin projects.
Spring Boot Version: 4.1.0
Springdoc-openapi Version: 5.0.0 (springdoc-openapi-starter-webmvc-api)
To Reproduce
1. Set up a pure Java Spring Boot 4.1.0 project.
2. Add the dependency `org.springdoc:springdoc-openapi-starter-webmvc-api:5.0.0`.
3. Start the application and make a GET request to `/v3/api-docs`.
Expected behavior
The OpenAPI docs should be generated properly without assuming Kotlin classes/libraries are present in the classpath of a pure Java application. KotlinRequiredPropertyCustomizer should check for Kotlin's presence before execution or handle missing dependencies gracefully.
Actual behavior & Stacktrace
jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:978) ~[spring-webmvc-7.0.8.jar:7.0.8]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:866) ~[spring-webmvc-7.0.8.jar:7.0.8]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1000) ~[spring-webmvc-7.0.8.jar:7.0.8]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:892) ~[spring-webmvc-7.0.8.jar:7.0.8]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:633) ~[jakarta.servlet-api-6.1.0.jar:6.1.0]
...
Caused by: java.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses
at org.springdoc.core.customizers.KotlinRequiredPropertyCustomizer.resolve(KotlinRequiredPropertyCustomizer.kt:99) ~[springdoc-openapi-starter-common-5.0.0.jar:5.0.0]
at org.springdoc.core.converters.PageableOpenAPIConverter.resolve(PageableOpenAPIConverter.java:97) ~[springdoc-openapi-starter-common-5.0.0.jar:5.0.0]
at org.springdoc.core.converters.PageOpenAPIConverter.resolve(PageOpenAPIConverter.java:102) ~[springdoc-openapi-starter-common-5.0.0.jar:5.0.0]
at org.springdoc.core.converters.SortOpenAPIConverter.resolve(SortOpenAPIConverter.java:92) ~[springdoc-openapi-starter-common-5.0.0.jar:5.0.0]
at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-4.0.0.jar:4.0.0]
at io.swagger.v3.core.jackson.ModelResolver.resolve(ModelResolver.java:799) ~[swagger-core-4.0.0.jar:4.0.0]
...
When using
springdoc-openapi-starter-webmvc-apiv5.0.0 in a pure Java project (without any Kotlin source code or explicit Kotlin dependencies) powered by Spring Boot 4.1.0, accessing the OpenAPI description endpoint (http://127.0.0.1:8017/v3/api-docs) fails with ajakarta.servlet.ServletExceptioncaused byjava.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses.It appears that
KotlinRequiredPropertyCustomizeris being invoked unconditionally during model resolution, forcing a runtime dependency on Kotlin reflection even for non-Kotlin projects.Spring Boot Version: 4.1.0
Springdoc-openapi Version: 5.0.0 (
springdoc-openapi-starter-webmvc-api)To Reproduce
Expected behavior
The OpenAPI docs should be generated properly without assuming Kotlin classes/libraries are present in the classpath of a pure Java application.
KotlinRequiredPropertyCustomizershould check for Kotlin's presence before execution or handle missing dependencies gracefully.Actual behavior & Stacktrace