i am trying to use APACHE CXF swagger2feature support for API documentation.
following is the beans.xml configuration and web.xml file.
there are 3 server endpoints documentation needed. thus i have defined multiple jaxrs:server
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>fbw-app</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<listener>
<listener-class>io.strati.servlet.listener.ManagedServicesListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextClass</param-name>
<param-value>io.strati.spring.StratiWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<init-param>
<param-name>service-list-path</param-name>
<param-value>/*</param-value>
</init-param>
<init-param>
<param-name>static-resources-list</param-name>
<param-value>/services/swagger-ui-bundle.js /v2/swagger-ui-bundle.js /v3/swagger-ui-bundle.js /services/swagger-ui-standalone-preset.js /v2/swagger-ui-standalone-preset.js /v3/swagger-ui-standalone-preset.js /services/swagger-ui.css /v2/swagger-ui.css /v3/swagger-ui.css /services/swagger-ui.js /v2/swagger-ui.js /v3/swagger-ui.js</param-value> </init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
beans.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:cxf="http://cxf.apache.org/core" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://cxf.apache.org/core
http://cxf.apache.org/schemas/core.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd">
<import resource="classpath:/META-INF/cxf/cxf.xml" />
<import resource="classpath:/META-INF/cxf/cxf-servlet.xml" />
<import resource="classpath:/META-INF/sample-app/sample-biz-context.xml" />
<context:component-scan base-package="com.xyz.services,com.xyz.abc.king" />
<context:annotation-config />
<jaxrs:server id="sample-services" address="/services">
<jaxrs:serviceBeans>
<ref bean="sampleServiceImpl1" />
<ref bean="sampleServiceImpl2" />
<ref bean="sampleServiceImpl3" />
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="json" value="application/json"/>
</jaxrs:extensionMappings>
<jaxrs:providers>
<ref bean="jsonProvider"/>
<ref bean="exceptionMapperProvider"/>
<ref bean="transactionStartFilter"/>
<ref bean="transactionEndFilter"/>
</jaxrs:providers>
<jaxrs:features>
<ref bean="swagger2Feature" />
</jaxrs:features>
<jaxrs:inInterceptors>
<ref bean="validationInInterceptor"/>
</jaxrs:inInterceptors>
<jaxrs:outInterceptors>
<ref bean="validationOutInterceptor"/>
<ref bean="errorCodesMetricsGeneratorInterceptor" />
</jaxrs:outInterceptors>
</jaxrs:server>
<jaxrs:server id="sample-services-gmp" address="/v2">
<jaxrs:serviceBeans>
<ref bean="sampleServiceGmpImpl1" />
<ref bean="sampleServiceGmpImpl2" />
<ref bean="sampleServiceGmpImpl3" />
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="json" value="application/json"/>
</jaxrs:extensionMappings>
<jaxrs:providers>
<ref bean="jsonProvider"/>
<ref bean="gmpExceptionMapperProvider"/>
<ref bean="transactionStartFilter"/>
<ref bean="transactionEndFilter"/>
</jaxrs:providers>
<jaxrs:features>
<ref bean="v2swagger2Feature" />
</jaxrs:features>
<jaxrs:inInterceptors>
<ref bean="validationInInterceptor"/>
<ref bean="headerInterceptor"/>
<ref bean="sellerStatusInterceptor" />
</jaxrs:inInterceptors>
<jaxrs:outInterceptors>
<ref bean="validationOutInterceptor"/>
<ref bean="errorCodesMetricsGeneratorInterceptor" />
</jaxrs:outInterceptors>
</jaxrs:server>
<jaxrs:server id="sample-services-v3" address="/v3">
<jaxrs:serviceBeans>
<ref bean="SampleService1ImplV3" />
<ref bean="SampleService2ImplV3"/>
<ref bean="SampleService3ImplV3"/>
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="json" value="application/json"/>
</jaxrs:extensionMappings>
<jaxrs:providers>
<ref bean="jsonProvider"/>
<ref bean="gmpExceptionMapperProvider"/>
<ref bean="transactionStartFilter"/>
<ref bean="transactionEndFilter"/>
</jaxrs:providers>
<jaxrs:features>
<ref bean="v3swagger2Feature" />
</jaxrs:features>
<jaxrs:inInterceptors>
<ref bean="validationInInterceptor"/>
<ref bean="headerInterceptor"/>
</jaxrs:inInterceptors>
<jaxrs:outInterceptors>
<ref bean="validationOutInterceptor"/>
<ref bean="errorCodesMetricsGeneratorInterceptor" />
</jaxrs:outInterceptors>
</jaxrs:server>
<!-- CXF Swagger2Feature -->
<bean id="swagger2Feature" class="org.apache.cxf.jaxrs.swagger.Swagger2Feature">
<!-- customize some of the properties -->
<property name="title" value="sample REST Application(services)"/>
<property name="basePath" value="true"/>
</bean>
<!-- CXF Swagger2Feature -->
<bean id="v2swagger2Feature" class="org.apache.cxf.jaxrs.swagger.Swagger2Feature">
<!-- customize some of the properties -->
<property name="title" value="sample REST Application(V2)"/>
<property name="basePath" value="true"/>
</bean>
<!-- V3 CXF Swagger2Feature -->
<bean id="v3swagger2Feature" class="org.apache.cxf.jaxrs.swagger.Swagger2Feature">
<!-- customize some of the properties -->
<property name="title" value="sample REST Application(V3)"/>
<property name="basePath" value="true"/>
</bean>
<bean id="jsonProvider"
class="com.xyz.abc.king.common.providers.JacksonJsonValidationProvider"/>
<bean id="exceptionMapperProvider"
class="com.xyz.abc.king.common.providers.ExceptionMapperProvider"/>
<bean id="gmpExceptionMapperProvider" class="com.xyz.abc.king.common.providers.GMPExceptionMapperProvider" />
<bean id="validationProvider" class="org.apache.cxf.validation.BeanValidationProvider"/>
<bean id="validationInInterceptor"
class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor">
<property name="provider" ref="validationProvider"/>
</bean>
<bean id="validationOutInterceptor"
class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationOutInterceptor">
<property name="provider" ref="validationProvider"/>
</bean>
<bean id="errorLoader" class="com.xyz.abc.king.common.exceptions.ErrorLoader">
<!-- constructor-arg index="0" value="errors/IngestorErrors.xml"/ -->
<constructor-arg index="0" value="classpath*:/hyperloop/errors/king/"></constructor-arg>
</bean>
</beans>
on startup of app, only documentation is available for 1st server API's at all the 3 server endpoints.