2015-10-05 3 views
0

Можно ли настроить разметку для нескольких серверов jaxrs (несколько подсистем), используя одну конфигурацию Swagger с общим базовым маршрутом? Например:Интеграция Swagger для нескольких серверов jaxrs

конфигурации сервлета:

<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 принимает старый BasePath от сервера 1:

Ожидаемый результат: http://localhost:9000/services/swaggerSample/v2/sample/{name}

Фактический результат: http://localhost:9000/services/sample/{name}

ответ

0

ли swagger2Feature ссылка на org.apache.cxf.jaxrs.swagger.SwaggerFeature? если да, то, боюсь, вы не можете поделиться этой ссылкой, потому что это contains state, которые нельзя использовать ...

0

Я столкнулся с той же проблемой (используя CXF 3.1.11 или 3.2.1) и нашел обходной путь, который я поделюсь.

Прежде всего, по моему мнению, в CxfSwagger2Features обнаружена ошибка: вы можете определить несколько компонентов или один компонент, который он не изменил, если у вас несколько jxrs cxf: сервер все ресурсы всех серверов будут показаны в swagger-файл каждой службы. И если базовый путь вашего сервиса будет таким же, он столкнется.

В принципе, CxfSwagger2Features не заботился о том, чтобы вы использовали другой адрес в определении XML, он использует @Path службы для идентификации ресурсов rusources (так что @Path вашего компонента), и если у вас есть тот же @ Значение пути в обоих компонентах (sampleResource1 и sampleResource2 здесь) будет сталкиваться.

Обходной путь должен иметь для каждого сервера разные адреса (например, у вас есть) и каждый компонент (sampleResource1 и sampleResource2) другой @Path. Это немного испортит ваш URL, но это сработает.

Я попытаюсь найти корень проблемы, если у меня есть время, и предложим исправление, но на данный момент я могу только думать об открытом обходном пути.

С уважением,

Лоик

0

Set usePathBasedConfig = истина:

swagger2Feature.setUsePathBasedConfig(true);  
Смежные вопросы