【发布时间】:2013-05-22 20:03:20
【问题描述】:
我需要通过 http 向来自 Jetty 的请求客户端发送一个存根响应。当我独立运行 Junit 测试时,它可以工作,这意味着,我得到了正确的 XML 响应..但是当我从 maven 运行相同的东西时它会失败。我看到的错误是“java.net.SocketException: Unexpected end of file from server”。我已经尝试了一切!请帮忙!
这是我的代码 -
Junit(当作为 Junit 测试运行时 - 它可以工作)
public class MyTest {
@Test
public void testGetOpenLots() throws Exception {
// create fixture
MyService fixture = new MyService();
// create jetty server instance
Server server = new Server(8080);
// set a handler
server.setHandler(new HelloHandler());
// set shutdown conditions
// server.setStopAtShutdown(true);
// start server
server.start();
// invoke operation
MyResponse result = fixture.getWeather(someDummyRequest);
assertNotNull(result);
}
}
在下面的某个地方,在 getWeather() 中,我创建了一个 URL 对象并将 URL http://localhost:8080 传递给它,并将请求发送到该 URL。此时,我希望 HelloHandler 的 handle 方法将被调用并将这个虚拟 XML 响应写入流,getWeather() 方法将接收响应。
这是处理程序:
public class HelloHandler extends AbstractHandler {
public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("application/xml;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println("<result>a simple response</result>");
}
}
当我从 maven 运行相同的东西时,它会抛出上面提到的错误。我做错了什么?
【问题讨论】:
-
嗯.. 我自己似乎已经解决了这个问题。我不知道我所做的是对还是错..但它现在有效。我所做的是,我添加了一个这样的 servlet 上下文:'ServletContextHandler ctx = new ServletContextHandler();' ctx.setHandler(new HelloHandler()); // 为 servletcontext 设置一个处理程序 server.setHandler(ctx);在处理程序内部,我使处理程序扩展了 ScopedHandler 而不是 AbstractHandler。 Handler 将实现 doScope 和 doHandle 方法。
标签: junit jetty junit4 embedded-jetty jetty-8