多个jaxrs服务器的Swagger集成
是否可以使用一个具有公共basepath的Swagger配置为多个jaxrs服务器(多个子系统)配置swagger? 例如:多个jaxrs服务器的Swagger集成
Servlet的配置:
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:9000/services</param-value>
</init-param>
context.xml的配置
服务器1:
<jaxrs:server id="sampleServer" address="/swaggerSample/v1">
<jaxrs:serviceBeans>
<ref bean="sampleResource1" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="jsonProvider" />
<ref bean="multipartProvider" />
</jaxrs:providers>
<jaxrs:features>
<ref bean="swagger2Feature" />
</jaxrs:features>
</jaxrs:server>
服务器2:
<jaxrs:server id="sampleServer" address="/swaggerSample/v2">
<jaxrs:serviceBeans>
<ref bean="sampleResource2" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="jsonProvider" />
<ref bean="multipartProvider" />
</jaxrs:providers>
<jaxrs:features>
<ref bean="swagger2Feature" />
</jaxrs:features>
</jaxrs:server>
服务器1:
预期结果: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}
是swagger2Feature
到org.apache.cxf.jaxrs.swagger.SwaggerFeature
参考?如果是这样,那么恐怕你不能分享这个参考,因为它contains state,不能共享...
我遇到了同样的问题(使用CXF 3.1.11或3.2.1),发现我将分享一个解决方法。首先,根据我的说法,CxfSwagger2Features中存在一个错误:如果您有多个cxf jaxrs,您可以定义多个bean或一个没有更改的bean:服务器将显示所有服务器的所有资源每个服务的swagger文件。如果你的服务的基本路径是相同的,它会发生冲突。
基本上,CxfSwagger2Features不关心你在XML定义中使用了不同的地址,它使用服务的@Path来标识资源(所以你的bean的@Path),如果你有相同的@这两个bean中的路径值(sampleResource1和sampleResource2)会发生冲突。
解决方法是让每个服务器拥有不同的地址(如你有的)和每个bean(sampleResource1和sampleResource2)不同的@Path。 这会搞砸你的网址,但这会起作用。
我会尽力找到问题的根源,如果我有时间并提出修复方案,但目前我只能想到暴露的解决方法。
问候,
卢瓦克
设置usePathBasedConfig =真:
swagger2Feature.setUsePathBasedConfig(true);