我想要一些在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中运行时,我在控制台中没有异常。
我错过了什么?
答案 0 :(得分:0)
虽然它没有返回任何错误或抛出异常,但结果是请求格式错误。请求只会超时。修复此问题的更改是在请求字符串中添加一个额外的换行符,让服务器知道不要求请求中有更多数据。
response = _connector.getResponses("GET /ctx/rest/users HTTP/1.0\r\n\r\n");
^