我在使用嵌入式码头和平针织物的宁静网络服务时遇到了麻烦。我从ecplise应用程序内部启动jetty服务器,我尝试使用jersey客户端与服务器通信。
我根据本教程构建了restful Web服务:http://jlunaquiroga.blogspot.se/2014/01/restful-web-services-with-jetty-and.html
我在将教程从Jersey 1.x迁移到2.x时遇到了一些问题,但最终我启动并运行了Web服务器。现在,问题是它不响应来自客户端(或浏览器)的请求。有谁知道为什么?
这是我的代码:
提供商套餐:
package org.eclipse.eatop.jetty.helloworld.rest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/xmlServices")
public class XMLProjectService {
@GET
@Produces(MediaType.TEXT_XML)
public String getProject()
{
return "<?xml version=\"1.0\"?>" + "<hello> hello world </hello>" ;
}
}
Jetty嵌入式服务器:
public Object execute(ExecutionEvent event) throws ExecutionException {
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
ServletHolder sh = new ServletHolder(new ServletContainer());
sh.setInitOrder(1);
sh.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "org.eclipse.eatop.jetty.helloworld.rest");
context.addServlet(sh, "/*");
try {
server.start();
} catch (Exception e) {
System.out.println("Unable to start jetty web server");
e.printStackTrace();
}
return null;
}
客户端:
public class Test {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
WebTarget target = client.target(getBaseURI()).path("xmlServices");
System.out.println(target.request("text/xml").get());
}
private static URI getBaseURI() {
return UriBuilder.fromUri("http://localhost:8080/").build();
}
}
我得到的结果:
InboundJaxrsResponse{ClientResponse{method=GET, uri="http://localhost:8080/xmlServices", status=404, reason=Not Found}}
答案 0 :(得分:0)
尝试此更改...
自:
ServletHolder sh = new ServletHolder(new ServletContainer());
要:
ServletHolder sh = new ServletHolder(ServletContainer.class);
这是您链接到文章的方式。
答案 1 :(得分:0)
我在这部分上也挣扎了两天,发现根本原因在于ServletContextHandler的lazyinitialization。启动jetty服务器后启动contexthandler。它会正常工作。