2012-08-10 44 views
1

我有一個我建立的Web服務...我現在要做的是發送一個簡單的請求,其中包含一個json查詢字符串一個Tapestry Web應用程序到該Web服務。我四處搜索,大多數人都說使用Apache HttpClient來實現這一點。與HttpClient一起,我正在使用URIBuilder。使用HttpClient將URL中的JSON查詢字符串發送到Web服務(Java)

,我試圖發送看起來像這樣

{"user":{"userEmail":"[email protected]","firstName":"John","lastName":"Doe","phone":"203- 555-5555"},"password":"dead"}

*我實現與密碼的問題,以純文本等發送

JSON對象...

,工程的URL(測試通過在Web瀏覽器中手動輸入這個Web服務已經服務的Android客戶端,並在iOS客戶端)看起來像這樣

http:// ##.##.###.##/createuser?json={"user":{"userEmail":"[email protected]","firstName":"John","lastName":"Doe","phone":"203-555-5555"},"password":"dead"}

這裏是HttpClient的代碼,我有m個谷歌一起試圖找出爲什麼這將無法正常工作。基本上我想要做的是用URIBuilder創建一個URI,然後用新建的URI構造一個HttpPost或HttpGet對象。但是URIBuilding過程中出現了問題。當我調試時,當我嘗試設置URI的所有方面時會引發異常。

Object onSuccess() throws ClientProtocolException, IOException, URISyntaxException{ 
    // json = {"user":{"userEmail":"[email protected]","firstName":"John","lastName":"Doe","phone":"203- 555-5555"},"password":"dead"} 
    String json = user.toJson(); 
    URIBuilder builder = new URIBuilder(); 
    // Error gets thrown when I step over the next line 
    builder.setScheme("http").setHost("##.###.##.###").setPort(8080).setPath("createuser").setQuery("json=" +json); 
    URI uri = builder.build(); 

    HttpPost request = new HttpPost(uri); 
    DefaultHttpClient httpClient = new DefaultHttpClient(); 
    String tmp = request.getURI().toString(); 

    HttpResponse response = httpClient.execute(request); 
    index.setResponse(EntityUtils.toString(response.getEntity())); 
    return index; 

說回來,當我跨過我的代碼註釋行的錯誤是

[ERROR] TapestryModule.RequestExceptionHandler Processing of request failed with uncaught exception:org.apache.http.client.utils.URLEncodedUtils.parse(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/util/List; java.lang.NoSuchMethodError:org.apache.http.client.utils.URLEncodedUtils.parse(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/util/List;

我已經嘗試了很多的方法和對象等組合得到這個請求發送正確地關閉服務器,似乎沒有任何工作。希望我能看到一些相對簡單的東西。

在此先感謝您提供的任何指導。

+0

該錯誤意味着您使用的是HttpClient庫的錯誤版本。 – Luciano 2012-08-10 02:57:50

+0

我應該使用什麼版本?我從這裏下載了包含所有jar的zip文件http://hc.apache.org/downloads.cgi – mfunaro 2012-08-10 03:07:22

+0

這取決於調用方法的庫。檢查該庫的文檔以查看它是否列出了它的依賴關係。 – Luciano 2012-08-10 03:13:56

回答

1

您很可能在您的類路徑中有錯誤的版本或兩個版本的apache httpcomponents。如果您正在運行Tapestry,它將打印錯誤頁面上類路徑中的所有包。調查那裏,找到哪些httpcomponents加載,找出它來自哪裏並修復它。

如果這不起作用,您應該與我們分享一些運行時環境。哪個servlet引擎從哪個IDE運行,或者從命令行運行。你在使用Maven嗎?如果這樣分享你的朋友。等等

+0

代碼有什麼根本錯誤嗎?我注意到Tapestry似乎包含HttpClient和HttpCore以及它們的默認項目設置。所以我已經過去了最初的問題,但我似乎還沒有得到適當的要求。 – mfunaro 2012-08-13 22:29:13

+0

如果你設法解決最初的問題,它聽起來就是你的問題解決了,你有一個新的問題,需要多一點「...仍然不能得到一個適當的要求」。請關閉此問題,並使用已更改的代碼和確切的問題/異常開始新的問題。在這裏留言,我會看看。祝你好運! – joostschouten 2012-08-14 06:25:58

相關問題