You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Dongfeng Lu (JIRA)" <ji...@apache.org> on 2018/04/20 20:52:00 UTC

[jira] [Updated] (CXF-7724) CXF Swagger2Feature does not display methods with Java based configuration

     [ https://issues.apache.org/jira/browse/CXF-7724?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Dongfeng Lu updated CXF-7724:
-----------------------------
    Component/s: JAX-RS

> CXF Swagger2Feature does not display methods with Java based configuration
> --------------------------------------------------------------------------
>
>                 Key: CXF-7724
>                 URL: https://issues.apache.org/jira/browse/CXF-7724
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>         Environment: Eclipse Oxygen, Tomcat 8.0.32, CXF 3.1.11, Spring 4.3.9-RELEASE. 
> No Spring Boot.
>            Reporter: Dongfeng Lu
>            Priority: Major
>         Attachments: CxfSwaggerIssue_Java_configuration.zip, Figure 1.png, Figure 2.png, Figure 3.png, Figure 4.png, Figure 5.png
>
>
> Related to the ticket CXF-7722, I also tried Java based configuration with the Swagger2Feature.
> This ticket is different from CXF-7722 in 2 ways:
> 1. CXF-7722 uses XML configuration, while this one uses Java based configuration.
> 2. CXF-7722 does not display methods only with an non-empty context root, while this one does not display no matter the context root is empty or not.
> "Figure 1" shows the project structure of this simple sample project. There are two main packages "serverOne" and "serverTwo". Under each one, there is an interface like "OneServer.java", an implementation like "OneServerImpl.java", and a CXF configuration file like "OneServerConfig.java". The main part of the "OneServerConfig.java" is
> {code:java}
> @Bean
> @DependsOn("cxf")
> public Server oneServerServerREST(ApplicationContext appContext) {
> JAXRSServerFactoryBean factory = RuntimeDelegate.getInstance().createEndpoint(jaxRsApiApplication(), JAXRSServerFactoryBean.class);
> factory.setServiceBean(oneServer);
> factory.setAddress("/oneServer");
> factory.setProviders(restProviderList(appContext, oneServer));
> Swagger2Feature feature = new Swagger2Feature();
> // customize some of the properties
> feature.setTitle("oneServer");
> feature.setResourcePackage("com.example.api.serverOne");
> feature.setBasePath("/oneServer");
> feature.setUsePathBasedConfig(Boolean.TRUE);
> feature.setScan(true);
> feature.setScanAllResources(true);
> factory.getFeatures().add(feature);
> return factory.create();
> }
> {code}
> The structure for "serverTwo" is basically the same, with the main part of the "TwoServerConfig.java" as
> {code:java}
> @Bean
> @DependsOn("cxf")
> public Server twoServerServerREST(ApplicationContext appContext) {
> JAXRSServerFactoryBean factory = RuntimeDelegate.getInstance().createEndpoint(twoServerJaxRsApiApplication(), JAXRSServerFactoryBean.class);
> factory.setServiceBean(twoServer);
> factory.setAddress("/twoServer");
> factory.setProviders(restProviderList(appContext, twoServer));
> Swagger2Feature feature = new Swagger2Feature();
> // customize some of the properties
> feature.setTitle("twoServer");
> feature.setResourcePackage("com.example.api.serverTwo");
> feature.setBasePath("/twoServer");
> feature.setUsePathBasedConfig(Boolean.TRUE);
> feature.setScan(true);
> feature.setScanAllResources(true);
> factory.getFeatures().add(feature);
> return factory.create();
> }
> {code}
> So you can see that the two "Servers" are basically the same, and they are loaded in "AppConfig.java" via
> {code:java}
> @Import({TwoServerConfig.class, OneServerConfig.class}){code}
> "Figure 2" and "Figure 3" show the cases when context root is empty, while "Figure 4" and "Figure 5" shows the cases with non-empty context root. They all display the titles correctly, but none of them has any method, and we don't even see the "Show/Hide" link.
> The attached sample project is a maven project. You can unzip it and run "mvn clean tomcat7:run" in the directory, and then you can access it with "http://localhost:8080" to display the two REST services, built on two org.apache.cxf.endpoint.Servers.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)