Index: java/io/ObjectInputStream.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/io/ObjectInputStream.java,v retrieving revision 1.62 diff -u -r1.62 ObjectInputStream.java --- java/io/ObjectInputStream.java 13 Aug 2005 18:02:38 -0000 1.62 +++ java/io/ObjectInputStream.java 8 Sep 2005 08:16:49 -0000 @@ -199,7 +199,6 @@ for (int i = 0; i < n_intf; i++) { intfs[i] = this.realInputStream.readUTF(); - System.out.println(intfs[i]); } boolean oldmode = setBlockDataMode(true); @@ -219,6 +218,10 @@ is_consumed = false; ObjectStreamClass superosc = (ObjectStreamClass)readObject(); osc.setSuperclass(superosc); + osc.firstNonSerializableParentConstructor = + superosc.firstNonSerializableParentConstructor; + osc.fieldMapping = new ObjectStreamField[0]; + osc.realClassIsSerializable = true; ret_val = osc; break; } @@ -874,7 +877,7 @@ } else for (int i = 0; i < intfs.length; i++) - clss[i] = cl.loadClass(intfs[i]); + clss[i] = Class.forName(intfs[i], false, cl); try { return Proxy.getProxyClass(cl, clss); Index: java/io/ObjectOutputStream.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/io/ObjectOutputStream.java,v retrieving revision 1.57 diff -u -r1.57 ObjectOutputStream.java --- java/io/ObjectOutputStream.java 10 Jul 2005 18:29:07 -0000 1.57 +++ java/io/ObjectOutputStream.java 8 Sep 2005 08:16:53 -0000 @@ -412,37 +412,53 @@ protected void writeClassDescriptor(ObjectStreamClass osc) throws IOException { - realOutput.writeByte(TC_CLASSDESC); - realOutput.writeUTF(osc.getName()); - realOutput.writeLong(osc.getSerialVersionUID()); - assignNewHandle(osc); - - int flags = osc.getFlags(); - - if (protocolVersion == PROTOCOL_VERSION_2 - && osc.isExternalizable()) - flags |= SC_BLOCK_DATA; - - realOutput.writeByte(flags); - - ObjectStreamField[] fields = osc.fields; - realOutput.writeShort(fields.length); - - ObjectStreamField field; - for (int i = 0; i < fields.length; i++) + if (osc.isProxyClass) { - field = fields[i]; - realOutput.writeByte(field.getTypeCode ()); - realOutput.writeUTF(field.getName ()); - - if (! field.isPrimitive()) - writeObject(field.getTypeString()); + realOutput.writeByte(TC_PROXYCLASSDESC); + Class[] intfs = osc.forClass().getInterfaces(); + realOutput.writeInt(intfs.length); + for (int i = 0; i < intfs.length; i++) + realOutput.writeUTF(intfs[i].getName()); + + boolean oldmode = setBlockDataMode(true); + annotateProxyClass(osc.forClass()); + setBlockDataMode(oldmode); + realOutput.writeByte(TC_ENDBLOCKDATA); + } + else + { + realOutput.writeByte(TC_CLASSDESC); + realOutput.writeUTF(osc.getName()); + realOutput.writeLong(osc.getSerialVersionUID()); + assignNewHandle(osc); + + int flags = osc.getFlags(); + + if (protocolVersion == PROTOCOL_VERSION_2 + && osc.isExternalizable()) + flags |= SC_BLOCK_DATA; + + realOutput.writeByte(flags); + + ObjectStreamField[] fields = osc.fields; + realOutput.writeShort(fields.length); + + ObjectStreamField field; + for (int i = 0; i < fields.length; i++) + { + field = fields[i]; + realOutput.writeByte(field.getTypeCode ()); + realOutput.writeUTF(field.getName ()); + + if (! field.isPrimitive()) + writeObject(field.getTypeString()); + } + + boolean oldmode = setBlockDataMode(true); + annotateClass(osc.forClass()); + setBlockDataMode(oldmode); + realOutput.writeByte(TC_ENDBLOCKDATA); } - - boolean oldmode = setBlockDataMode(true); - annotateClass(osc.forClass()); - setBlockDataMode(oldmode); - realOutput.writeByte(TC_ENDBLOCKDATA); if (osc.isSerializable() || osc.isExternalizable()) writeObject(osc.getSuper());