0
votes

My application is a restful api and its integrated with Swagger and OpenAPI. I have generated all Java stubs using OpenAPI YAML file and everything is working fine. But when i try o drill down model objects on Swagger then it cannot locate some of objects although there are part of project as project compiles fine.

As shown in below screenshot, drilldown fails to locate COnfiguration object.

Any ideas on how to resolve this.

enter image description here

Edit:

I have a restful webservice and i generate all the java stubs [Data transfer objects] from a YAML file using openapi-generator plugin. This plugin automatically generates a class OpenAPIDocumentationConfig and following are the details of the class. After this setup, models are automatically generated in Swagger UI. Also want to add that I am using OpenAPI 3.0 but i need to split Object definitions into multiple files. So i am referring to them using definitions as i don't believe component schemas can be split into multiple files.

@Configuration
@EnableSwagger2
public class OpenAPIDocumentationConfig {

ApiInfo apiInfo() {
    return new ApiInfoBuilder()
        .title("ABC Service")
        .description("ABC Service")
        .license("")
        .licenseUrl("http://unlicense.org")
        .termsOfServiceUrl("")
        .version("1.0.0")
        .contact(new Contact("","", "[email protected]"))
        .build();
}

@Bean
public Docket customImplementation(ServletContext servletContext, @Value("${openapi.studioVALService.base-path:}") String basePath) {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
                .apis(RequestHandlerSelectors.basePackage("com.x.y.z"))
                .build()
            .pathProvider(new BasePathAwareRelativePathProvider(servletContext, basePath))
            .directModelSubstitute(java.time.LocalDate.class, java.sql.Date.class)
            .directModelSubstitute(java.time.OffsetDateTime.class, java.util.Date.class)
            .apiInfo(apiInfo());
}

class BasePathAwareRelativePathProvider extends RelativePathProvider {
    private String basePath;

    public BasePathAwareRelativePathProvider(ServletContext servletContext, String basePath) {
        super(servletContext);
        this.basePath = basePath;
    }

    @Override
    protected String applicationPath() {
        return  Paths.removeAdjacentForwardSlashes(UriComponentsBuilder.fromPath(super.applicationPath()).path(basePath).build().toString());
    }

    @Override
    public String getOperationPath(String operationPath) {
        UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromPath("/");
        return Paths.removeAdjacentForwardSlashes(
                uriComponentsBuilder.path(operationPath.replaceFirst("^" + basePath, "")).build().toString());
    }
}

}

EDIT 2:

I moved all definitions to components and schemas but they are still split in multiple files and are referring to components across files but still i get the same error.

1
You say you "generated all Java stubs using OpenAPI YAML file", but your image looks like the opposite - an OpenAPI document generated from Java code. Does your Java code include the EquityObjectConfigurationDO class? If yes, how is it annotated?Helen
@Helen : See my EditLokesh

1 Answers

0
votes

If you are using OpenAPI 3 you should put schemas that you want to reuse inside components. To refeer to it you must use refs like:

$ref: "#/components/schemas/EquityOptionConfigurationDO"