summaryrefslogtreecommitdiff
path: root/gnu/java/rmi/server/RMIObjectInputStream.java
diff options
context:
space:
mode:
authorJeroen Frijters <jeroen@sumatra.nl>2006-08-17 07:43:55 +0000
committerJeroen Frijters <jeroen@sumatra.nl>2006-08-17 07:43:55 +0000
commit8aca770e8d35da673d8eb49f99ed69d9e4077aca (patch)
tree3c06eb2998e4ce5973b4ba6643c0028eff458389 /gnu/java/rmi/server/RMIObjectInputStream.java
parent675e898a0056c41ccfc58afb5a2fa8eb6f680745 (diff)
downloadclasspath-8aca770e8d35da673d8eb49f99ed69d9e4077aca.tar.gz
2006-08-17 Jeroen Frijters <jeroen@frijters.net>
* gnu/java/rmi/server/RMIClassLoaderImpl.java (loadClass): Rewritten to use getClassLoader. (loadProxyClass): Implemented. (getClassLoader): Fixed support for null or empty codebase. * gnu/java/rmi/server/RMIObjectInputStream.java (resolveClass): Use user class loader as default class loader. (resolveProxyClass): Delegate to RMIClassLoader.loadProxyClass. * gnu/javax/rmi/CORBA/UtilDelegateImpl.java (loadClass): Simplified and use user class loader instead of context class loader as default. * java/io/ObjectInputStream.java (currentLoader): Use VMStackWalker.firstNonNullClassLoader(). * vm/reference/gnu/classpath/VMStackWalker.java (firstNonNullClassLoader): New method. * vm/reference/java/io/VMObjectInputStream.java (loaderAction, currentClassLoader): Removed.
Diffstat (limited to 'gnu/java/rmi/server/RMIObjectInputStream.java')
-rw-r--r--gnu/java/rmi/server/RMIObjectInputStream.java61
1 files changed, 15 insertions, 46 deletions
diff --git a/gnu/java/rmi/server/RMIObjectInputStream.java b/gnu/java/rmi/server/RMIObjectInputStream.java
index e76535447..75f4f1202 100644
--- a/gnu/java/rmi/server/RMIObjectInputStream.java
+++ b/gnu/java/rmi/server/RMIObjectInputStream.java
@@ -1,5 +1,5 @@
/* RMIObjectInputStream.java --
- Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004
+ Copyright (c) 1996, 1997, 1998, 1999, 2002, 2004, 2006
Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -39,11 +39,11 @@ exception statement from your version. */
package gnu.java.rmi.server;
+import gnu.classpath.VMStackWalker;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
-import java.lang.reflect.Proxy;
import java.net.MalformedURLException;
import java.rmi.server.RMIClassLoader;
import java.util.ArrayList;
@@ -57,16 +57,14 @@ public RMIObjectInputStream(InputStream strm) throws IOException {
}
protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
- String annotation = (String)getAnnotation();
-
try {
- if(annotation == null)
- return (RMIClassLoader.loadClass(desc.getName()));
- else
- return (RMIClassLoader.loadClass(annotation, desc.getName()));
+ return RMIClassLoader.loadClass(
+ (String)getAnnotation(),
+ desc.getName(),
+ VMStackWalker.firstNonNullClassLoader());
}
- catch (MalformedURLException _) {
- throw new ClassNotFoundException(desc.getName());
+ catch (MalformedURLException x) {
+ throw new ClassNotFoundException(desc.getName(), x);
}
}
@@ -81,45 +79,16 @@ protected Object getAnnotation()
protected Class resolveProxyClass(String intfs[]) throws IOException,
ClassNotFoundException
{
- String annotation = (String) getAnnotation();
-
- Class clss[] = new Class[intfs.length];
-
- for (int i = 0; i < intfs.length; i++)
- {
- if (annotation == null)
- clss[i] = RMIClassLoader.loadClass(intfs[i]);
- else
- clss[i] = RMIClassLoader.loadClass(annotation, intfs[i]);
- }
-
- ClassLoader loader;
-
- if (clss.length > 0)
- {
- // Chain all class loaders (they may differ).
- ArrayList loaders = new ArrayList(intfs.length);
- ClassLoader cx;
- for (int i = 0; i < clss.length; i++)
- {
- cx = clss[i].getClassLoader();
- if (!loaders.contains(cx))
- {
- loaders.add(0, cx);
- }
- }
- loader = new CombinedClassLoader(loaders);
- }
- else
- loader = ClassLoader.getSystemClassLoader();
-
- try
+ try
{
- return Proxy.getProxyClass(loader, clss);
+ return RMIClassLoader.loadProxyClass(
+ (String)getAnnotation(),
+ intfs,
+ VMStackWalker.firstNonNullClassLoader());
}
- catch (IllegalArgumentException e)
+ catch (MalformedURLException x)
{
- throw new ClassNotFoundException(null, e);
+ throw new ClassNotFoundException(null, x);
}
}