В нескольких проектах моей компании мы используем WebSphere Liberty Profile с функцией apiDiscovery-1.0
для автоматической генерации swagger.json
, описывающей наши API. Но один конкретный проект терпит неудачу.
В журнале отображается следующая трассировка стека, которая, по моему мнению, связана с проблемой (прокрутите вправо, чтобы увидеть суть сообщения):
[AUDIT ] CWWKT0016I: Aplicativo da Web disponível (default_host): http://d-00884081.domain.net:14099/mycontext/
[ERROR ] CWWKE0701E: [com.ibm.ws.rest.api.discovery.APIProviderAggregator(316)] The setApiProvider method has thrown an exception Bundle:com.ibm.ws.rest.api.discovery(id=120) java.util.ServiceConfigurationError: io.swagger.jaxrs.ext.SwaggerExtension: Provider io.swagger.jersey.SwaggerJersey2Jaxrs not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:239)
at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at io.swagger.jaxrs.ext.SwaggerExtensions.<clinit>(SwaggerExtensions.java:31)
at [internal classes]
Если бы все работало нормально, я ожидал, что смогу получить доступ к файлу чванства по одному из следующих URL:
Я не совсем понимаю сообщение об ошибке и что я должен сделать, чтобы исправить это.
Может быть, дело в использовании Джерси в качестве реализации JAX-RS. Вот зависимости в проекте pom.xml
:
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-core</artifactId>
<version>1.5.16</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
<version>1.5.16</version>
</dependency>
Я пытался изменить зависимость jersey2 на
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jaxrs</artifactId>
<version>1.5.13</version>
<scope>compile</scope>
</dependency>
Но теперь код не компилируется, потому что класс javax.ws.rs.core.Response
теперь не имеет символа readEntity
. Похоже, что он использует старый API, который просто имеет символ getEntity. Я не могу изменить код на старый API, потому что он используется во многих местах.
Я использую подход класса приложений для активации JAX-RS. Вот его упрощенная версия:
@ApplicationPath("/api")
@SwaggerDefinition(
info=@Info(
version="1.4",
title="API REST",
description="a description",
),
schemes=SwaggerDefinition.Scheme.HTTP,
consumes={MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON},
produces={MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON},
)
public class JaxRsActivator extends Application {
@Inject private Logger log;
public JaxRsActivator() {
}
}
Как мне изменить мою конфигурацию, чтобы правильно сгенерировать файл swagger.json
?