Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-7835

Swagger2Feature does not work for multiple CXF server endpoints

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Cannot Reproduce
    • None
    • None
    • JAX-RS
    • None
    • Unknown

    Description

      There are two CXF server endpoints defined as shown below:

       

          @Bean
          public Server contentServiceV1() {
              JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
              factory.setBus(cxf());
              factory.setServiceBeans(Arrays.<Object> asList(sampleABeanV1(), sampleBBeanV1()));
              factory.setAddress(Constants.CONTENT_REST_DOMAIN_VERSION);
              factory.setDocLocation("classpath:restapi/content/v1/content.wadl");
              factory.setProviders(createProvidersList());
              Swagger2Feature feature = new Swagger2Feature() ;
              feature.setTitle("Content API(s)");
              feature.setDescription("Sample API(s)");
              feature.setBasePath(Constants.CONTENT_REST_DOMAIN_VERSION);
              feature.setPrettyPrint(true);
              feature.setSupportSwaggerUi(true); 
              feature.setContact("@Contact(\n" + 
                "            name = \"RST team\",\n" + 
                "            email = \"sample@example.com\"\n" + 
                "        )");
              feature.setVersion("1.0.0"); 
              feature.setLicense("www.sample.com/license"); 
              
              feature.setUsePathBasedConfig(false);
                      
              factory.getFeatures().add(feature) ;
              Server server = factory.create();
              server.getEndpoint().getInInterceptors().add(requestInterceptor()) ;
              return server;
          }
      
          @Bean
          public Server commercialServiceV1() {
              JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
              factory.setBus(cxf());
              factory.setServiceBeans(Arrays.<Object> asList(sampleCBeanV1(), sampleDBeanv1()));
              factory.setAddress(Constants.COMMERCIAL_REST_DOMAIN_VERSION);
              factory.setDocLocation("classpath:restapi/commercial/v1/commercial.wadl");
              factory.setProviders(createProvidersList());
              Swagger2Feature feature = new Swagger2Feature() ;
              feature.setTitle("Commercial API(s)");
              feature.setDescription("Commercial API(s)");
              feature.setBasePath(Constants.COMMERCIAL_REST_DOMAIN_VERSION);
              feature.setPrettyPrint(true);
              feature.setSupportSwaggerUi(true); 
              feature.setUsePathBasedConfig(false);        
              factory.getFeatures().add(feature) ;
              Server server = factory.create();
              server.getEndpoint().getInInterceptors().add(requestInterceptor()) ;
              return server;
          }
      

      The Swagger2Feature is enabled on both server endpoints. But In the Swagger UI, only the "Content" APIs show up. Commercial APIs do not show up in the UI.

       

      We have also tried Package Scan Approach as below:

       

          @Bean
          public Server contentAServiceV1() {
              JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
              factory.setBus(cxf());
              factory.setServiceBeans(Arrays.<Object> asList(sampleABeanV1(), sampleBBeanV1()));
              factory.setAddress(Constants.CONTENT_REST_DOMAIN_VERSION);
              factory.setDocLocation("classpath:restapi/content/v1/content.wadl");
              factory.setProviders(createProvidersList());
              Swagger2Feature feature = new Swagger2Feature() ;
              feature.setTitle("Content API(s)");
              feature.setDescription("Sample API(s)");
              feature.setBasePath(Constants.CONTENT_REST_DOMAIN_VERSION);
              feature.setPrettyPrint(true);
              feature.setSupportSwaggerUi(true); 
              feature.setContact("@Contact(\n" + 
                "            name = \"RST team\",\n" + 
                "            email = \"sample@example.com\"\n" + 
                "        )");
              feature.setVersion("1.0.0"); 
              feature.setLicense("www.sample.com/license"); 
              
              feature.setUsePathBasedConfig(false);
      	feature.setActivateOnlyIfJaxrsSupported(true);
              feature.setScanAllResources(true); 
              feature.setResourcePackage("com.sample.rest.content.v1");
                 
              factory.getFeatures().add(feature) ;
              Server server = factory.create();
              server.getEndpoint().getInInterceptors().add(requestInterceptor()) ;
              return server;
          }
      
          @Bean
          public Server contentBServiceV1() {
              JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
              factory.setBus(cxf());
              factory.setServiceBeans(Arrays.<Object> asList(sampleCBeanV1(), sampleDBeanv1()));
              factory.setAddress(Constants.COMMERCIAL_REST_DOMAIN_VERSION);
              factory.setDocLocation("classpath:restapi/commercial/v1/commercial.wadl");
              factory.setProviders(createProvidersList());
              Swagger2Feature feature = new Swagger2Feature() ;
              feature.setTitle("Commercial API(s)");
              feature.setDescription("Commercial API(s)");
              feature.setBasePath(Constants.COMMERCIAL_REST_DOMAIN_VERSION);
              feature.setPrettyPrint(true);
              feature.setSupportSwaggerUi(true); 
      
              feature.setUsePathBasedConfig(false);
      	feature.setActivateOnlyIfJaxrsSupported(true);
              feature.setScanAllResources(true); 
              feature.setResourcePackage("com.sample.rest.commercial.v1");
              
              factory.getFeatures().add(feature) ;
              Server server = factory.create();
              server.getEndpoint().getInInterceptors().add(requestInterceptor()) ;
              return server;
          }
      

       But SwaggerUI shows up only Content APIs and not the Commercial ones.

      Attachments

        Activity

          People

            Unassigned Unassigned
            nazeer1100126 Nazeer Shaik
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: