Skip to content

NoClassDefFoundError: kotlin/reflect/full/KClasses thrown on pure Java project when accessing /v3/api-docs (Spring Boot 4.1.0 + springdoc 5.0.0) #54

Description

@itzlyg

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]
	    ...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions