是否可以使用具有公共基路径的一个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}
答案 0 :(得分:1)
设置usePathBasedConfig = true:
swagger2Feature.setUsePathBasedConfig(true);
答案 1 :(得分:0)
swagger2Feature
是org.apache.cxf.jaxrs.swagger.SwaggerFeature
的引用吗?如果是这样,那么我担心你无法分享这个参考,因为contains state无法共享...
答案 2 :(得分:0)
我遇到了同样的问题(使用CXF 3.1.11或3.2.1)并找到了我将分享的解决方法。
首先,根据我的说法,CxfSwagger2Features中存在一个错误:如果你有多个cxf jaxrs,你可以定义多个bean或者它没有改变的bean:server所有服务器的所有资源都会显示在swagger中每项服务的档案。如果您的服务的基本路径相同,它将发生冲突。
基本上,CxfSwagger2Features并不关心你在XML定义中使用不同的地址,它使用服务的@Path来识别资源(所以你的bean的@Path)以及你是否拥有相同的@Path你的两个bean(sampleResource1和sampleResource2)中的值都会发生碰撞。
解决方法是为每个服务器提供不同的地址(就像你有的)和每个bean(sampleResource1和sampleResource2)一个不同的@Path。 这会搞砸你的网址,但这样可行。
如果我有时间并建议修复它,我会尝试找到问题的根源但是目前我只能想到暴露的解决方法。
此致
卢瓦克