2015-08-13 3 views
0

Может кто-нибудь, пожалуйста, сообщите мне, если это правильный способ настройки Swagger со встроенным причалом.Swagger with embedded Jetty

public class TestMain { 

public static void main(String[] args) throws Exception { 
    Server gs = new Server(); 
    ServletContextHandler sch = gs.getServletContextHandler(); 

    sch.addFilter(new FilterHolder(new RequestTrackerFilter()), "/*",  EnumSet.of(DispatcherType.REQUEST)); 
    sch.addFilter(new FilterHolder(new ActionIdFilter()), "/*", EnumSet.of(DispatcherType.REQUEST)); 

    ResourceHandler resource_handler = new ResourceHandler(); 
    resource_handler.setDirectoriesListed(false); 

    resource_handler.setResourceBase("public/2.0"); 

    ContextHandler context = new ContextHandler("/apitest"); 

    context.setHandler(resource_handler); 

    ContextHandlerCollection contexts = new ContextHandlerCollection(); 


    setupSwaggerContextHandler(); 

    //  context.getServletContext().addListener(new SwaggerInitializer()); 

    contexts.setHandlers(new Handler[]{sch, context}); 

    gs.getServer().setHandler(contexts); 

    gs.start(); 
} 

private static ServletContextHandler setupSwaggerContextHandler() { 
    // Configure Swagger-core 
    final ServletHolder swaggerServletHolder = new ServletHolder(new JerseyJaxrsConfig()); 
    swaggerServletHolder.setName("JerseyJaxrsConfig"); 
    swaggerServletHolder.setInitParameter("api.version", "1.0.0"); 
    swaggerServletHolder.setInitParameter("swagger.api.basepath", "http://localhost:9000/apitest"); 
    swaggerServletHolder.setInitOrder(2); 

    final ServletContextHandler swaggerContextHandler = new ServletContextHandler(); 
    swaggerContextHandler.setSessionHandler(new SessionHandler()); 
    // Bind Swagger-core to the url HOST/api-docs 
    swaggerContextHandler.setContextPath("/api-docs"); 
    swaggerContextHandler.addServlet(swaggerServletHolder, "/*"); 

    return swaggerContextHandler; 
    } 
} 

Я не в состоянии видеть любой выход с помощью

http://localhost:9000/apitest/api-docs 

Am после обсуждения на https://groups.google.com/forum/#!topic/swagger-swaggersocket/KHYESESD6c4

+0

Кто поможет здесь – Yahiya

ответ

0

Если вы используете чванство жильный 1.5.x, вы должны смотреть в контекстном пути для /swagger.json. Таким образом, для установки:

http://localhost:9000/apitest/api-docs/swagger.json

+0

Я могу заставить его работать, но, пожалуйста, дайте мне знать, как сгенерировать single swagger.json вручную. Я получаю несколько файлов json для нескольких apis. Это нормально? – Yahiya

+0

Привет, рад помочь, если вы можете поделиться дополнительной информацией. Это лучше всего обсудить в группе Google https://groups.google.com/forum/#!forum/swagger-swaggersocket – fehguy

+0

. Я узнал, что есть один верхний уровень json, в котором есть записи для apis. т. е. файл swagger.json. Я использую Swagger Plugin в моем pom.xml для генерации json – Yahiya

4

Я играл много, чтобы получить Кураж работать со встроенным Jetty, без web.xml или весной, и, наконец, в конечном итоге с этим решением: https://github.com/SriramKeerthi/swagger-jersey2-jetty

у меня будет добавила его в качестве комментария, если бы у меня была достаточно репутации. Но это самый простой вариант кода, который я мог бы придумать. Вам нужно две части:

  1. Кураж Bean Config:

    BeanConfig beanConfig = new BeanConfig(); 
    beanConfig.setVersion("1.0.0"); 
    beanConfig.setResourcePackage(YourJerseyResourceClass.class.getPackage().getName()); 
    beanConfig.setScan(true); 
    beanConfig.setBasePath("/"); 
    beanConfig.setDescription("Sample API to demonstrate Swagger with Jersey2" + 
         " in an embedded Jetty instance, with no web.xml or Spring MVC."); 
    beanConfig.setTitle("Sample API"); 
    
  2. Добавить:

    ResourceConfig resourceConfig = new ResourceConfig(); 
    // Add your resources and Swagger resources (ApiListingResource package) 
    resourceConfig.packages(YourJerseyResourceClass.class.getPackage().getName(), ApiListingResource.class.getPackage().getName()); 
    ServletContainer servletContainer = new ServletContainer(resourceConfig); 
    ServletHolder servletHolder = new ServletHolder(servletContainer); 
    ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    servletContextHandler.setContextPath("/"); 
    servletContextHandler.addServlet(servletHolder, "/*"); 
    

Теперь вы должны быть в состоянии увидеть Swagger spec в /swagger.json конечной точке ,

P.S. Команда в #swagger на irc.freenode.net блестящая, вы должны посетить их, если ничего не исправлено.

+0

Замечательная ссылка: https://github.com/SriramKeerthi/swagger-jersey2-jetty Это работает :) – siddhusingh