2010-10-29 71 views
2

我們在GAE服務器和GWT和Android客戶端上有一個Restlet小應用程序。 Restlet向GWT客戶端提供GWT序列化回覆,向JSON客戶端提供JSON。Restlet將JSON發佈到Appengine錯誤

在本地和AppEngine生產服務器上都可以使用GWT序列化。

Android(JSON)客戶端與本地開發者服務器通信時,一切正常。

Android正在生產AppEngine服務器獲取JSON回覆,但POST失敗。日誌中沒有錯誤或警告。服務器上的函數被調用,但傳遞的參數爲空。

這是有問題的代碼:

@Post("json") 
public void createLocationJSON(Location location) { // location is always null 
    // do something with 'location' 
} 

回答

3

只是爲了讓大家知道:我設法GAE +的Restlet + JSON + GWT工作後多擺弄。這個過程非常混亂(讓我想起了爲Win32編程的日子):我只是在改變設置,直到它開始工作。

說我遇到的問題是:

  1. 它是服務於錯誤的表示(JSON,XML,GWT),以錯誤的客戶。後來事實證明,我必須關注課堂內部的方法順序。 WTF?
  2. 我無法讓它在子路徑上工作,例如/休息/*。

我不打算使用的Restlet,原因如下(提示作家):

  1. 文檔是稀缺的,不準確的,有時是矛盾的(在文件的不同部分解釋以不同的方式事情) 。
  2. 配置不是標準的JAX-RS。我知道他們可以選擇將其配置爲JAX-RS,但文檔中的所有示例都不基於此。

從那時起我切換到Jersey

+0

怎麼樣澤西島爲你工作? – 2011-03-27 21:01:48

+0

其實很好,直到1.5停止在appengine上工作(稍後通過配置解決):http://java.net/jira/browse/JERSEY-630 – 2011-03-27 21:06:56

+0

與此同時,我們用Resteasy替換它,恕我直言,它有更好的文檔。 – 2011-03-27 21:12:24

1

您遇到了幾個Restlet用戶面臨的GAE限制。

前段時間,GAE停止支持接受分塊的HTTP實體。我們用POST和PUT以及原始的GAE Servlets重現了這個問題,所以這不是Restlet相關的。請參閱GAE問題: http://code.google.com/p/googleappengine/issues/detail?id=129

我們發現的唯一解決方法是不要區塊實體,這意味着可以提前計算其大小。

在我們剛剛發佈的Restlet 2.1 M3版本中,我們在ClientResource上添加了一個簡單的「entityBuffering」屬性以便於實現(默認設置爲「false」)。

我們正在升級我們的「第一個應用程序」示例來說明解決方法。我們還必須應對GWT 2.2與其以前的GWT 2.1核心API的兼容性問題,因此Restlet 2.1將僅適用於GWT。

添加詳細信息可在此頁: http://wiki.restlet.org/docs_2.1/13-restlet/21-restlet/318-restlet/303-restlet.html

最好的問候,

傑羅姆

的Restlet〜創始人和技術負責人〜http://www.restlet.org

Noelios技術〜http://www.noelios.com

+0

嗨,傑羅姆。感謝-1。非常優雅。我想添加一些內容: – 2011-03-31 18:55:33

+0

1.您的回覆遲了幾個月。當我需要幫助時,你在哪裏?問題標籤爲'restlet',我希望你們可以將SO作爲這個開發者問答網站進行監控。 – 2011-03-31 18:57:41

+1

2. GAE問題是從2008年開始的。2010年10月我遇到了問題。您有專門針對GAE的Restlet版本。爲什麼你不能在文檔中明確指出存在嚴重問題? – 2011-03-31 19:00:46