aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/rmi
diff options
context:
space:
mode:
authormkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>2003-10-09 15:20:25 +0000
committermkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>2003-10-09 15:20:25 +0000
commitdc1ceee2b63ef40d3fb468cc52cbd9b2577331e1 (patch)
tree64e5408be7d1bc5085e67e4101c470e358bb484f /libjava/java/rmi
parent345bce788885d518ae049edfa577cfb8c2111290 (diff)
2003-10-09 Michael Koch <konqueror@gmx.de>
* java/rmi/server/RMIClassLoader.java: Removed unused imports, little reformatings. (getClassLoader): New method, implementation was part of old loadCLass method. (loadClass): Simplified by moving functionality to new method and reworking the code a bit. (getClassAnnotation): Merged documentation from classpath. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72267 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/rmi')
-rw-r--r--libjava/java/rmi/server/RMIClassLoader.java154
1 files changed, 95 insertions, 59 deletions
diff --git a/libjava/java/rmi/server/RMIClassLoader.java b/libjava/java/rmi/server/RMIClassLoader.java
index 20dd7f6384b..c6187983eb1 100644
--- a/libjava/java/rmi/server/RMIClassLoader.java
+++ b/libjava/java/rmi/server/RMIClassLoader.java
@@ -40,17 +40,11 @@ package java.rmi.server;
import java.net.MalformedURLException;
import java.net.URL;
-import java.net.URLConnection;
import java.net.URLClassLoader;
-import java.io.IOException;
-import java.io.DataInputStream;
import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
import java.util.Hashtable;
import java.util.Map;
import java.util.StringTokenizer;
-import java.util.WeakHashMap;
/**
@@ -106,6 +100,7 @@ public class RMIClassLoader
//defaultAnnotation is got from system property
// "java.rmi.server.defaultAnnotation"
private static String defaultAnnotation;
+
//URL object for defaultAnnotation
private static URL defaultCodebase;
@@ -121,19 +116,19 @@ public class RMIClassLoader
defaultAnnotation = System.getProperty ("java.rmi.server.defaultAnnotation");
try
- {
- if (defaultAnnotation != null)
- defaultCodebase = new URL (defaultAnnotation);
- }
+ {
+ if (defaultAnnotation != null)
+ defaultCodebase = new URL (defaultAnnotation);
+ }
catch (Exception _)
- {
- defaultCodebase = null;
- }
+ {
+ defaultCodebase = null;
+ }
if (defaultCodebase != null)
{
- defaultLoader = new MyClassLoader(new URL[]{ defaultCodebase },
- null, defaultAnnotation);
+ defaultLoader = new MyClassLoader (new URL[] { defaultCodebase }, null,
+ defaultAnnotation);
cacheLoaders.put(defaultAnnotation, defaultLoader);
}
}
@@ -150,49 +145,87 @@ public class RMIClassLoader
public static Class loadClass (String codebases, String name)
throws MalformedURLException, ClassNotFoundException
{
- Class c = null;
ClassLoader loader = Thread.currentThread().getContextClassLoader();
//try context class loader first
try
{
- c = loader.loadClass(name);
+ return loader.loadClass (name);
+ }
+ catch (ClassNotFoundException e)
+ {
+ // class not found in the local classpath
}
- catch(ClassNotFoundException e) {}
-
- if (c != null)
- return c;
if (codebases.length() == 0) //==""
- loader = defaultLoader;
- else
{
- loader = (ClassLoader)cacheLoaders.get(codebases);
- if (loader == null)
- {
- //create an entry in cacheLoaders mapping a loader to codebases.
-
- // codebases are separated by " "
- StringTokenizer tok = new StringTokenizer(codebases, " ");
- ArrayList urls = new ArrayList();
- while (tok.hasMoreTokens())
- urls.add(new URL(tok.nextToken()));
-
- loader = new MyClassLoader((URL[])urls.toArray(new URL[urls.size()]),
- null, codebases);
- cacheLoaders.put(codebases, loader);
- }
+ loader = defaultLoader;
+ }
+ else
+ {
+ loader = getClassLoader(codebases);
+ }
+
+ if (loader == null)
+ {
+ //do not throw NullPointerException
+ throw new ClassNotFoundException ("Could not find class (" + name +
+ ") at codebase (" + codebases + ")");
}
+
+ return loader.loadClass (name);
+ }
- return loader.loadClass(name);
+ /**
+ * Gets a classloader for the given codebase and with the current
+ * context classloader as parent.
+ *
+ * @param codebases
+ *
+ * @return a classloader for the given codebase
+ *
+ * @throws MalformedURLException if the codebase contains a malformed URL
+ */
+ private static ClassLoader getClassLoader (String codebases)
+ throws MalformedURLException
+ {
+ ClassLoader loader = (ClassLoader) cacheLoaders.get (codebases);
+
+ if (loader == null)
+ {
+ //create an entry in cacheLoaders mapping a loader to codebases.
+ // codebases are separated by " "
+ StringTokenizer tok = new StringTokenizer (codebases, " ");
+ ArrayList urls = new ArrayList();
+
+ while (tok.hasMoreTokens())
+ urls.add (new URL (tok.nextToken()));
+
+ loader = new MyClassLoader ((URL[]) urls.toArray (new URL [urls.size()]),
+ null, codebases);
+ cacheLoaders.put (codebases, loader);
+ }
+
+ return loader;
}
-
- public static String getClassAnnotation(Class cl)
+
+ /**
+ * Returns a string representation of the network location where a remote
+ * endpoint can get the class-definition of the given class.
+ *
+ * @param cl
+ *
+ * @return a space seperated list of URLs where the class-definition
+ * of cl may be found
+ */
+ public static String getClassAnnotation (Class cl)
{
ClassLoader loader = cl.getClassLoader();
- if (loader == null || loader == ClassLoader.getSystemClassLoader())
+
+ if (loader == null
+ || loader == ClassLoader.getSystemClassLoader())
{
- return null; //??
+ return System.getProperty ("java.rmi.server.codebase");
}
if (loader instanceof MyClassLoader)
@@ -203,26 +236,29 @@ public class RMIClassLoader
String s = (String) cacheAnnotations.get (loader);
if (s != null)
- {
- return s;
- }
+ return s;
if (loader instanceof URLClassLoader)
{
- URL[] urls = ((URLClassLoader)loader).getURLs();
- if(urls.length == 0)
- return null;
-
- StringBuffer annotation = new StringBuffer(64*urls.length);
- for(int i = 0; i < urls.length; i++)
- {
- annotation.append(urls[i].toExternalForm());
- annotation.append(' ');
- }
- s = annotation.toString();
- cacheAnnotations.put(loader, s);
+ URL[] urls = ((URLClassLoader) loader).getURLs();
+
+ if (urls.length == 0)
+ return null;
+
+ StringBuffer annotation = new StringBuffer (64 * urls.length);
+
+ for (int i = 0; i < urls.length; i++)
+ {
+ annotation.append (urls [i].toExternalForm());
+ annotation.append (' ');
+ }
+
+ s = annotation.toString();
+ cacheAnnotations.put (loader, s);
+ return s;
}
- return null;
+
+ return System.getProperty ("java.rmi.server.codebase");
}
/**