springdo c -openapi + Spring 4 Совместимость - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть существующий API Spring 4 и я успешно интегрировал springdo c -openapi для создания OpenAPI 3 spe c в JSON / YAML, а также для отображения Swagger UI с использованием springdo c -openapi 1.2.29 и Spring Boot 15.2.2.RELEASE, однако, как представляется, исправлены различные ошибки и добавлены улучшения в более поздних версиях springdo c -openapi. К сожалению, у меня возникают различные проблемы совместимости с Spring 4, если я использую версии выше, чем springdo c -openapi 1.2.29.

Существует ли матрица совместимости доступности для springdo c -openapi и Spring 4? Читая документацию по springdo c -openapi, я не вижу никаких замечаний по readme или выпуску, указывающих на то, что существует требование Spring 5, однако, как отмечается ниже, классы Spring 5 используются в базовом Springdo c -openapi один раз. Вы достигли определенной версии.

Мое соответствующее POM:

    <!-- springdoc-openapi-ui -->
    <!-- anything over 1.2.33 uses Spring 5 MethodParameter.getParameter()-->
    <!-- anything over 1.2.29 uses Spring 5 org.springframework.http.codec.multipart.FilePart -->
    <!-- webjars-locator-jboss-vfs is required for running under JBOSS and exposing the swagger-ui -->
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-ui</artifactId>
        <version>1.2.29</version>
    </dependency>
    <!--  
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-security</artifactId>
        <version>1.2.29</version>
    </dependency>
    -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot</artifactId>
        <version>1.5.22.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>1.5.22.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>webjars-locator-jboss-vfs</artifactId>
        <version>0.1.0</version>
    </dependency>

При использовании springdo c -openapi-ui 1.2.30, оно впоследствии принесет springdo c -openapi -common-1.2.30.jar, который выдает исключение при попытке использовать org.springframework.http.code c .multipart.FilePart. Аналогично, использование 1.2.34 или выше вызовет исключение для MethodParameter.getParameter ().

12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1) Caused by: java.lang.NoClassDefFoundError: org/springframework/http/codec/multipart/FilePart
12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springdoc.core.GenericParameterBuilder.isFile(GenericParameterBuilder.java:271)
12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springdoc.core.GenericParameterBuilder.isFile(GenericParameterBuilder.java:296)
12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springdoc.core.AbstractRequestBuilder.buildParams(AbstractRequestBuilder.java:271)
12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springdoc.core.AbstractRequestBuilder.build(AbstractRequestBuilder.java:174)
12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:205)
12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springdoc.api.OpenApiResource.calculatePath(OpenApiResource.java:134)
12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springdoc.api.OpenApiResource.getPaths(OpenApiResource.java:99)
12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:124)
12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springdoc.api.OpenApiResource.openapiJson(OpenApiResource.java:83)
12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
12:15:05,003 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
12:15:05,004 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
12:15:05,004 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at java.lang.reflect.Method.invoke(Method.java:498)
12:15:05,004 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
12:15:05,004 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
12:15:05,004 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
12:15:05,004 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
12:15:05,004 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
12:15:05,004 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
12:15:05,004 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
12:15:05,004 ERROR [stderr] (ajp-localhost/127.0.0.1:8009-1)    ... 61 more

Ссылка на Spring 5: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/codec/multipart/FilePart.html

public interface FilePart
extends Part

Specialization of Part that represents an uploaded file received in a multipart request.

Since:
    5.0

Любые предложения о том, как обойти это, чтобы использовать исправления ошибок и улучшения в springdo c -openapi в более поздних версиях?

1 Ответ

3 голосов
/ 13 апреля 2020

Проблема подтверждена и будет решена в рамках 1.3.3. Пожалуйста, смотрите проблему, зарегистрированную с Springdo c ниже. Слава @bnasslahsen за невероятно быструю идентификацию и исправление!

https://github.com/springdoc/springdoc-openapi/issues/563

...