2013-01-31 99 views
0

我創建了一個遠程過程調用。服務器端連接到Web服務,以獲取信息,並將其交給客戶端。這是客戶端代碼。GWT RPC呼叫失敗

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處」 - 第一部分,其上車道,服務失敗。 我可以以某種方式將statusFor() - 參數傳遞給該部分嗎?
+0

它是否進入失敗? –

+0

是的,當它不能達到服務 – Laura

+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 */ } 
} 

總之,你不應該扔在服務器端的異常當服務器無法連接到一些其他的服務,你應該是很好地傳達給客戶,並通過(再)拋不恩ception :-)

onFailure()方法主要用於在RPC通信正常時出現問題。

乾杯,

0

沒有辦法來處理這種情況。您可以從服務器端拋出任何自定義異常,同時服務器無法訪問web服務。那麼它會來onFailure區塊。或者你可以在響應變量中返回任何消息字符串。這裏的響應變量是你正在使用的LaneInformation bean。因此需要像result這樣的新變量,並根據您的要求設置消息。

OnFailure它只是發生的任何異常或任何錯誤的事情發生在RPC調用時談到。