0

我创建了一个远程过程调用。服务器端连接到 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++;
    }
}

现在我想做以下...

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

  1. 我需要捕捉异常
  2. 我需要告诉“onFailure”-Part,服务在哪条车道上失败了。我可以以某种方式将 statusFor()-Parameters 传递给该部分吗?
4

2 回答 2

0

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

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

于 2013-01-31T13:51:43.220 回答
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 通信中出现问题时。

干杯,

于 2013-01-31T13:51:17.163 回答