2012-10-22 28 views
3

我正在嘗試使用Jersey和以下this example學習RESTFul Web服務。我創建了一個示例服務,其可在:從客戶端使用Jersey調用RESTFul Web服務問題

http://localhost:8080/de.vogella.jersey.first/rest/hello. 

我創建了一個客戶端調用該服務,但是當我運行這個客戶我得到一個異常如下:

GET http://localhost:8080/de.vogella.jersey.first/rest/hello 
    returned a response status of 404 Not Found Exception in thread "main" 
    com.sun.jersey.api.client.UniformInterfaceException: 
    GET http://localhost:8080/de.vogella.jersey.first/rest/hello 
     returned a response status of 404 Not Found 
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:686) 
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) 
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:507) 
at de.vogella.jersey.first.client.Test.main(Test.java:23) 

服務類

public class Hello { 

    // This method is called if TEXT_PLAIN is request 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayPlainTextHello() { 
    return "Hello Jersey"; 
    } 

    // This method is called if XML is request 
    @GET 
    @Produces(MediaType.TEXT_XML) 
    public String sayXMLHello() { 
    return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>"; 
    } 

    // This method is called if HTML is request 
    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public String sayHtmlHello() { 
    return "<html> " + "<title>" + "Hello Jersey" + "</title>" 
     + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> "; 
    } 
} 

客戶端代碼:

public class Test { 
    public static void main(String[] args) { 
    ClientConfig config = new DefaultClientConfig(); 
    Client client = Client.create(config); 
    WebResource service = client.resource(getBaseURI()); 
    System.out.println(service.path("rest").path("hello").accept(MediaType.TEXT_PLAIN).get(ClientResponse.class).toString()); 
    System.out.println(service.path("rest").path("hello").accept(MediaType.TEXT_XML).get(String.class));   
    private static URI getBaseURI() { 
    return UriBuilder.fromUri("http://localhost:8080/de.vogella.jersey.first").build(); 
    } 
} 

奇怪的部分是,我能得到正確的結果,如果我打

http://localhost:8080/de.vogella.jersey.first/rest/hello 

從瀏覽器。任何幫助解決這個問題表示讚賞。 謝謝

+0

問題是什麼?什麼不工作? – KatieK

+0

問題是,客戶端無法訪問在瀏覽器中正常工作的url。我真的需要在今天工作。請幫忙。 – Preeti

+0

您從客戶端發送了哪些HTTP標頭? – Yaniv

回答

0

如果你想以另一種方式運行這個例子,而不是傳遞整個網址,你在瀏覽器中通過下面的函數,你會得到你的主類的結果,我沒有得到任何問題。

private String doGet(String url){ 
     ClientConfig config = new DefaultClientConfig(); 
     Client client = Client.create(config); 
     WebResource resource = client.resource(url); 
     ClientResponse response = resource.type("application/x-www-form-urlencoded").get(ClientResponse.class); 
     String en = response.getEntity(String.class); 
     return en; 
    } 
1

根據您的要求在服務應用程序在創建類之前,比如你沒有提到的「路徑」註釋:

@Path("hello") 
public class Hello { 

} 

這只是在你的服務應用程序的問題。

1

網址:de.vogella.jersey.first/REST /你好

1)確保你已經給Servlet的映射,以便從URL

<servlet> 
    <servlet-name>jersey-serlvet</servlet-name> 
     ... 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>jersey-serlvet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

2)添加@Path("hello")聲明解析 '休息'以上方法。

@Path("hello") 
    public String sayXMLHello() {} 
+0

'jersey-serlvet'可能不會工作;) – Lambart

0

,您應該使用:的

http://localhost:8080/hello 

代替

http://localhost:8080/de.vogella.jersey.first/rest/hello 

出於測試目的。