在GWT中遇到com.google.gwt.user.client.rpc.StatusCodeException: 0异常

10

我有时/经常在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/google-web-toolkit@googlegroups.com/msg79537.html

那里提供了一个有趣的提示:如果您断开 WLAN 并重新连接,则会出现此错误。我在笔记本电脑上尝试了这个操作-然后就会发生异常。

另一个问题是,有时会出现此异常(并不总是在同一时间或执行特定操作时出现,因此看起来是随机的尽管网络连接正常。我不知道为什么会发生这种情况,也不知道处理它的正确方法-当然,我可以捕获并忽略它。但请求永远不会发送到服务器,操作也不会执行-这不是很好的错误处理方式。

关于这个应用程序的一些数据-也许这有助于缩小或希望解决问题:

  • GWT 2.4与Sencha GXT 3.0.1
  • 在最新版本的所有主要浏览器上都会出现:IE、Chrome、Firefox
  • 使用Cloudflare我也尝试过不使用它-但问题是一样的。所以这似乎不是使用此代理服务引起的。

非常感谢每一条提示和解决此问题的每一个思路。


你是如何与服务器端进行通信的? - Jama A.
@PatrickMeier 你解决了这个问题或者有些什么方式可以解决或者调试它吗?因为我现在也遇到了相似的情况,但是一点头绪都没有... - Yuriy Nakonechnyy
@Yura 我还没有找到解决这个问题的方法。抱歉。 - Patrick Meier
1
@PatrickMeier 啊,没问题 - 感谢快速回复! - Yuriy Nakonechnyy
如果有人感兴趣,我找到了类似问题的解决方案:https://dev59.com/-4Lba4cB1Zd3GeqPYgK_#25282907 - Yuriy Nakonechnyy
4个回答

5

由于不存在HTTP状态代码0,这显然不是来自服务器的信息-建议通过Firebug或其他方式进行测试,以确保没有类似这样的错误响应返回。

相反,这几乎肯定来自浏览器本身,可能是连接超时或被服务器断开,或者浏览器无法访问服务器(DNS错误,网关错误,wifi信号丢失,服务器不可用)。

将其视为任何意外的服务器故障-也许可以稍后重试,向用户显示消息,记录错误并在连接恢复工作时发送该消息。

它在所有浏览器中发生的事实表明出现了网络或服务器问题-极不可能所有浏览器同时以不可预测的方式失败。这个事实也使得调试更加容易-您可以使用喜欢的浏览器的调试工具。


你是对的 - 正如我在问题中所写的那样,这是一个网络问题(断开 WLAN...),请求从未发出。但另一个问题是,看似随机的请求在所有连接都正常的情况下失败了。 - Patrick Meier
如果在两种不同的情况下发生了相同的事情,那么这两种情况很可能是相关的。不幸的是,如果没有任何额外的调试信息,我已经没有太多可以建议的了 - 当这些“随机”故障发生时,请观察网络流量,并且我认为您会检测到服务器由于网络原因或其他原因未能正确响应。这就是我在任何浏览器中看到的“0”状态代码的含义。 - Colin Alworth
你说得对。如果我有更多的信息,我会回来的。非常感谢。 - Patrick Meier

2
尽管原帖作者可能遇到了网络连接问题,但我今天在GWT托管模式下也遇到了同样的错误。而且不是有时候,而是一直如此。
我现在已经找到了解决方法,并想在这里分享出来,以便其他寻找0状态码问题解决方案的人可以找到它。
如果您使用GWT提供的Rpc安全令牌(如此说明:http://www.gwtproject.org/doc/latest/DevGuideSecurityRpcXsrf.html)来防止跨站脚本攻击,但由于某种原因忘记设置安全令牌,则可能会遇到零结果之类的问题。
我设计我的Web应用程序,使大多数RPC调用都在框架内完成。今天我需要手动创建一个RPC服务。忘记设置RPCToken,从服务器得到空响应。
希望这对某些人有所帮助。

2
如果我们的认证层确定会话已过期并将RPC请求重定向到另一台主机上的登录页面,那么就会发生这种情况。由于AJAX请求无法发送到不同的主机,因此浏览器会中止请求并发出状态码0的信号。请参见 https://code.google.com/p/google-web-toolkit/issues/detail?id=2858 这太疯狂了,因为即使Firebug / Chrome Inspector中显示的HTTP代码明显是302,GWT也会抛出具有代码0的StatusCodeException。

1

我发现如果在服务器上挂一个rpc调用(Thread.wait()),并且刷新浏览器,那么在客户端重新加载页面之前,它将调用等待回调的onFailure方法,并给出上述状态码,这表明它是源自客户端或者是一种通用的非特定捕获异常的错误码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接