Swagger集成多个jaxrs服务器

时间:2015-10-05 12:10:57

标签: java jax-rs swagger

是否可以使用具有公共基路径的一个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}

3 个答案:

答案 0 :(得分:1)

设置usePathBasedConfig = true:

swagger2Feature.setUsePathBasedConfig(true);       

答案 1 :(得分:0)

swagger2Featureorg.apache.cxf.jaxrs.swagger.SwaggerFeature的引用吗?如果是这样,那么我担心你无法分享这个参考,因为contains state无法共享...

答案 2 :(得分:0)

我遇到了同样的问题(使用CXF 3.1.11或3.2.1)并找到了我将分享的解决方法。

首先,根据我的说法,CxfSwagger2Features中存在一个错误:如果你有多个cxf jaxrs,你可以定义多个bean或者它没有改变的bean:s​​erver所有服务器的所有资源都会显示在swagger中每项服务的档案。如果您的服务的基本路径相同,它将发生冲突。

基本上,CxfSwagger2Features并不关心你在XML定义中使用不同的地址,它使用服务的@Path来识别资源(所以你的bean的@Path)以及你是否拥有相同的@Path你的两个bean(sampleResource1和sampleResource2)中的值都会发生碰撞。

解决方法是为每个服务器提供不同的地址(就像你有的)和每个bean(sampleResource1和sampleResource2)一个不同的@Path。 这会搞砸你的网址,但这样可行。

如果我有时间并建议修复它,我会尝试找到问题的根源但是目前我只能想到暴露的解决方法。

此致

卢瓦克