source: trunk/gcc/libjava/java/rmi/server/RemoteObject.java

Last change on this file was 1392, checked in by bird, 21 years ago

This commit was generated by cvs2svn to compensate for changes in r1391,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 4.4 KB
Line 
1/*
2 Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
3
4This file is part of GNU Classpath.
5
6GNU Classpath is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2, or (at your option)
9any later version.
10
11GNU Classpath is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU Classpath; see the file COPYING. If not, write to the
18Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
1902111-1307 USA.
20
21Linking this library statically or dynamically with other modules is
22making a combined work based on this library. Thus, the terms and
23conditions of the GNU General Public License cover the whole
24combination.
25
26As a special exception, the copyright holders of this library give you
27permission to link this library with independent modules to produce an
28executable, regardless of the license terms of these independent
29modules, and to copy and distribute the resulting executable under
30terms of your choice, provided that you also meet, for each linked
31independent module, the terms and conditions of the license of that
32module. An independent module is a module which is not derived from
33or based on this library. If you modify this library, you may extend
34this exception to your version of the library, but you are not
35obligated to do so. If you do not wish to do so, delete this
36exception statement from your version. */
37
38package java.rmi.server;
39
40import java.io.Serializable;
41import java.rmi.Remote;
42import java.rmi.NoSuchObjectException;
43import java.rmi.UnmarshalException;
44import java.rmi.server.RemoteRef;
45import java.io.ObjectInputStream;
46import java.io.ObjectOutputStream;
47import java.io.IOException;
48import java.lang.ClassNotFoundException;
49import java.lang.InstantiationException;
50import java.lang.IllegalAccessException;
51import java.lang.reflect.Constructor;
52
53public abstract class RemoteObject
54 implements Remote, Serializable {
55
56public static final long serialVersionUID = -3215090123894869218l;
57
58protected transient RemoteRef ref;
59
60protected RemoteObject() {
61 this(null);
62}
63
64protected RemoteObject(RemoteRef newref) {
65 ref = newref;
66}
67
68public RemoteRef getRef() {
69 return (ref);
70}
71
72 public static Remote toStub(Remote obj) throws NoSuchObjectException
73 {
74 Class cls = obj.getClass();
75 String classname = cls.getName();
76 ClassLoader cl = cls.getClassLoader();
77 try
78 {
79 Class scls = cl.loadClass(classname + "_Stub");
80 // JDK 1.2 stubs
81 Class[] stubprototype = new Class[] { RemoteRef.class };
82 Constructor con = scls.getConstructor(stubprototype);
83 return (Remote)(con.newInstance(new Object[]{obj}));
84 }
85 catch (Exception e) {}
86 throw new NoSuchObjectException(obj.getClass().getName());
87 }
88
89public int hashCode() {
90 if (ref == null) {
91 return (0);
92 }
93 else {
94 return (ref.hashCode());
95 }
96}
97
98public boolean equals(Object obj) {
99 // We only compare references.
100 return (this == obj);
101}
102
103 public String toString()
104 {
105 if (ref == null)
106 return getClass ().toString ();
107 return (ref.toString ());
108 }
109
110 private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
111 {
112 String cname = in.readUTF();
113 if (!cname.equals(""))
114 {
115 if (cname.equals ("UnicastRef2"))
116 {
117 // hack for interoperating with JDK
118 cname = "UnicastRef";
119 in.read (); //some unknown UnicastRef2 field
120 }
121
122 cname = RemoteRef.packagePrefix + '.' + cname;
123 try
124 {
125 Class cls = Class.forName(cname);
126 ref = (RemoteRef)cls.newInstance();
127 }
128 catch (InstantiationException e1)
129 {
130 throw new UnmarshalException("failed to create ref", e1);
131 }
132 catch (IllegalAccessException e2)
133 {
134 throw new UnmarshalException("failed to create ref", e2);
135 }
136 ref.readExternal(in);
137 }
138 else
139 {
140 ref = (RemoteRef)in.readObject();
141 }
142 }
143
144private void writeObject(ObjectOutputStream out) throws IOException, ClassNotFoundException {
145 if (ref == null) {
146 throw new UnmarshalException("no ref to serialize");
147 }
148 String cname = ref.getRefClass(out);
149 if (cname != null && cname.length() > 0) {
150 out.writeUTF(cname);
151 ref.writeExternal(out);
152 }
153 else {
154 out.writeUTF("");
155 out.writeObject(ref);
156 }
157}
158
159}
Note: See TracBrowser for help on using the repository browser.