You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When a Spring Cloud Gateway MVC is configured for all HTTP methods the api-docs (and thus swagger UI) can not be loaded because springdoc somehow is also trying to analyze these routes. I tried to mitigate that by configuring springdoc.paths-to-exclude but it had no effect.
Stacktrace:
java.lang.IllegalStateException: Unexpected value: TRACE
at org.springdoc.core.fn.RouterFunctionData.getRequestMethod(RouterFunctionData.java:289) ~[springdoc-openapi-starter-common-2.3.0.jar:2.3.0]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[na:na]
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) ~[na:na]
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) ~[na:na]
at org.springdoc.core.fn.RouterFunctionData.getMethod(RouterFunctionData.java:258) ~[springdoc-openapi-starter-common-2.3.0.jar:2.3.0]
at org.springdoc.core.fn.RouterFunctionData.setMethods(RouterFunctionData.java:182) ~[springdoc-openapi-starter-common-2.3.0.jar:2.3.0]
at org.springdoc.core.fn.AbstractRouterFunctionVisitor.lambda$method$0(AbstractRouterFunctionVisitor.java:110) ~[springdoc-openapi-starter-common-2.3.0.jar:2.3.0]
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) ~[na:na]
at org.springdoc.core.fn.AbstractRouterFunctionVisitor.method(AbstractRouterFunctionVisitor.java:110) ~[springdoc-openapi-starter-common-2.3.0.jar:2.3.0]
at org.springframework.web.servlet.function.RequestPredicates$HttpMethodPredicate.accept(RequestPredicates.java:555) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springframework.web.servlet.function.RequestPredicates$AndRequestPredicate.accept(RequestPredicates.java:907) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springdoc.webmvc.core.providers.RouterFunctionWebMvcProvider$RouterFunctionVisitor.route(RouterFunctionWebMvcProvider.java:92) ~[springdoc-openapi-starter-webmvc-api-2.3.0.jar:2.3.0]
at org.springframework.web.servlet.function.RouterFunctions$DefaultRouterFunction.accept(RouterFunctions.java:1067) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springframework.web.servlet.function.RouterFunctionBuilder$BuiltRouterFunction.lambda$accept$0(RouterFunctionBuilder.java:418) ~[spring-webmvc-6.1.3.jar:6.1.3]
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) ~[na:na]
at org.springframework.web.servlet.function.RouterFunctionBuilder$BuiltRouterFunction.accept(RouterFunctionBuilder.java:418) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springframework.web.servlet.function.RouterFunctions$FilteredRouterFunction.accept(RouterFunctions.java:1029) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springdoc.webmvc.core.providers.RouterFunctionWebMvcProvider.getRouterFunctionPaths(RouterFunctionWebMvcProvider.java:73) ~[springdoc-openapi-starter-webmvc-api-2.3.0.jar:2.3.0]
at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$6(OpenApiResource.java:183) ~[springdoc-openapi-starter-webmvc-api-2.3.0.jar:2.3.0]
at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[na:na]
at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:183) ~[springdoc-openapi-starter-webmvc-api-2.3.0.jar:2.3.0]
at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:353) ~[springdoc-openapi-starter-common-2.3.0.jar:2.3.0]
at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:124) ~[springdoc-openapi-starter-webmvc-api-2.3.0.jar:2.3.0]
at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:111) ~[springdoc-openapi-starter-webmvc-api-2.3.0.jar:2.3.0]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:261) ~[spring-web-6.1.3.jar:6.1.3]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:189) ~[spring-web-6.1.3.jar:6.1.3]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:917) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:829) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.3.jar:6.1.3]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.3.jar:6.1.3]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.18.jar:6.0]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.3.jar:6.1.3]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.18.jar:6.0]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.18.jar:10.1.18]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.springframework.cloud.gateway.server.mvc.filter.WeightCalculatorFilter.doFilter(WeightCalculatorFilter.java:229) ~[spring-cloud-gateway-server-mvc-4.1.0.jar:4.1.0]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.springframework.cloud.gateway.server.mvc.filter.FormFilter.doFilter(FormFilter.java:97) ~[spring-cloud-gateway-server-mvc-4.1.0.jar:4.1.0]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.3.jar:6.1.3]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.3.jar:6.1.3]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.3.jar:6.1.3]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.3.jar:6.1.3]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.3.jar:6.1.3]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.3.jar:6.1.3]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.18.jar:10.1.18]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
What version of spring-boot you are using?
latest (3.2.2)
What modules and versions of springdoc-openapi are you using?
latest (springdoc-openapi-starter-webmvc-ui v2.3.0)
What is the actual and the expected result using OpenAPI Description (yml or json)?
actual result: no OpenAPI definition is generated
expected result: OpenAPI definition is generated
see attached example project, can easily be reproduced. Problem arises because I want to proxy all HTTP method (see GatewayConfiguration line 20)
Expected behavior
Springdoc should work just fine with TRACE gateway routes. If there is a reason to not support HTTP TRACE (did not investigate, most likely because it isnt included in that explizit check in the stacktrace above) it should be possible to exclude such paths by configuration (springdoc.paths-to-exclude would be a natural fit for this IMHO)
Describe the bug
When a Spring Cloud Gateway MVC is configured for all HTTP methods the api-docs (and thus swagger UI) can not be loaded because springdoc somehow is also trying to analyze these routes. I tried to mitigate that by configuring
springdoc.paths-to-exclude
but it had no effect.Stacktrace:
To Reproduce
just run the attached minimal example project and visit http://localhost:8080/swagger-ui/index.html
What version of spring-boot you are using?
latest (3.2.2)
What modules and versions of springdoc-openapi are you using?
latest (springdoc-openapi-starter-webmvc-ui v2.3.0)
What is the actual and the expected result using OpenAPI Description (yml or json)?
actual result: no OpenAPI definition is generated
expected result: OpenAPI definition is generated
see attached example project, can easily be reproduced. Problem arises because I want to proxy all HTTP method (see GatewayConfiguration line 20)
Expected behavior
Springdoc should work just fine with TRACE gateway routes. If there is a reason to not support HTTP TRACE (did not investigate, most likely because it isnt included in that explizit check in the stacktrace above) it should be possible to exclude such paths by configuration (
springdoc.paths-to-exclude
would be a natural fit for this IMHO)Screenshots
n/a
Additional context
gateway-springdoc.zip
The text was updated successfully, but these errors were encountered: