2014-06-30 42 views
4

我正在尝试将Swagger集成到运行嵌入式grizzly服务器的Java SE应用程序中。以编程方式将servlet添加到嵌入的grizzly

为了达到这个目的,我跟在tutorial之后,我确信我在那里90%。

我想用这个servlet来配置招摇:

@WebServlet(name = "SwaggerJaxrsConfig", loadOnStartup = 1) 
public class SwaggerJaxrsConfig extends HttpServlet { 

    @Override 
    public void init(ServletConfig servletConfig) { 
     try { 
      super.init(servletConfig); 
      System.out.println("Swagger init"); 
      SwaggerConfig swaggerConfig = new SwaggerConfig(); 
      ConfigFactory.setConfig(swaggerConfig); 
      swaggerConfig.setBasePath("http://localhost:8082/swagger4javaee-web/rest"); 
      swaggerConfig.setApiVersion("1.0.0"); 
      ScannerFactory.setScanner(new DefaultJaxrsScanner()); 
      ClassReaders.setReader(new DefaultJaxrsApiReader()); 
     } catch (ServletException e) { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

因为我'使用嵌入式服务器,@WebServlet标注不加servlet来灰熊服务器。

有没有人知道我可以如何将servlet以编程方式添加到灰熊服务器?

PS我'使用这种依赖

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-grizzly2-servlet</artifactId> 
    <version>2.9</version> 
</dependency> 
+0

发现这一点,不知道这是否会帮助你或不:HTTP://adventuresinuserspace.blogspot。 com/2010/02/serving-servlets-and-static-files.html – davidcondrey

回答

5

我下面的作品。我希望它也适用于你。

Main.java

import com.wordnik.swagger.jaxrs.config.BeanConfig; 
import java.io.IOException; 
import java.net.URI; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.ws.rs.ext.ContextResolver; 
import org.glassfish.grizzly.http.server.HttpServer; 
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; 
import org.glassfish.jersey.moxy.json.MoxyJsonConfig; 
import org.glassfish.jersey.server.ResourceConfig; 

public class Main { 

    private static final URI BASE_URI 
      = URI.create("http://localhost:8080/api/"); 

    public static void main(String[] args) { 
     try { 
      BeanConfig beanConfig = new BeanConfig(); 
      beanConfig.setVersion("1.0"); 
      beanConfig.setScan(true); 
      beanConfig.setResourcePackage(
        HelloResource.class.getPackage().getName()); 
      beanConfig.setBasePath(BASE_URI.toString()); 
      beanConfig.setDescription("Hello resources"); 
      beanConfig.setTitle("Hello API"); 

      final HttpServer server 
        = GrizzlyHttpServerFactory.createHttpServer(
          BASE_URI, createApp()); 

      System.out.println(
        String.format(
          "Application started.%nHit enter to stop it...")); 
      System.in.read(); 
      server.shutdownNow(); 
      System.exit(0); 
     } catch (IOException ex) { 
      Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public static ResourceConfig createApp() { 
     return new ResourceConfig(). 
       packages(HelloResource.class.getPackage().getName(), 
         "com.wordnik.swagger.jaxrs.listing"). 
       register(createMoxyJsonResolver()); 
    } 

    public static ContextResolver<MoxyJsonConfig> createMoxyJsonResolver() { 
     final MoxyJsonConfig moxyJsonConfig = new MoxyJsonConfig(); 
     Map<String, String> namespacePrefixMapper 
       = new HashMap<String, String>(1); 
     namespacePrefixMapper.put(
       "http://www.w3.org/2001/XMLSchema-instance", "xsi"); 
     moxyJsonConfig.setNamespacePrefixMapper(namespacePrefixMapper) 
       .setNamespaceSeparator(':'); 
     return moxyJsonConfig.resolver(); 
    } 

} 

HelloResource.java

import com.wordnik.swagger.annotations.Api; 
import com.wordnik.swagger.annotations.ApiOperation; 
import com.wordnik.swagger.annotations.ApiResponse; 
import com.wordnik.swagger.annotations.ApiResponses; 
import javax.json.Json; 
import javax.json.JsonObject; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

@Path("hello") 
@Api(value = "/hello", description = "Say Hello!") 
public class HelloResource { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @ApiOperation(value = "Say Hello World", 
      notes = "Anything Else?") 
    @ApiResponses(value = { 
     @ApiResponse(code = 200, message = "OK"), 
     @ApiResponse(code = 500, message = "Something wrong in Server")}) 
    public Response sayHello() { 
     JsonObject value = Json.createObjectBuilder() 
       .add("firstName", "Jeremy") 
       .add("lastName", "Chung") 
       .add("message", "Hello World!") 
       .build(); 
     return Response.status(200).entity(value).build(); 
    } 
} 

的Maven 的pom.xml包含以下依赖性。

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-grizzly2-servlet</artifactId> 
    <version>2.9</version> 
</dependency> 
<dependency> 
    <groupId>com.wordnik</groupId> 
    <artifactId>swagger-jaxrs_2.10</artifactId> 
    <version>1.3.1</version> 
</dependency> 
<dependency> 
    <groupId>com.wordnik</groupId> 
    <artifactId>swagger-jersey-jaxrs_2.10</artifactId> 
    <version>1.3.0</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish</groupId> 
    <artifactId>javax.json</artifactId> 
    <version>1.0.4</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-moxy</artifactId> 
    <version>2.10.1</version> 
</dependency> 
<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-processing</artifactId> 
    <version>2.10</version> 
</dependency> 
<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-json</artifactId> 
    <version>1.17.1</version> 
</dependency> 

调用http://localhost:8080/api/hello结果:

{ “名字”: “杰里米”, “姓氏”: “钟”, “消息”: “Hello World” 的}

调用http://localhost:8080/api/api-docs结果:

{ “apiVersion”: “1.0”, “swaggerVersion”: “1.2”, “的API”:[{ “路径”: “/你好”,“DESCRIPTIO N “:” 说 你好“}]}

调用http://localhost:8080/api/api-docs/hello结果:

{"apiVersion":"1.0","swaggerVersion":"1.2","basePath":"http://localhost:8080/api/","resourcePath":"/hello","apis":[{"path":"/hello","operations":[{"method":"GET","summary":"Say Hello World","notes":"Anything Else?","type":"void","nickname":"sayHello","produces":["application/json"],"parameters":[],"responseMessages":[{"code":200,"message":"OK"},{"code":500,"message":"Something wrong in Server"}]}]}]} 
+0

这工作:)非常感谢你。不幸的是我上周生病了,所以在奖金超时之前我无法验证并接受你的答案:/我很抱歉你没有得到你的赏金... – Zounadire

+1

没问题 - 这是一个有用的学习经验。希望你感觉更好。 –

相关问题