2014-09-03 118 views
0

我在使用嵌入式碼頭和澤西島的寧靜Web服務時遇到問題。我從一個ecplise應用程序內部啓動了碼頭服務器,並嘗試使用運動服客戶端與服務器進行通信。使用碼頭和澤西島的Restful Web服務返回404

我建基於本教程中的RESTful Web服務:http://jlunaquiroga.blogspot.se/2014/01/restful-web-services-with-jetty-and.html

我遇到了一些問題,遷移從澤西島的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>" ;  
    } 
} 

碼頭嵌入式服務器:

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

我應該提到我使用的是Jetty 9.2.0.RCO和JavaSE-1.7和Jersey 2.12。 – 2014-09-03 14:15:33

+0

如果有任何幫助: + = [email protected] - STARTED + = org.glassfish.jersey.servlet.ServletContainer-1b05ad2 @ 3c64e64b == org.glassfish.jersey.servlet.ServletContainer,1 ,true - STARTED + -jersey.config.server.provider.packages = org.eclipse.eatop.jetty.helloworld.rest + - [/*]=>org.glassfish.jersey.servlet.ServletContainer-1b05ad2 + = org.eclipse.jetty.servlet.ServletHandler $ Default404Servlet-980200 @ 76a611b5 == org.eclipse.jetty.servlet.ServletHandler $ Default404Servlet,-1,false - STARTED + - [/]=>org.eclipse.jetty.servlet。 ServletHandler $ Default404Servlet-980200 – 2014-09-03 14:49:23

回答

0

試試這個變化...

來源:

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

要:

ServletHolder sh = new ServletHolder(ServletContainer.class); 

就是這樣,你的鏈接到文章使用它。

+0

它沒有區別。不過謝謝。 – 2014-09-03 14:14:43

0

我也在這部分掙扎了兩天,發現根本原因在於ServletContextHandler的lazyinitialization。啓動您的碼頭服務器後啓動您的環境處理程序。它會正常工作。