diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-10-01 03:46:43 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-10-01 03:46:43 +0000 |
commit | 1834f2d6e707af5e33654167ac0b3844210764c3 (patch) | |
tree | bf757dbbf21b52fd568fba72014b0347b815ecdb /libjava/java/rmi/server/RemoteObject.java | |
parent | 52d972392150fc1a07734a90ba55586e7cee710b (diff) | |
download | ppe42-gcc-1834f2d6e707af5e33654167ac0b3844210764c3.tar.gz ppe42-gcc-1834f2d6e707af5e33654167ac0b3844210764c3.zip |
* java/io/ObjectInputStream.java (resolveProxyClass): New method
from Classpath.
* Makefile.in: Rebuilt.
* Makefile.am (rmi_java_source_files): Added new files.
* gnu/java/rmi/RMIMarshalledObjectInputStream.java,
gnu/java/rmi/RMIMarshalledObjectOutputStream.java,
gnu/java/rmi/server/ConnectionRunnerPool.java: New files from
Classpath.
* gnu/java/rmi/dgc/DGCImpl.java,
gnu/java/rmi/dgc/DGCImpl_Skel.java,
gnu/java/rmi/dgc/DGCImpl_Stub.java,
gnu/java/rmi/registry/RegistryImpl_Skel.java,
gnu/java/rmi/registry/RegistryImpl_Stub.java,
gnu/java/rmi/server/RMIHashes.java,
gnu/java/rmi/server/RMIObjectInputStream.java,
gnu/java/rmi/server/RMIObjectOutputStream.java,
gnu/java/rmi/server/UnicastConnection.java,
gnu/java/rmi/server/UnicastConnectionManager.java,
gnu/java/rmi/server/UnicastRef.java,
gnu/java/rmi/server/UnicastServer.java,
gnu/java/rmi/server/UnicastServerRef.java,
java/rmi/MarshalledObject.java,
java/rmi/server/RMIClassLoader.java,
java/rmi/server/RemoteObject.java,
java/rmi/server/UnicastRemoteObject.java,
java/security/SecureClassLoader.java: Merged from Classpath.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@57675 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/rmi/server/RemoteObject.java')
-rw-r--r-- | libjava/java/rmi/server/RemoteObject.java | 84 |
1 files changed, 57 insertions, 27 deletions
diff --git a/libjava/java/rmi/server/RemoteObject.java b/libjava/java/rmi/server/RemoteObject.java index e73dfc523df..8ae93ff8844 100644 --- a/libjava/java/rmi/server/RemoteObject.java +++ b/libjava/java/rmi/server/RemoteObject.java @@ -48,6 +48,7 @@ import java.io.IOException; import java.lang.ClassNotFoundException; import java.lang.InstantiationException; import java.lang.IllegalAccessException; +import java.lang.reflect.Constructor; public abstract class RemoteObject implements Remote, Serializable { @@ -68,9 +69,22 @@ public RemoteRef getRef() { return (ref); } -public static Remote toStub(Remote obj) throws NoSuchObjectException { - throw new Error("Not implemented"); -} + public static Remote toStub(Remote obj) throws NoSuchObjectException + { + Class cls = obj.getClass(); + String classname = cls.getName(); + ClassLoader cl = cls.getClassLoader(); + try + { + Class scls = cl.loadClass(classname + "_Stub"); + // JDK 1.2 stubs + Class[] stubprototype = new Class[] { RemoteRef.class }; + Constructor con = scls.getConstructor(stubprototype); + return (Remote)(con.newInstance(new Object[]{obj})); + } + catch (Exception e) {} + throw new NoSuchObjectException(obj.getClass().getName()); + } public int hashCode() { if (ref == null) { @@ -86,30 +100,46 @@ public boolean equals(Object obj) { return (this == obj); } -public String toString() { - return (ref.toString()); -} - -private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { - String cname = in.readUTF(); - if (!cname.equals("")) { - cname = RemoteRef.packagePrefix + '.' + cname; - try { - Class cls = Class.forName(cname); - ref = (RemoteRef)cls.newInstance(); - } - catch (InstantiationException e1) { - throw new UnmarshalException("failed to create ref"); - } - catch (IllegalAccessException e2) { - throw new UnmarshalException("failed to create ref"); - } - ref.readExternal(in); - } - else { - ref = (RemoteRef)in.readObject(); - } -} + public String toString() + { + if (ref == null) + return getClass ().toString (); + return (ref.toString ()); + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException + { + String cname = in.readUTF(); + if (!cname.equals("")) + { + if (cname.equals ("UnicastRef2")) + { + // hack for interoperating with JDK + cname = "UnicastRef"; + in.read (); //some unknown UnicastRef2 field + } + + cname = RemoteRef.packagePrefix + '.' + cname; + try + { + Class cls = Class.forName(cname); + ref = (RemoteRef)cls.newInstance(); + } + catch (InstantiationException e1) + { + throw new UnmarshalException("failed to create ref"); + } + catch (IllegalAccessException e2) + { + throw new UnmarshalException("failed to create ref"); + } + ref.readExternal(in); + } + else + { + ref = (RemoteRef)in.readObject(); + } + } private void writeObject(ObjectOutputStream out) throws IOException, ClassNotFoundException { if (ref == null) { |