2012-09-27 64 views
9

我有時/經常會收到這樣的異常在GWT,但不知道爲什麼:獲取com.google.gwt.user.client.rpc.StatusCodeException:0 GWT

SEVERE: com.google.gwt.user.client.rpc.StatusCodeException: 0 
java.lang.RuntimeException: com.google.gwt.user.client.rpc.StatusCodeException: 0 
    at Unknown.java_lang_RuntimeException_RuntimeException__Ljava_lang_Throwable_2V(Unknown Source) 
    at Unknown.de_ctech24_simplynews_web_client_util_SimpleCallback_$onFailure__Lde_ctech24_simplynews_web_client_util_SimpleCallback_2Ljava_lang_Throwable_2V(Unknown Source) 
    at Unknown.com_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_$onResponseReceived__Lcom_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_2Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_Response_2V(Unknown Source) 
    at Unknown.com_google_gwt_http_client_Request_$fireOnResponseReceived__Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_RequestCallback_2V(Unknown Source) 
    at Unknown.com_google_gwt_http_client_RequestBuilder$1_onReadyStateChange__Lcom_google_gwt_xhr_client_XMLHttpRequest_2V(Unknown Source) 
    at Unknown.<anonymous>(Unknown Source) 
    at Unknown.com_google_gwt_core_client_impl_Impl_apply__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2(Unknown Source) 
Caused by: com.google.gwt.user.client.rpc.StatusCodeException: 0 
    at Unknown.java_lang_RuntimeException_RuntimeException__Ljava_lang_String_2Ljava_lang_Throwable_2V(Unknown Source) 
    at Unknown.com_google_gwt_user_client_rpc_StatusCodeException_StatusCodeException__ILjava_lang_String_2V(Unknown Source) 
    at Unknown.com_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_$onResponseReceived__Lcom_google_gwt_user_client_rpc_impl_RequestCallbackAdapter_2Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_Response_2V(Unknown Source) 
    at Unknown.com_google_gwt_http_client_Request_$fireOnResponseReceived__Lcom_google_gwt_http_client_Request_2Lcom_google_gwt_http_client_RequestCallback_2V(Unknown Source) 
    at Unknown.com_google_gwt_http_client_RequestBuilder$1_onReadyStateChange__Lcom_google_gwt_xhr_client_XMLHttpRequest_2V(Unknown Source) 
    at Unknown.<anonymous>(Unknown Source) 
    at Unknown.com_google_gwt_core_client_impl_Impl_apply__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2(Unknown Source) 

花一些時間谷歌搜索後,我發現這個:http://www.mail-archive.com/[email protected]/msg79537.html

有一個有趣的提示:它發生,如果你斷開您的WLAN並再次連接 - 然後錯誤出現。我在我的筆記本上試了這個 - 然後發生異常。

的另一個問題是此異常有時出現(不是真的總是在同一時間或執行特定操作時 - 所以看似隨意雖然網絡連接是好的。我不知道爲什麼會發生這種情況,以及處理它的正確方法是什麼 - 確保我能夠理解並忽略它。但請求永遠不會進入服務器,並且操作不會被執行 - 這不是一個很好的錯誤處理。

關於這個程序的一些數據 - 也許這有助於縮小或有望解決這一問題:

  • GWT 2.4煎茶GXT 3.0.1
  • 發生在所有的頂級瀏覽器的最新版本:IE,Chrome瀏覽器,火狐
  • 使用Cloudflare我也試過沒有了它 - 但它是同樣的問題,因此,這似乎並沒有被最初由使用該代理服務

非常感謝每一個提示和每個想法如何處理/解決這個問題。

+0

你如何與服務器端通信? –

+0

我使用GWT-RPC進行通信。 –

+0

@PatrickMeier您是否設法解決這個問題或以某種方式解決問題?因爲我面對的情況很相似,不知道如何解決或調試它... – Yura

回答

5

由於沒有HTTP狀態代碼0,這看起來不是來自服務器 - 使用Firebug或其他方法進行測試可能是值得的,只是爲了確保沒有像這樣回來的錯誤響應。

相反,這幾乎肯定來自瀏覽器本身,無論是連接超時還是被服務器丟棄,或瀏覽器無法到達服務器(壞的DNS,壞的網關,丟失的wifi,服務器不可用) 。

將此視爲任何意外的服務器故障 - 可能退後並重試,向用戶顯示消息,記錄錯誤並在連接再次運行時發送該消息。

事實上,它在所有瀏覽器中發生都指向網絡或服務器問題 - 所有瀏覽器都不可能以不可預測的方式一起發生故障。這一事實也使調試更容易 - 您可以使用自己喜歡的瀏覽器的調試工具。

+0

你是對的 - 正如我在我的問題中寫到的那樣,這是一個網絡問題(斷開WLAN ......),並且從未提出請求。但另一個問題是,隨機的隨機請求在網絡連接全部到位時失敗。 –

+0

如果在兩種不同的情況下發生同樣的事情,那麼這兩種情況可能會相互關聯。不幸的是,沒有任何額外的調試信息,沒有多少我可以建議我還沒有 - 在發生這些「隨機」故障時觀察網絡流量,並且我認爲您會檢測到服務器無法正確迴應,出於網絡原因或其他原因。這就是'0'狀態碼在我見過的任何瀏覽器中的含義。 –

+0

你說得對。如果我有更多的信息,我會回來。非常感謝。 –

2

如果我們的身份驗證層確定會話已過期並將RPC請求重定向到其他主機上的登錄頁面,則會發生這種情況。由於AJAX請求不能去到不同的主機,瀏覽器將中止請求和信號狀態碼0。見https://code.google.com/p/google-web-toolkit/issues/detail?id=2858

它太瘋狂,因爲GWT將拋出一個StatusCodeException代碼爲0,即使出現在Firebug /鉻的HTTP代碼Inspector顯然是一個302.

2

雖然原來的海報可能有他們的網絡連接問題,我今天在GWT託管模式下得到了同樣的錯誤。而不是有時,但始終。

我現在想通了,我想在這裏分享,所以其他人在尋找0狀態代碼問題的溶劑可以找到它。

如果您使用GWT提供的Rpc安全令牌(如本說明中所述:http://www.gwtproject.org/doc/latest/DevGuideSecurityRpcXsrf.html)針對跨站點腳本編寫,但由於某種原因您忘記設置安全令牌,那麼您可能遇到的一個問題就是零結果。

我設計了我的web應用程序,以便大多數RPC調用主要在框架內完成。今天我需要手工創建一個RPC服務。忘記設置RPCToken,從服務器獲得空的響應。

希望這可以幫助別人。

1

我發現,如果你掛在服務器上的RPC調用(Thread.wait()),瀏覽器刷新,然後在客戶端再次加載頁面之前,它會調用onFailure方法的等待上面提到的狀態代碼回調,表明它在客戶端中存在,或者它是非特定捕獲異常的通用錯誤代碼。