WebSphere Liberty无法为JAX-RS api自动生成swagger

问题描述 投票:1回答:1

在我公司的多个项目中,我们使用带有apiDiscovery-1.0功能的WebSphere Liberty Profile自动生成描述我们api的swagger.json。但是一个具体项目失败了。

日志显示我认为与问题相关的以下堆栈跟踪(向右滚动以查看消息的内容):

[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之一访问swagger文件:

我真的不明白错误信息以及我必须做些什么来解决它。

也许这是使用Jersey作为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。看起来它使用的是一个只有符号getEntity的旧api。我无法真正更改为旧api的代码,因为它在很多地方使用。

我使用Application类方法来激活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文件?

java-ee swagger websphere-liberty jax-rpc
1个回答
2
投票

您遇到的错误看起来像是Liberty提供的Swagger版本与您在应用程序中打包的Swagger版本之间的某种类加载冲突。

apiDiscovery-1.0功能将为您的应用程序提供Swagger核心库和io.swagger.annotations包,因此没有必要在您的应用程序中打包这些Swagger jar。尝试将这些依赖项更改为provided范围。

旁注:我认为你出于某种原因包括swagger-jersey2-jaxrs。这是因为您的应用程序使用Jersey作为第三方JAX-RS实现吗?如果启用其中一个jaxrs-2.X功能,Liberty将自动提供Apache CXF作为JAX-RS运行时(您不需要在应用程序中打包任何内容)。

© www.soinside.com 2019 - 2024. All rights reserved.