--- /home/tromey/gnu/Nightly/classpath/classpath/java/io/ObjectInputStream.java 2004-11-07 02:18:25.000000000 -0700 +++ java/io/ObjectInputStream.java 2004-11-25 02:16:35.000000000 -0700 @@ -47,6 +47,8 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.Proxy; +import java.security.PrivilegedAction; +import java.security.AccessController; import java.util.Arrays; import java.util.Hashtable; import java.util.Vector; @@ -119,6 +121,15 @@ */ public final Object readObject() throws ClassNotFoundException, IOException { + if (callersClassLoader == null) + { + callersClassLoader = getCallersClassLoader (); + if (Configuration.DEBUG && dump) + { + dumpElementln ("CallersClassLoader = " + callersClassLoader); + } + } + if (this.useSubclassMethod) return readObjectOverride(); @@ -260,7 +271,7 @@ readArrayElements(array, componentType); if(dump) for (int i = 0, len = Array.getLength(array); i < len; i++) - dumpElementln(" ELEMENT[" + i + "]=" + Array.get(array, i)); + dumpElementln(" ELEMENT[" + i + "]=" + Array.get(array, i)); ret_val = processResolution(null, array, handle); break; } @@ -387,6 +398,8 @@ setBlockDataMode(old_mode); this.isDeserializing = was_deserializing; + + depth -= 2; depth -= 2; @@ -703,7 +716,7 @@ protected Class resolveClass(ObjectStreamClass osc) throws ClassNotFoundException, IOException { - return Class.forName(osc.getName(), true, currentLoader()); + return Class.forName(osc.getName(), true, callersClassLoader); } /** @@ -1795,7 +1808,10 @@ * @param sm SecurityManager instance which should be called. * @return The current class loader in the calling stack. */ + private static native ClassLoader currentClassLoader (SecurityManager sm); + + private native ClassLoader getCallersClassLoader(); private void callReadMethod (Method readObject, Class klass, Object obj) throws ClassNotFoundException, IOException @@ -1854,13 +1870,15 @@ private Hashtable classLookupTable; private GetField prereadFields; - private static boolean dump; + private static boolean dump = false && Configuration.DEBUG; + + private ClassLoader callersClassLoader; // The nesting depth for debugging output private int depth = 0; private void dumpElement (String msg) - { + { System.out.print(msg); }