PatchSet 4942 Date: 2004/07/12 03:40:55 Author: dalibor Branch: HEAD Tag: (none) Log: Resynced with GNU Classpath: serialization fixes
2004-07-11 Dalibor Topic <[EMAIL PROTECTED]> * libraries/javalib/java/io/ObjectInputStream.java, libraries/javalib/java/io/ObjectStreamClass.java: Resynced with GNU Classpath. 2004-07-10 Jeroen Frijters <[EMAIL PROTECTED]> * java/io/ObjectInputStream.java (readObject): Delegate instantation of Externalizable classes to ObjectStreamClass. * java/io/ObjectStreamClass.java (newInstance): New method to instantiate Externalizable (while ignoring the accessibility of the constructor). (constructor): New field to cache the constructor. Members: ChangeLog:1.2507->1.2508 libraries/javalib/java/io/ObjectInputStream.java:1.37->1.38 libraries/javalib/java/io/ObjectStreamClass.java:1.23->1.24 Index: kaffe/ChangeLog diff -u kaffe/ChangeLog:1.2507 kaffe/ChangeLog:1.2508 --- kaffe/ChangeLog:1.2507 Mon Jul 12 03:33:30 2004 +++ kaffe/ChangeLog Mon Jul 12 03:40:55 2004 @@ -14,6 +14,20 @@ 2004-07-11 Dalibor Topic <[EMAIL PROTECTED]> + * libraries/javalib/java/io/ObjectInputStream.java, + libraries/javalib/java/io/ObjectStreamClass.java: + Resynced with GNU Classpath. + + 2004-07-10 Jeroen Frijters <[EMAIL PROTECTED]> + + * java/io/ObjectInputStream.java (readObject): Delegate instantation + of Externalizable classes to ObjectStreamClass. + * java/io/ObjectStreamClass.java (newInstance): New method to + instantiate Externalizable (while ignoring the accessibility of + the constructor). (constructor): New field to cache the constructor. + +2004-07-11 Dalibor Topic <[EMAIL PROTECTED]> + * libraries/javalib/java/io/BufferedInputStream.java: Resynced with GNU Classpath. Index: kaffe/libraries/javalib/java/io/ObjectInputStream.java diff -u kaffe/libraries/javalib/java/io/ObjectInputStream.java:1.37 kaffe/libraries/javalib/java/io/ObjectInputStream.java:1.38 --- kaffe/libraries/javalib/java/io/ObjectInputStream.java:1.37 Thu Jun 3 21:57:05 2004 +++ kaffe/libraries/javalib/java/io/ObjectInputStream.java Mon Jul 12 03:40:58 2004 @@ -275,29 +275,7 @@ if (osc.realClassIsExternalizable) { - Externalizable obj = null; - - try - { - obj = (Externalizable)clazz.newInstance(); - } - catch (InstantiationException e) - { - throw new ClassNotFoundException - ("Instance of " + clazz + " could not be created"); - } - catch (IllegalAccessException e) - { - throw new ClassNotFoundException - ("Instance of " + clazz + " could not be created because class or " - + "zero-argument constructor is not accessible"); - } - catch (NoSuchMethodError e) - { - throw new ClassNotFoundException - ("Instance of " + clazz - + " could not be created because zero-argument constructor is not defined"); - } + Externalizable obj = osc.newInstance(); int handle = assignNewHandle(obj); Index: kaffe/libraries/javalib/java/io/ObjectStreamClass.java diff -u kaffe/libraries/javalib/java/io/ObjectStreamClass.java:1.23 kaffe/libraries/javalib/java/io/ObjectStreamClass.java:1.24 --- kaffe/libraries/javalib/java/io/ObjectStreamClass.java:1.23 Tue May 18 03:35:07 2004 +++ kaffe/libraries/javalib/java/io/ObjectStreamClass.java Mon Jul 12 03:40:58 2004 @@ -833,6 +833,54 @@ return fieldsArray; } + /** + * Returns a new instance of the Class this ObjectStreamClass corresponds + * to. + * Note that this should only be used for Externalizable classes. + * + * @return A new instance. + */ + Externalizable newInstance() throws InvalidClassException + { + synchronized(this) + { + if (constructor == null) + { + try + { + final Constructor c = clazz.getConstructor(new Class[0]); + + AccessController.doPrivileged(new PrivilegedAction() + { + public Object run() + { + c.setAccessible(true); + return null; + } + }); + + constructor = c; + } + catch(NoSuchMethodException x) + { + throw new InvalidClassException(clazz.getName(), + "No public zero-argument constructor"); + } + } + } + + try + { + return (Externalizable)constructor.newInstance(null); + } + catch(Throwable t) + { + throw (InvalidClassException) + new InvalidClassException(clazz.getName(), + "Unable to instantiate").initCause(t); + } + } + public static final ObjectStreamField[] NO_FIELDS = {}; private static Hashtable classLookupTable = new Hashtable(); @@ -862,6 +910,7 @@ boolean realClassIsExternalizable; ObjectStreamField[] fieldMapping; Class firstNonSerializableParent; + private Constructor constructor; // default constructor for Externalizable boolean isProxyClass = false; _______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe