GWT RPC 调用失败
Posted
技术标签:
【中文标题】GWT RPC 调用失败【英文标题】:GWT RPC Call onFailure 【发布时间】:2013-01-31 13:29:35 【问题描述】:我创建了一个远程过程调用。服务器端连接到 Web 服务,以获取信息,然后将其交给客户端。这是客户端代码。
public void statusFor(GwtLaneServiceAsync laneProxy)
AsyncCallback<LaneInformation> callback = new AsyncCallback<LaneInformation>()
@Override
public void onFailure(Throwable caught)
@Override
public void onSuccess(LaneInformation information)
doStatusForSuccess(information);
;
for (Lane lane : this.mainmenu.getSlidePanel().getLaneMenu().getProperLanes().values())
if (lane.isChecked().booleanValue())
laneProxy.statusFor("admin", "password", true, lane.getId(), callback);
else
laneProxy.statusFor("admin", "password", false, lane.getId(), callback);
this.laneIndex++;
现在我想做以下...
当服务器无法访问 Webservice 时,会抛出 WebServiceException。如果发生这种情况,我想在我的 GUI 按钮之一上键入“离线”。但我需要告诉哪个按钮。它不能硬编码,因为它取决于 Web 服务失败的“通道”。
-
我需要捕捉异常
我需要告诉“onFailure”-Part,服务在哪个通道上失败了。
我可以以某种方式将 statusFor()-Parameters 传递给该部分吗?
【问题讨论】:
它是否会出现故障? Y,当它无法到达服务时 那是纯粹的异常处理.. 【参考方案1】:没有办法处理这种情况。当服务器无法访问 Web 服务时,您可以从服务器端抛出任何自定义异常。然后它将来到onFailure
块。或者您可以在响应变量中返回任何消息字符串。这里您使用的是LaneInformation
bean 的响应变量。所以在那里取新变量,如result
,并根据您的要求设置消息。
OnFailure
只有在 RPC 调用中发生任何异常或发生任何错误时才会出现。
【讨论】:
【参考方案2】:为什么不将您的LaneInformation
包装在通用响应对象中,并将异常/错误代码添加到该响应中,以表明服务器端出现问题,例如:
public class RemoteResult<T>
T payload;
String errorCode;
和
public abstract class AbstractAsyncCallBack<T> implements AsyncCallback<RemoteResult<T>>
public void onSuccess( RemoteResult<T> rr )
if ( rr.getErrrorCode() != null ) failure( rr.getErrorCode() );
else success( rr.getPayload() );
public abstract void success( T payload );
public void failure( String errorCode ) /* Ignore by default */
总而言之,当服务器无法连接到其他服务时,您不应该在服务器端抛出异常,您应该与客户端进行良好的沟通,而不是通过(重新)抛出异常:- )
onFailure()
方法主要用于 RPC 通信中出现问题时。
干杯,
【讨论】:
以上是关于GWT RPC 调用失败的主要内容,如果未能解决你的问题,请参考以下文章
GWT Java rpc 调用工作;但是,替换 GWTBootstrap - rpc 调用不起作用
GWT:RPC 失败(StatusCodeException)