我想發送一個在服務器端拋出的異常到客戶端。它工作的ATM部分。GWT客戶端異常更改
當我的DatabaseServerConnectionImpl
中的某個方法失敗時,我保存該異常,然後客戶端檢測到(onFailure)該方法失敗並通過進一步的回調返回先前保存的異常。
此異常現在包含消息和堆棧跟蹤。該消息是正確的,但堆棧跟蹤是錯誤的。我在返回命令之前檢查了服務器端的堆棧跟蹤,這是正確的。例如:(服務器端):
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2077)
在客戶端異常後的樣子:
com.google.gwt.user.client.rpc.core.java.lang.Exception_FieldSerializer.instantiate(Exception_FieldSerializer.java:16) and it has a different length
當我創造我剛纔設置的消息和堆棧跟蹤異常。 afaik例外是默認的序列化。服務器端的另一種方法沒有任何問題。 編輯:添加一些源代碼: DatabaseServerConnectionImpl的示例方法 lastexception是一個成員值! ...
try {
database.doStuff(obj);
} catch (SQLException e) {
Logger.getInstance().log(e); // Logs the Errors
lastException = new Exception(e.getMessage());
StackTraceElement[] tmp = new StackTraceElement[e.getStackTrace().length];
for (int i = 0; i < tmp.length; i++) {
tmp[i] = e.getStackTrace()[i];
}
lastException.setStackTrace(tmp);
throw new IllegalArgumentException();
}
當異步回調客戶端上的失敗,我呼籲在服務器端下面的方法:
@覆蓋 公衆最終SerializableException getLatestException(){
return lastException;
}
我嘗試了上面的方法也嘗試和catch塊,但沒有例外被捕獲。
你可以發佈一些非常簡短的示例代碼嗎? –