Java 针对多个jaxrs服务器的Swagger集成

Java 针对多个jaxrs服务器的Swagger集成,java,jax-rs,swagger,Java,Jax Rs,Swagger,是否可以使用一个带有公共basepath的swagger配置为多个jaxrs服务器(多个子系统)配置swagger? 例如: Servlet配置: <init-param> <param-name>swagger.api.basepath</param-name> <param-value>http://localhost:9000/services</param-value> </init-param>

是否可以使用一个带有公共basepath的swagger配置为多个jaxrs服务器(多个子系统)配置swagger? 例如:

Servlet配置:

<init-param>
    <param-name>swagger.api.basepath</param-name>
    <param-value>http://localhost:9000/services</param-value>
</init-param>

swagger.api.basepath
http://localhost:9000/services
Context.xml配置

服务器1:


服务器2:


服务器1:

<init-param>
    <param-name>swagger.api.basepath</param-name>
    <param-value>http://localhost:9000/services</param-value>
</init-param>
预期结果:
http://localhost:9000/services/swaggerSample/v1/sample/{name}

实际结果:
http://localhost:9000/services/sample/{name}

服务器2: 服务器2从服务器1获取旧的基本路径:

预期结果:
http://localhost:9000/services/swaggerSample/v2/sample/{name}


实际结果:
http://localhost:9000/services/sample/{name}

是对
org.apache.cxf.jaxrs.swagger.SwaggerFeature
的引用吗?如果是这样的话,恐怕您无法共享此引用,因为它无法共享…

我遇到了相同的问题(使用CXF 3.1.11或3.2.1),并找到了一个我将共享的解决方法

首先,据我所知,CxfSwagger2Features中存在一个bug:您可以定义多个bean或一个它没有更改的bean,如果您有多个cxf jaxrs:server,则所有服务器的所有资源都将显示在每个服务的swagger文件中。如果服务的基本路径相同,则会发生冲突

基本上,CxfSwagger2Features并不关心您在XML定义中使用不同的地址,它使用服务的@Path来标识Resources(也就是bean的@Path),如果您在两个bean中具有相同的@Path值(这里是sampleResource1和sampleResource2),则会发生冲突

解决方法是为每个服务器提供不同的地址(就像您所拥有的那样),并为每个bean(sampleResource1和sampleResource2)提供不同的@Path。 这会弄乱你的网址,但这会起作用

如果我有时间,我会试图找到问题的根源,并提出解决方案,但目前我只能想到公开的解决方法

问候,


Loïc

设置usePathBasedConfig=true:

swagger2Feature.setUsePathBasedConfig(true);