EVALUATION
The root cause of this problem is that the JVM in Internet Explorer exhibits
bug 4088176 ("backward compat. fails reading an evolved class with new field,
nonexistant class"), which was fixed in (Sun's) JDK 1.1.6. Presumably the
implementation of serialization in Internet Explorer's JVM was based off of JDK
code prior to 1.1.6, or was independently implemented with the bug (note: from
the stack trace given, the ObjectInputStream implementation in Internet
Explorer's JVM does not appear to closely match any of Sun's implementations
from 1.1 through 1.1.5).
The reason that J2SE 1.4 triggers this problem is as follows: in J2SE 1.4, a
new serializable field "stackTrace" of type java.lang.StackTraceElement[] was
added to java.lang.Throwable. The StackTraceElement class is itself new to
1.4, and is not present in JDK 1.1.x. Because of bug 4088176, this causes
deserialization to fail in JDK <= 1.1.5 (including Internet Explorer's JVM).
The correct behavior (as documented by 4088176) is for the receiving VM to
disregard the failure to resolve StackTraceElement, since the field it is
associated with is not present in the local (1.1.x) version of
java.lang.Throwable. Note that deserialization of exceptions written by 1.4
works properly in JDK 1.1.6 and later.
Since this failure is caused by a bug in the deserializing (applet-side) JVM,
and we do not have any means of affecting the serialization code in the JVM
bundled with Internet Explorer, there is no way to fix the underlying bug
directly, given the deployment described. Several workarounds are possible,
however:
1. Use JDK 1.3.x or earlier for the server end. Since the added
"stackTrace" field is absent from JDK <= 1.3.x, this would avoid the
particular failure described. However, any other serializable classes
with added fields whose types are unresolvable in Internet Explorer's JVM
will trigger similar deserialization failures.
2. Use the Java Plug-In or Java WebStart on the client side. Both employ
JVMs in which 4088176 is fixed.
Closing as "will not fix", since the addition of StackTraceElement to
Throwable's serial form in 1.4 is completely legal, and the root cause of the
failure is due to 4088176 in code that is beyond our control.
###@###.### 2002-02-07
|