Search code examples
javaswaggerundertow

How to add OAuth2 Configuration to swagger in undertow java


I am following this document, https://github.com/swagger-api/swagger-core/wiki/1.3--1.5-Migration#setting-up-additional-information-authorization-info

In this they ask to add bootstrap servlet, My problem is I am adding this bootstrap class in

My bootstrap class

@Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);



        Info info = new Info()
                .title("Swagger Petstore")
                .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("apiteam@swagger.io"))
                .license(new License()
                        .name("Apache 2.0")
                        .url("http://www.apache.org/licenses/LICENSE-2.0.html"));

        ServletContext context = config.getServletContext();
        Swagger swagger = new Swagger()
                .info(info);
        swagger.securityDefinition("testauth",
                new OAuth2Definition()
                        .implicit("http://localhost:8002/oauth/dialog")
                        .scope("email", "Access to your email address")
                        .scope("pets", "Access to your pets"));
        swagger.tag(new Tag()
                .name("pet")
                .description("Everything about your Pets")
                .externalDocs(new ExternalDocs("Find out more", "http://swagger.io")));
        swagger.tag(new Tag()
                .name("store")
                .description("Access to Petstore orders"));
        swagger.tag(new Tag()
                .name("user")
                .description("Operations about user")
                .externalDocs(new ExternalDocs("Find out more about our store", "http://swagger.io")));
        context.setAttribute("swagger", swagger);
    }

MY app.class

 @ApplicationPath("/")
    public class App extends javax.ws.rs.core.Application {


        public App() {
            this.injector = injector;
            BeanConfig beanConfig = new BeanConfig();
            beanConfig.setVersion("1.0.2");
            beanConfig.setSchemes(new String[] { "http" });
            beanConfig.setHost("localhost:7004");
            beanConfig.setBasePath("test");
            beanConfig.setResourcePackage("com.testpacakge");
            beanConfig.setScan(true);
        }

@Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new HashSet<Class<?>>();
        resources.add(Bootstrap.class);
 /// my other resorces
}

@Override
    public Set<Object> getSingletons() {
        final Set<Object> objects = new HashSet<>();

        objects.add(injector.getInstance(Bootstrap.class));
}
        }

and in Main.class

deploymentInfoObj.addServlet(Servlets.servlet("Bootstrap", Bootstrap.class)
.addMapping("/Bootstrap"));

I am adding the Bootstrap in , Application and main class.

But this setting not loaded for swagger.

Any idea to solve this?


Solution

  • After adding

    .setLoadOnStartup(1)
    

    in Servlet section, it fixed

    deploymentInfoObj.addServlet(Servlets.servlet("Bootstrap", Bootstrap.class)
    .addMapping("/Bootstrap").setLoadOnStartup(1));