swagger-core v3 ignora mis configuraciones en javax.ws.rs.core.Application

Utilizando swagger-core v3 2.1.6 estas tres configuraciones producen el mismo resultado openapi.json.

No hay configuración:

@ApplicationPath("/rest")
public class AuthRestConfig extends Application {

  public AuthRestConfig() {

  }
}

Configuración del servidor, necesito usar este tipo de conf:

@ApplicationPath("/rest")
public class AuthRestConfig extends Application {

  public AuthRestConfig(@Context ServletConfig servletConfig) {
    super();

    OpenAPI oas = new OpenAPI();
    Info info = new Info()
        .title("Suma Automaton OpenAPI")
        .description("This is a sample server Petstore server.  You can find out more about Swagger "
            + "at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).  For this sample, "
            + "you can use the api key `special-key` to test the authorization filters.")
        .termsOfService("http://swagger.io/terms/")
        .contact(new Contact()
            .email("[email protected]"));

    oas.info(info);

    String url = "/suma-automaton-ms";
    List servers = new ArrayList<>();
    Server server = new Server();
    server.setUrl(url);
    servers.add(server);
    oas.setServers(servers);

    SwaggerConfiguration oasConfig = new SwaggerConfiguration()
        .openAPI(oas)
        .prettyPrint(true)
        .resourcePackages(Stream.of("io.swagger.sample.resource").collect(Collectors.toSet()));

    try {
      new JaxrsOpenApiContextBuilder<>()
          .servletConfig(servletConfig)
          .application(this)
          .openApiConfiguration(oasConfig)
          .buildContext(true);
    } catch (OpenApiConfigurationException e) {
      throw new RuntimeException(e.getMessage(), e);
    }

  }
}

¿Alguna sugerencia sobre este comportamiento? ¿Hay algo que malinterpreté? Considerar Tengo el mismo comportamiento usando la configuración estándar reportada en https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-configuration#jax-rs-application

Pregunta hecha hace 3 años, 5 meses, 0 días - Por debugduke


3 Respuestas:

  • Añadir esto a tu clase AuthRestConfig:

    import io.swagger.v3.jaxrs2.integration.resources.OpenApiResource;
    
    @Override
    public Set> getClasses() {
        Set> resources = new HashSet<>();
    
        resources.add(OpenApiResource.class);
    
        return resources;
    }
    

    Respondida el Dec 16, 2020 a las 17:51 - por debugduke

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando puede estar relacionado con la forma en que estás configurando Swagger en tu aplicación JAX-RS. La clase AuthRestConfig, que extiende Application, es la configuración de tu aplicación JAX-RS y debería ser el punto de entrada para definir las configuraciones de Swagger.

    En la versión 3 de swagger-core, puedes usar la anotación @OpenAPIDefinition para configurar tu API en lugar de realizar la configuración manualmente en el constructor de AuthRestConfig. Aquí te muestro un ejemplo de cómo podrías refactorizar tu código:

    java
    @ApplicationPath("/rest")
    public class AuthRestConfig extends Application {
    
      public AuthRestConfig() {
      }
    
      @OpenAPIDefinition(info = @Info(title = "Suma Automaton OpenAPI",
                                       description = "This is a sample server Petstore server...",
                                       termsOfService = "http://swagger.io/terms/",
                                       contact = @Contact(email = "[email protected]"))
      @Server(url = "/suma-automaton-ms")
      public OpenAPI oasConfig() {
        return new OpenAPI();
      }
    
    }
    

    En este ejemplo, hemos movido la configuración de Swagger a un método anotado con @OpenAPIDefinition dentro de AuthRestConfig. De esta forma, la configuración de Swagger se integra adecuadamente con JAX-RS y debería generarse correctamente el archivo openapi.json según las especificaciones que hayas definido en las anotaciones.

    Recuerda que en la versión 3 de swagger-core, hay cambios en la forma de configurar Swagger, por lo que es importante revisar la documentación oficial y las guías de migración si estás actualizando desde versiones anteriores. Espero que esta información te sea útil para resolver el problema que estás enfrentando.

    Respondida el Dec 17, 2020 a las 17:51 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Problema:

    Las configuraciones de OpenAPI definidas en javax.ws.rs.core.Application se ignoran cuando se utiliza Swagger Core v3 2.1.6.

    Causa:

    El problema parece estar relacionado con un error en la forma en que SwaggerConfiguration se utiliza para configurar el contexto de OpenAPI. En versiones anteriores de Swagger Core, se utilizaba el constructor SwaggerConfiguration para configurar el contexto, pero en la versión 2.1.6, este constructor ha sido reemplazado por un método de fábrica estático forApplication().

    Solución:

    Para resolver este problema, debes utilizar el método de fábrica forApplication() para crear la configuración de OpenAPI:

    java
    @ApplicationPath("/rest")
    public class AuthRestConfig extends Application {
    
      public AuthRestConfig(@Context ServletConfig servletConfig) {
        OpenAPI oas = ... // Tu configuración de OpenAPI
    
        // Construye la configuración de OpenAPI utilizando el método de fábrica
        SwaggerConfiguration oasConfig = SwaggerConfiguration.forApplication(this)
            .openAPI(oas)
            .prettyPrint(true)
            .resourcePackages(Stream.of("io.swagger.sample.resource").collect(Collectors.toSet()));
    
        try {
          new JaxrsOpenApiContextBuilder<>()
              .servletConfig(servletConfig)
              .application(this)
              .openApiConfiguration(oasConfig)
              .buildContext(true);
        } catch (OpenApiConfigurationException e) {
          throw new RuntimeException(e.getMessage(), e);
        }
      }
    }
    

    Consideraciones:

    Asegúrate de utilizar la versión correcta de Swagger Core (2.1.6 o superior). Verifica que la configuración de OpenAPI sea válida y esté bien formada. * Si el problema persiste, puedes consultar la documentación de Swagger Core para obtener más información o informar un problema en el repositorio de GitHub.

    Respondida el Dec 17, 2020 a las 18:02 - por Gemini

    Votos positivos: 0 | Votos negativos: 0