使用码头和球衣的宁静网络服务返回404

时间:2014-09-03 12:34:45

标签: rest embedded-jetty jersey-2.0

我在使用嵌入式码头和平针织物的宁静网络服务时遇到了麻烦。我从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}}

2 个答案:

答案 0 :(得分:0)

尝试此更改...

自:

ServletHolder sh = new ServletHolder(new ServletContainer());

要:

ServletHolder sh = new ServletHolder(ServletContainer.class);

这是您链接到文章的方式。

答案 1 :(得分:0)

我在这部分上也挣扎了两天,发现根本原因在于ServletContextHandler的lazyinitialization。启动jetty服务器后启动contexthandler。它会正常工作。