Skip to content

Bootstrapped servlet returns empty JSON as of 2.2.24 #4854

Open
@kpilandjr

Description

@kpilandjr

Sorry if I've missed something in the docs, but our apps use a bootstrapped HTTP servlet to configure OpenAPI using JAX-RS and when we upgraded to Swagger 2.2.24 the servlet started producing an empty OpenAPI JSON payload.

Original code for our servlet is here (nothing proprietary about this):

// @formatter:off
@OpenAPIDefinition(
         info = info(title = "NextGen Web Services", description = "Web services for the NextGen application."),
         tags = {@Tag(name = OpenApiBootstrap.TAG_API, description = "Services to communicate with NextGen")},
         servers = @Server(url = "/nextgen"))
// @formatter:on
@WebServlet(name = "OpenAPI", description = "OpenAPI Spec Servlet", loadOnStartup = 2)
public final class OpenApiBootstrap extends HttpServlet {
   private static final long serialVersionUID = 1L;

   /** Tag for API web services. */
   public static final String TAG_API = "API";

   @Override
   public void init(final ServletConfig servletConfig) throws ServletException {
      try {
         new JaxrsOpenApiContextBuilder<>().servletConfig(servletConfig)
                  .openApiConfiguration(
                           new SwaggerConfiguration().resourcePackages(Collections.singleton("com.pjm.nextgen.rest")))
                  .buildContext(true);
      } catch (final OpenApiConfigurationException e) {
         throw new ServletException(e);
      }
   }
}

After upgrading to Swagger 2.2.24, the JSON file returned from the servlet is essentially empty:

{"openapi":"3.0.1"}

I noticed that the examples do not show using the OpenAPIDefinition annotation, so I tried translating that to just setting up the configurations in the Java code like this:

@WebServlet(name = "OpenAPI", description = "OpenAPI Spec Servlet", loadOnStartup = 2)
public final class OpenApiBootstrap extends HttpServlet {
   private static final long serialVersionUID = 1L;

   /** Tag for API web services. */
   public static final String TAG_API = "API";

   @Override
   public void init(final ServletConfig servletConfig) throws ServletException {
      try {
         final Info info = new Info().title("NextGen Web Services")
                  .description("Web services for the NextGen application.");
         final OpenAPI oas = new OpenAPI().info(info)
                  .tags(List.of(new Tag().name(TAG_API).description("Services to communicate with NextGen")))
                  .servers(List.of(new Server().url("/nextgen")));
         oas.info(info);
         final SwaggerConfiguration oasConfig = new SwaggerConfiguration().openAPI(oas).prettyPrint(true)
                  .resourcePackages(Stream.of("com.pjm.nextgen.rest").collect(Collectors.toSet()));

         new JaxrsOpenApiContextBuilder<>().servletConfig(servletConfig).openApiConfiguration(oasConfig)
                  .buildContext(true);
      } catch (final OpenApiConfigurationException e) {
         throw new ServletException(e);
      }
   }
}

This advances things a bit farther but the JSON payload still contains no definitions for the services. So I'm guessing that JAX-RS is somehow not finding the services anymore?

{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "NextGen Web Services",
    "description" : "Web services for the NextGen application."
  },
  "servers" : [ {
    "url" : "/nextgen"
  } ],
  "tags" : [ {
    "name" : "API",
    "description" : "Services to communicate with NextGen"
  } ]
}

Any ideas on what we might be missing here?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions