aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/io
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/io')
-rw-r--r--libjava/java/io/ObjectInputStream.java36
-rw-r--r--libjava/java/io/ObjectOutputStream.java27
-rw-r--r--libjava/java/io/Replaceable.java54
-rw-r--r--libjava/java/io/Resolvable.java52
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
-