1:
38:
39:
40: package ;
41:
42: import ;
43: import ;
44: import ;
45: import ;
46: import ;
47: import ;
48: import ;
49: import ;
50:
51: public class RMIObjectInputStream
52: extends ObjectInputStream {
53:
54: public RMIObjectInputStream(InputStream strm) throws IOException {
55: super(strm);
56: enableResolveObject(true);
57: }
58:
59: protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
60: String annotation = (String)getAnnotation();
61:
62: try {
63: if(annotation == null)
64: return (RMIClassLoader.loadClass(desc.getName()));
65: else
66: return (RMIClassLoader.loadClass(annotation, desc.getName()));
67: }
68: catch (MalformedURLException _) {
69: throw new ClassNotFoundException(desc.getName());
70: }
71: }
72:
73:
74: protected Object getAnnotation()
75: throws IOException, ClassNotFoundException
76: {
77: return readObject();
78: }
79:
80:
81: protected Class resolveProxyClass(String intfs[]) throws IOException,
82: ClassNotFoundException
83: {
84: String annotation = (String) getAnnotation();
85:
86: Class clss[] = new Class[intfs.length];
87:
88: for (int i = 0; i < intfs.length; i++)
89: {
90: if (annotation == null)
91: clss[i] = RMIClassLoader.loadClass(intfs[i]);
92: else
93: clss[i] = RMIClassLoader.loadClass(annotation, intfs[i]);
94: }
95:
96: ClassLoader loader;
97:
98: if (clss.length > 0)
99: {
100:
101: ArrayList loaders = new ArrayList(intfs.length);
102: ClassLoader cx;
103: for (int i = 0; i < clss.length; i++)
104: {
105: cx = clss[i].getClassLoader();
106: if (!loaders.contains(cx))
107: {
108: loaders.add(0, cx);
109: }
110: }
111: loader = new CombinedClassLoader(loaders);
112: }
113: else
114: loader = ClassLoader.getSystemClassLoader();
115:
116: try
117: {
118: return Proxy.getProxyClass(loader, clss);
119: }
120: catch (IllegalArgumentException e)
121: {
122: throw new ClassNotFoundException(null, e);
123: }
124: }
125:
126: protected Object readValue(Class valueClass) throws IOException, ClassNotFoundException {
127: if(valueClass.isPrimitive()){
128: if(valueClass == Boolean.TYPE)
129: return Boolean.valueOf(readBoolean());
130: if(valueClass == Byte.TYPE)
131: return new Byte(readByte());
132: if(valueClass == Character.TYPE)
133: return new Character(readChar());
134: if(valueClass == Short.TYPE)
135: return new Short(readShort());
136: if(valueClass == Integer.TYPE)
137: return new Integer(readInt());
138: if(valueClass == Long.TYPE)
139: return new Long(readLong());
140: if(valueClass == Float.TYPE)
141: return new Float(readFloat());
142: if(valueClass == Double.TYPE)
143: return new Double(readDouble());
144: else
145: throw new Error("Unsupported primitive class: " + valueClass);
146: } else
147: return readObject();
148: }
149:
150: }