我创建了一个远程过程调用。服务器端连接到Webservices,以获取信息,并将其移交给客户端。这是客户端代码。
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服务失败的“通道”。
答案 0 :(得分:0)
为什么不将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通信中出错的情况。
干杯,
答案 1 :(得分:0)
没有办法处理这种情况。您可以从服务器端抛出任何自定义异常,而服务器无法访问Web服务。然后它会onFailure
阻止。或者您可以在响应变量中返回任何消息字符串。这里是你使用LaneInformation
bean的响应变量。所以在result
那里接受新的变量,并根据你的要求设置信息。
OnFailure
只有在发生任何异常或RPC调用中发生任何错误的情况时才会出现。