diff options
Diffstat (limited to 'java/io/ObjectOutputStream.java')
| -rw-r--r-- | java/io/ObjectOutputStream.java | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/java/io/ObjectOutputStream.java b/java/io/ObjectOutputStream.java index 545675952..33caa99c2 100644 --- a/java/io/ObjectOutputStream.java +++ b/java/io/ObjectOutputStream.java @@ -28,6 +28,9 @@ executable file might be covered by the GNU General Public License. */ 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; @@ -239,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); |
