From 8aca770e8d35da673d8eb49f99ed69d9e4077aca Mon Sep 17 00:00:00 2001 From: Jeroen Frijters Date: Thu, 17 Aug 2006 07:43:55 +0000 Subject: 2006-08-17 Jeroen Frijters * 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. --- gnu/java/rmi/server/RMIObjectInputStream.java | 61 +++++++-------------------- 1 file changed, 15 insertions(+), 46 deletions(-) (limited to 'gnu/java/rmi/server/RMIObjectInputStream.java') 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); } } -- cgit v1.2.1