2015-04-01 59 views
1

當服務器上發生未捕獲異常時,客戶端在服務調用的異步回調上調用onFailure()方法。他只得到StatusCodeExceptions,它提供的信息很少。我想通過它的堆棧跟蹤來獲取服務器上發生的實際異常。這是可能的GWT?配置GWT向客戶端返回完全異常

在我的服務接口中,我向需要服務器的異常詳細信息的方法中添加了「throws Exception」。這使我可以獲得服務器上發生的異常消息,但其堆棧跟蹤仍在客戶端停止。

我知道這對於生產環境來說不是很好的做法,但是我希望啓用它來進行測試。

回答

0

這將是一個三步過程。

  1. 設置未捕獲的異常處理程序。在onModuleLoad()方法應該沒問題。

    GWT.setUncaughtExceptionHandler(new ExceptionHandler());

  2. 創建一個類,將實現GWT.UncaughtExceptionHandler接口,將解析的Throwable。

    public static class ExceptionHandler implements GWT.UncaughtExceptionHandler { 
    @Override 
    public void onUncaughtException(final Throwable e) { 
        if (e instanceof UmbrellaException) { 
         final UmbrellaException umb = (UmbrellaException) e; 
         String errMsg = ""; 
         for (Throwable t : umb.getCauses()) { 
          errMsg += t.getMessage() + "\n"; 
          for (StackTraceElement element : t.getStackTrace()) { 
           errMsg += element.getClassName() + "(" + element.getMethodName() + ":" 
             + element.getLineNumber() + ")\n"; 
          } 
          /* errMsg String contains full stack trace */ 
         } 
    
        } 
    } 
    

    }

  3. 調用ExceltionHandler並傳遞Throwable的是排在onFailure處maithod()

    new ExceptionHandler().onUncaughtException(caught);

如果服務器上發生的任何異常簡單地拋出客戶端的異常對象(來自RPC servlet)

+0

所以,我認爲GWT未捕獲的異常處理程序是源於客戶端的未捕獲的異常。我不認爲這與服務器的異常有關。我的onFailure()方法處理服務器上發生的任何異常 – 2015-04-02 11:36:44

+0

哦,我認爲這個相關的問題是我需要做的。按照您的建議,我使用Uncaught異常處理程序,但處理程序駐留在服務器端。 http://stackoverflow.com/questions/19324026/how-do-i-get-the-server-side-exception-message-with-gwt – 2015-04-02 11:45:28

相關問題