在Embedded Jetty中使用Jersey

时间:2013-09-17 02:26:33

标签: jersey jetty jersey-2.0

我想要一些在Jetty 9中运行Jersey 2.2的JUnit测试。这就是我所拥有的:

职位服务

...
@Path("jobs") 
public JobService() {

    @GET
    public Response list(){
        return Response.ok("Hello World!").build();
    }
}

我的JUnit测试中的jetty嵌入式服务器代码

@Before
public void startServer() throws MalformedURLException, IOException {
    _server = new Server();
    _connector = new LocalConnector(_server);
    _server.setConnectors(new Connector[]{_connector});

    // Prepare rest service servlet
    ServletHolder _jersey = new ServletHolder(new ServletContainer(new ResourceConfig(JobService.class, UserService.class)));
    _jersey.setName("restful service servlet");


    ServletContextHandler _servletCtx = new ServletContextHandler();
    _servletCtx.addServlet(_jersey, "/rest/*");

    _servletCtx.setContextPath("/ctx");
    _server.setHandler(_servletCtx);
}

@Test
public void testServer() throws Exception{
    _server.start();

    String response = null;

    response = _connector.getResponses("GET /ctx/rest/users HTTP/1.0\r\n");
    assertThat(response,startsWith("HTTP/1.1 200 "));
    assertThat(response,containsString("[]"));

}

Jersey不发送响应,在eclipse中运行时,我在控制台中没有异常。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

虽然它没有返回任何错误或抛出异常,但结果是请求格式错误。请求只会超时。修复此问题的更改是在请求字符串中添加一个额外的换行符,让服务器知道不要求请求中有更多数据。

response = _connector.getResponses("GET /ctx/rest/users HTTP/1.0\r\n\r\n");
                                                                    ^