在我的GWT項目中,我創建了一個精心設計的異常鏈,以便在服務調用中拋出異常,但發現getCause()
總是在客戶端的onFailure()
方法中返回null
。爲什麼GWT不會序列化異常的原因鏈?
通過GWT序列化代碼的調試之後,我發現這個代碼SerializabilityUtil
:
private static boolean fieldQualifiesForSerialization(Field field) {
if (Throwable.class == field.getDeclaringClass()) {
/**
* Only serialize Throwable's detailMessage field; all others are ignored.
*
* NOTE: Changing the set of fields that we serialize for Throwable will
* necessitate a change to our JRE emulation's version of Throwable.
*/
if ("detailMessage".equals(field.getName())) {
assert (isNotStaticTransientOrFinal(field));
return true;
} else {
return false;
}
} else {
return isNotStaticTransientOrFinal(field);
}
}
誰能幫助我在這裏,爲什麼會GWT設計師把這個在他們的代碼? Throwable.cause
是否有錯誤(或安全敏感)?
而這被認爲是理所當然的,我怎麼能告訴GWT序列化爲我的異常類做一個例外?
這不會破壞客戶端代碼,我會說。因爲'Throwable'子類的聲明域已經被序列化了,所以只有在GWT忽略的'Throwable'本身聲明的域。 – Saintali