Add exception class name to serialized/deserialized throwable. git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10777 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/core/client/impl/SerializableThrowable.java b/user/src/com/google/gwt/core/client/impl/SerializableThrowable.java index e967fbf..f5b993d 100644 --- a/user/src/com/google/gwt/core/client/impl/SerializableThrowable.java +++ b/user/src/com/google/gwt/core/client/impl/SerializableThrowable.java
@@ -29,7 +29,30 @@ private SerializableThrowable cause = null; private String message = null; private StackTraceElement[] stackTrace = null; - + private String typeName = null; + + /** + * A subclass of Throwable that contains the serialized exception class type. + */ + public static class ThrowableWithClassName extends Throwable { + + private String typeName; + + public ThrowableWithClassName(String message, Throwable cause, String typeName) { + super(message, cause); + this.typeName = typeName; + } + + public ThrowableWithClassName(String message, String typeName) { + super(message); + this.typeName = typeName; + } + + public String getExceptionClass() { + return typeName; + } + } + /** * Create a new SerializableThrowable from a Throwable. */ @@ -39,6 +62,7 @@ cause = new SerializableThrowable(t.getCause()); } stackTrace = t.getStackTrace(); + typeName = t.getClass().getName(); } protected SerializableThrowable() { @@ -63,9 +87,9 @@ public Throwable getThrowable() { Throwable t; if (cause != null) { - t = new Throwable(message, cause.getThrowable()); + t = new ThrowableWithClassName(message, cause.getThrowable(), typeName); } else { - t = new Throwable(message); + t = new ThrowableWithClassName(message, typeName); } t.setStackTrace(stackTrace); return t;
diff --git a/user/src/com/google/gwt/logging/client/JsonLogRecordClientUtil.java b/user/src/com/google/gwt/logging/client/JsonLogRecordClientUtil.java index 9ae3792..1c9b153 100644 --- a/user/src/com/google/gwt/logging/client/JsonLogRecordClientUtil.java +++ b/user/src/com/google/gwt/logging/client/JsonLogRecordClientUtil.java
@@ -68,6 +68,7 @@ private static JSONObject throwableAsJsonObject(Throwable t) { JSONObject obj = new JSONObject(); if (t != null) { + obj.put("type", getJsonString(t.getClass().getName())); obj.put("message", getJsonString(t.getMessage())); obj.put("cause", throwableAsJsonObject(t.getCause())); StackTraceElement[] stackTrace = t.getStackTrace();
diff --git a/user/src/com/google/gwt/logging/impl/FormatterImpl.java b/user/src/com/google/gwt/logging/impl/FormatterImpl.java index df9b153..2af328c 100644 --- a/user/src/com/google/gwt/logging/impl/FormatterImpl.java +++ b/user/src/com/google/gwt/logging/impl/FormatterImpl.java
@@ -16,6 +16,8 @@ package com.google.gwt.logging.impl; +import com.google.gwt.core.client.impl.SerializableThrowable; + import java.util.Date; import java.util.HashSet; import java.util.logging.Formatter; @@ -63,7 +65,11 @@ seenCauses.add(currentCause); s.append(causedBy); causedBy = newline + "Caused by: "; // after 1st, all say "caused by" - s.append(currentCause.getClass().getName()); + if (currentCause instanceof SerializableThrowable.ThrowableWithClassName) { + s.append(((SerializableThrowable.ThrowableWithClassName) currentCause).getExceptionClass()); + } else { + s.append(currentCause.getClass().getName()); + } s.append(": " + currentCause.getMessage()); StackTraceElement[] stackElems = currentCause.getStackTrace(); if (stackElems != null) {
diff --git a/user/src/com/google/gwt/logging/server/JsonLogRecordServerUtil.java b/user/src/com/google/gwt/logging/server/JsonLogRecordServerUtil.java index adb20bc..f3384a8 100644 --- a/user/src/com/google/gwt/logging/server/JsonLogRecordServerUtil.java +++ b/user/src/com/google/gwt/logging/server/JsonLogRecordServerUtil.java
@@ -16,6 +16,8 @@ package com.google.gwt.logging.server; +import com.google.gwt.core.client.impl.SerializableThrowable; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -82,7 +84,9 @@ } else { stackTrace = new StackTraceElement[0]; } - Throwable thrown = new Throwable(message, cause); + String exceptionClass = t.getString("type"); + SerializableThrowable.ThrowableWithClassName thrown = + new SerializableThrowable.ThrowableWithClassName(message, cause, exceptionClass); thrown.setStackTrace(stackTrace); return thrown; }