Unable to generate Swagger2Feature API using JAX-RS API

24 Views Asked by At

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.

0

There are 0 best solutions below