Exception GWT RPC调用失败

Exception GWT RPC调用失败,exception,gwt,parameters,rpc,Exception,Gwt,Parameters,Rpc,我创建了一个远程过程调用。服务器端连接到Webservices,以获取信息,并将信息交给客户端。这是客户端代码 public void statusFor(GwtLaneServiceAsync laneProxy){ AsyncCallback<LaneInformation> callback = new AsyncCallback<LaneInformation>() { @Override public void

我创建了一个远程过程调用。服务器端连接到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++;
    }
}
public void statusFor(GwtLaneServiceAsync laneProxy){
AsyncCallback callback=新的AsyncCallback()
{
@凌驾
失败时的公共无效(可丢弃)
{
}
@凌驾
成功时公开作废(LaneInformation信息)
{
成功剂量(信息);
}
};
对于(车道:this.main菜单.getSlidePanel().getLaneMenu().GetPropertLanes().values())
{
if(lane.isChecked().booleanValue())
laneProxy.statusFor(“admin”、“password”、true、lane.getId()、回调);
其他的
laneProxy.statusFor(“admin”,“password”,false,lane.getId(),callback);
这个.laneIndex++;
}
}
现在我想做以下的

当服务器无法访问Webservice时,会引发WebServiceException。如果发生这种情况,我想在GUI的一个按钮上键入“Offline”。但我需要告诉你是按哪个按钮的。它不能硬编码,因为它取决于Web服务失败的“通道”

  • 我需要抓住例外情况
  • 我需要告诉“onFailure”部分,在哪个车道上,服务失败了。 我能否以某种方式将statusFor()参数传递给该部件

  • 为什么不将您的
    laneiformation
    包装在通用响应对象中,并将异常/错误代码添加到该响应中,以表明服务器端出现了问题,例如:

    public class RemoteResult<T> 
    {
        T payload;
        String errorCode;
    }
    
    公共类RemoteResult
    {
    T有效载荷;
    字符串错误码;
    }
    

    公共抽象类AbstractAsyncCallBack实现AsyncCallback
    {
    成功时公共无效(RemoteResult rr)
    {
    如果(rr.getErrorCode()!=null){failure(rr.getErrorCode());}
    else{success(rr.getPayload());}
    }
    公开摘要无效成功(T有效载荷);
    公共无效失败(字符串错误代码){/*默认情况下忽略*/}
    }
    
    总之,当服务器无法连接到其他服务时,您不应该在服务器端抛出异常,您应该与客户端进行良好的通信,而不是(重新)抛出异常:-)

    onFailure()


    干杯,

    没有办法处理这种情况。当服务器无法访问Web服务时,您可以从服务器端抛出任何自定义异常。然后它将出现
    onFailure
    block。或者,您可以在响应变量中返回任何消息字符串。这里是您正在使用的响应变量
    LaneInformation
    bean。所以,在那个里使用新变量,比如
    result
    ,并根据您的需求设置消息


    OnFailure
    只有在RPC调用中发生任何异常或错误时才会出现

    当它无法到达纯粹是异常处理的服务时,它是否会进入onfailure。。
    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 */ }
    }