Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.lang.ClassNotFoundException: kotlin.reflect.full.KClasses when upgrade from 2.7.0 to 2.8.0 #2834

Closed
limo520 opened this issue Jan 6, 2025 · 4 comments

Comments

@limo520
Copy link

limo520 commented Jan 6, 2025

Describe the bug

When a project depends kotlin-stdlib without kotlin-reflect, upgrading springdoc-openapi-starter-webmvc-ui from 2.7.0 to 2.8.0 will result in java.lang.ClassNotFoundException: kotlin.reflect.full.KClasses

To Reproduce

  1. A simple boot project depends kotlin-stdlib without kotlin-reflect
  2. upgrading springdoc-openapi-starter-webmvc-ui from 2.7.0 to 2.8.0
  3. Visit /swagger-ui/index.html and the exception happened

Expected behavior
No exception is expected.

@tienipia
Copy link

tienipia commented Jan 6, 2025

same issue here.

jakarta.servlet.ServletException: Handler dispatch failed: java.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1103) ~[spring-webmvc-6.2.1.jar:6.2.1]
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:978) ~[spring-webmvc-6.2.1.jar:6.2.1]
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.1.jar:6.2.1]
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.2.1.jar:6.2.1]
        at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527) ~[jakarta.servlet-api-6.0.0.jar:6.0.0]
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.2.1.jar:6.2.1]
        at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614) ~[jakarta.servlet-api-6.0.0.jar:6.0.0]
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.2.1.jar:6.2.1]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.1.jar:6.2.1]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.2.1.jar:6.2.1]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.1.jar:6.2.1]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.2.1.jar:6.2.1]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.1.jar:6.2.1]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101) ~[spring-web-6.2.1.jar:6.2.1]
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) ~[undertow-core-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:276) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:132) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:256) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:101) ~[undertow-servlet-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:395) ~[undertow-core-2.3.18.Final.jar:2.3.18.Final]
        at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:861) ~[undertow-core-2.3.18.Final.jar:2.3.18.Final]
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18) ~[jboss-threads-3.5.0.Final.jar:3.5.0.Final]
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513) ~[jboss-threads-3.5.0.Final.jar:3.5.0.Final]
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538) ~[jboss-threads-3.5.0.Final.jar:3.5.0.Final]
        at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282) ~[xnio-api-3.8.16.Final.jar:3.8.16.Final]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
Caused by: java.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses
        at org.springdoc.core.customizers.KotlinDeprecatedPropertyCustomizer.resolve(KotlinDeprecatedPropertyCustomizer.kt:62) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at org.springdoc.core.converters.PageableOpenAPIConverter.resolve(PageableOpenAPIConverter.java:96) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at org.springdoc.core.converters.PageOpenAPIConverter.resolve(PageOpenAPIConverter.java:101) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at org.springdoc.core.converters.SortOpenAPIConverter.resolve(SortOpenAPIConverter.java:91) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-jakarta-2.2.27.jar:2.2.27]
        at io.swagger.v3.core.converter.ModelConverters.resolveAsResolvedSchema(ModelConverters.java:192) ~[swagger-core-jakarta-2.2.27.jar:2.2.27]
        at org.springdoc.core.utils.SpringDocAnnotationsUtils.extractSchema(SpringDocAnnotationsUtils.java:133) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at org.springdoc.core.service.GenericParameterService.calculateSchema(GenericParameterService.java:381) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at org.springdoc.core.service.AbstractRequestService.buildParam(AbstractRequestService.java:591) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at org.springdoc.core.service.AbstractRequestService.buildParams(AbstractRequestService.java:550) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at org.springdoc.core.service.AbstractRequestService.build(AbstractRequestService.java:334) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:609) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:802) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:222) ~[springdoc-openapi-starter-webmvc-api-2.8.0.jar:2.8.0]
        at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[na:na]
        at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:203) ~[springdoc-openapi-starter-webmvc-api-2.8.0.jar:2.8.0]
        at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:173) ~[springdoc-openapi-starter-webmvc-api-2.8.0.jar:2.8.0]
        at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[na:na]
        at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:152) ~[springdoc-openapi-starter-webmvc-api-2.8.0.jar:2.8.0]
        at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:370) ~[springdoc-openapi-starter-common-2.8.0.jar:2.8.0]
        at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:127) ~[springdoc-openapi-starter-webmvc-api-2.8.0.jar:2.8.0]
        at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:117) ~[springdoc-openapi-starter-webmvc-api-2.8.0.jar:2.8.0]
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:257) ~[spring-web-6.2.1.jar:6.2.1]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190) ~[spring-web-6.2.1.jar:6.2.1]
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.1.jar:6.2.1]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) ~[spring-webmvc-6.2.1.jar:6.2.1]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) ~[spring-webmvc-6.2.1.jar:6.2.1]
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.1.jar:6.2.1]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1088) ~[spring-webmvc-6.2.1.jar:6.2.1]
        ... 53 common frames omitted
Caused by: java.lang.ClassNotFoundException: kotlin.reflect.full.KClasses
        ... 84 common frames omitted

@Xzuner
Copy link

Xzuner commented Jan 6, 2025

same issure here,using 2.8.0
Handler dispatch failed: java.lang.NoClassDefFoundError: kotlin/reflect/full/KClasses

@yolopunk
Copy link

yolopunk commented Jan 6, 2025

need set properties springdoc.enable-kotlin=false

the default value is true

@sergeykad
Copy link

Adding the configuration does not feel like a proper solution for this. I was not even aware till now that we have a transitive dependency on kotlin-stdlib through resilience4j-retry.

ndwlocatieservices added a commit to ndwnu/nls-accessibility-map that referenced this issue Jan 14, 2025
…arter-webmvc-ui to v2.8.1

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://springdoc.org/) ([source](https://github.com/springdoc/springdoc-openapi)) | compile | patch | `2.8.0` -> `2.8.1` |

---

### Release Notes

<details>
<summary>springdoc/springdoc-openapi (org.springdoc:springdoc-openapi-starter-webmvc-ui)</summary>

### [`v2.8.1`](https://github.com/springdoc/springdoc-openapi/blob/HEAD/CHANGELOG.md#281---2025-01-06)

[Compare Source](springdoc/springdoc-openapi@v2.8.0...v2.8.1)

##### Fixed

-   [#&#8203;2834](springdoc/springdoc-openapi#2834) - java.lang.ClassNotFoundException: kotlin.reflect.full.KClasses when upgrade from 2.7.0 to 2.8.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or PR is renamed to start with "rebase!".

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).

Related work items: #86382
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants