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 中运行它时,我在控制台中也没有异常。

我错过了什么?

4

1 回答 1

0

结果表明请求格式不正确,尽管它没有返回任何错误或抛出异常。该请求将超时。解决此问题的更改是在请求字符串中添加一个额外的换行符,以让服务器知道不要期望请求中有更多数据。

response = _connector.getResponses("GET /ctx/rest/users HTTP/1.0\r\n\r\n");
                                                                    ^
于 2013-09-17T16:58:18.550 回答