多个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}

swagger2Featureorg.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);