Hello,

I am trying to create a swagger UI for multiple CXF endpoints using 
OpenAPIFeature.

I am setting the following properties to each endpoint.
             openApiFeature.setResourcePackages("").
            openApiFeature.setUseContextBasedConfig(true);

The CXF endpoints have different basePaths like /admin, /user, /public etc. By 
setting the property - openApiFeature.setUseContextBasedConfig(true), CXF is 
able to load the APIs specific to only that endpoint. But the problem is - each 
of those APIs urls aren't appended with the basepath of its respective CXF 
endpoints, which causes the APIs to always return 404.

I am not able to find any method to set the basePath to openAPIFeature.

Note: I am not using Annotation approach here. I am just configuring OpenAPI 
Metadata definition using plain Java code as part of each cxf Server bean 
configuration.

Is there any way to add basePath using Java configuration.

The problem I see in annotation based configuration is, I have to create 
separate class per CXF endpoint annotated with @OpenAPIDefinition. There are 
around 5-6 endpoints used, which means I may need to configure 5-6 
configuration classes, which is not necessary.

I also tried adding all classes belonging to all CXF endpoints under a single 
config class annotated with @OpenAPIDefinition as follows

@OpenAPIDefinition(
            info = @Info(
                    title = "Content and Product APIs", 
                    version = "v1.0.1", 
                    description = "Some description", 
                    contact = @Contact(
                            name = "some team", 
                            email = "[email protected]", 
                            url = "someurl.com"
                            ), 
                    license = @License(
                            name = "Apache 2.0", 
                            url = 
"http://www.apache.org/licenses/LICENSE-2.0.html";
                            )
                    ),
            servers = {
                    @Server(
                            description = "Admin APIs",
                            url = "/rest/api/admin/v1"
                           ),
                    @Server(
                            description = "User APIs",
                            url = "/rest/api/user/v1"
                           ),
                    @Server(
                            description = "Public APIs",
                            url = "/rest/api/public/v1"
                           )
                    }
            )
@ApplicationPath("/")
public class JAXRSAdminAPIApplication extends Application {

        @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<>();
        classes.add(PingImpl.class);     // belongs to Admin CXF endpoint
        classes.add(RulesImpl.class);    // belongs to Admin CXF endpoint
        classes.add(UsersImpl.class);   // belongs to User CXF endpoint
        ......
        ......
        return classes;
    }
}

For the above configuration, I am seeing all API classes configured in this 
class under a single basepath - /admin. But not all classes configured in the 
above class belong to /admin basepath.Some belong to /user base path also. So 
how can I segregate APIs of respective CXF endpoints under different basepaths 
in annotation based configuration?



Reply via email to