diff options
Diffstat (limited to 'libjava/java/io')
-rw-r--r-- | libjava/java/io/ObjectInputStream.java | 36 | ||||
-rw-r--r-- | libjava/java/io/ObjectOutputStream.java | 27 | ||||
-rw-r--r-- | libjava/java/io/Replaceable.java | 54 | ||||
-rw-r--r-- | libjava/java/io/Resolvable.java | 52 |
4 files changed, 52 insertions, 117 deletions
diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java index 53353dc..c1d6d6c 100644 --- a/libjava/java/io/ObjectInputStream.java +++ b/libjava/java/io/ObjectInputStream.java @@ -1,5 +1,5 @@ /* ObjectInputStream.java -- Class used to read serialized objects - Copyright (C) 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -37,6 +37,7 @@ import gnu.java.io.ObjectIdentityWrapper; import gnu.java.lang.reflect.TypeSignature; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; @@ -189,7 +190,7 @@ public class ObjectInputStream extends InputStream { // DEBUG ("STRING "); String s = this.realInputStream.readUTF (); - ret_val = processResoultion (s, assignNewHandle (s)); + ret_val = processResolution (s, assignNewHandle (s)); break; } @@ -202,7 +203,7 @@ public class ObjectInputStream extends InputStream Object array = Array.newInstance (componenetType, length); int handle = assignNewHandle (array); readArrayElements (array, componenetType); - ret_val = processResoultion (array, handle); + ret_val = processResolution (array, handle); break; } @@ -250,7 +251,7 @@ public class ObjectInputStream extends InputStream if (read_from_blocks) setBlockDataMode (false); - ret_val = processResoultion (obj, handle); + ret_val = processResolution (obj, handle); break; } // end if (Externalizable.class.isAssignableFrom (clazz)) @@ -315,7 +316,7 @@ public class ObjectInputStream extends InputStream this.currentObject = null; this.currentObjectStreamClass = null; - ret_val = processResoultion (obj, handle); + ret_val = processResolution (obj, handle); break; } @@ -937,11 +938,30 @@ public class ObjectInputStream extends InputStream } - private Object processResoultion (Object obj, int handle) + private Object processResolution (Object obj, int handle) throws IOException { - if (obj instanceof Resolvable) - obj = ((Resolvable)obj).readResolve (); + if (obj instanceof Serializable) + { + Method m = null; + try + { + Class classArgs[] = {}; + m = obj.getClass ().getDeclaredMethod ("readResolve", classArgs); + // m can't be null by definition since an exception would + // have been thrown so a check for null is not needed. + obj = m.invoke (obj, new Object[] {}); + } + catch (NoSuchMethodException ignore) + { + } + catch (IllegalAccessException ignore) + { + } + catch (InvocationTargetException ignore) + { + } + } if (this.resolveEnabled) obj = resolveObject (obj); diff --git a/libjava/java/io/ObjectOutputStream.java b/libjava/java/io/ObjectOutputStream.java index 664b882..cd6202e 100644 --- a/libjava/java/io/ObjectOutputStream.java +++ b/libjava/java/io/ObjectOutputStream.java @@ -30,6 +30,7 @@ package java.io; import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; import java.util.Hashtable; import gnu.java.io.ObjectIdentityWrapper; @@ -241,13 +242,33 @@ public class ObjectOutputStream extends OutputStream Object replacedObject = null; - if ((replacementEnabled || obj instanceof Replaceable) + if ((replacementEnabled || obj instanceof Serializable) && ! replaceDone) { replacedObject = obj; - if (obj instanceof Replaceable) - obj = ((Replaceable)obj).writeReplace (); + if (obj instanceof Serializable) + { + Method m = null; + try + { + Class classArgs[] = {}; + m = obj.getClass ().getDeclaredMethod ("writeReplace", + classArgs); + // m can't be null by definition since an exception would + // have been thrown so a check for null is not needed. + obj = m.invoke (obj, new Object[] {}); + } + catch (NoSuchMethodException ignore) + { + } + catch (IllegalAccessException ignore) + { + } + catch (InvocationTargetException ignore) + { + } + } if (replacementEnabled) obj = replaceObject (obj); diff --git a/libjava/java/io/Replaceable.java b/libjava/java/io/Replaceable.java deleted file mode 100644 index 1035ab5..0000000 --- a/libjava/java/io/Replaceable.java +++ /dev/null @@ -1,54 +0,0 @@ -/* Replaceable.java -- Replace an object with another object - Copyright (C) 1998 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -02111-1307 USA. - -As a special exception, if you link this library with other files to -produce an executable, this library does not by itself cause the -resulting executable to be covered by the GNU General Public License. -This exception does not however invalidate any other reasons why the -executable file might be covered by the GNU General Public License. */ - - -package java.io; - -/** - * This interface is used to indicate that an object may want to have - * another object serialized instead of itself. It contains one method - * that is to be called when an object is to be serialized. That method - * is reponsible for returning the real object that should be serialized - * instead of object being queried. - * - * @version 0.0 - * - * @author Aaron M. Renn (arenn@urbanophile.com) - */ -public interface Replaceable extends Serializable -{ - -/** - * This method returns the object that should be serialized instead of - * this object - * - * @return The real object that should be serialized - */ -public abstract Object -writeReplace(); - -} // interface Replaceable - diff --git a/libjava/java/io/Resolvable.java b/libjava/java/io/Resolvable.java deleted file mode 100644 index b7250de6..0000000 --- a/libjava/java/io/Resolvable.java +++ /dev/null @@ -1,52 +0,0 @@ -/* Resolvable.java -- Returns an object to replace the one being de-serialized - Copyright (C) 1998 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -02111-1307 USA. - -As a special exception, if you link this library with other files to -produce an executable, this library does not by itself cause the -resulting executable to be covered by the GNU General Public License. -This exception does not however invalidate any other reasons why the -executable file might be covered by the GNU General Public License. */ - - -package java.io; - -/** - * This interface is implemented when an object wishes to return another - * object to replace it during de-serialization. It has one method that - * returns the object that should be used to replace the original object. - * - * @version 0.0 - * - * @author Aaron M. Renn (arenn@urbanophile.com) - */ -public interface Resolvable extends Serializable -{ - -/** - * This method returns the object that should be used to replace the - * original object during de-serialization. - * - * @return The replacement object - */ -public abstract Object -readResolve(); - -} // interface Resolvable - |