org.codehaus.classworlds
Class UberJarRealmClassLoader

java.lang.Object
  extended by java.lang.ClassLoader
      extended by java.security.SecureClassLoader
          extended by java.net.URLClassLoader
              extended by org.codehaus.classworlds.UberJarRealmClassLoader

public class UberJarRealmClassLoader
extends java.net.URLClassLoader

Classloader for ClassRealms.

Loads classes from an "uberjar".

Version:
$Id: UberJarRealmClassLoader.java 126 2006-01-12 04:17:51Z $
Author:
bob mcwhirter

Field Summary
protected  DefaultClassRealm realm
          The realm.
 
Constructor Summary
UberJarRealmClassLoader(DefaultClassRealm realm)
           
 
Method Summary
 void addConstituent(java.net.URL constituent)
          Add a constituent to this realm for locating classes.
protected  byte[] findClassInDirectoryUrl(java.net.URL url, java.lang.String path)
           
protected  byte[] findClassInJarStream(java.net.URL inUrl, java.lang.String path)
           
 java.net.URL findResource(java.lang.String name)
          Find a resource within this ClassLoader only (don't delegate to the parent).
protected  java.net.URL findResourceInDirectoryUrl(java.net.URL inUrl, java.lang.String path)
           
protected  java.net.URL findResourceInJarStream(java.net.URL inUrl, java.lang.String path)
           
 java.util.Enumeration findResources(java.lang.String name)
           
 java.util.Enumeration findResourcesDirect(java.lang.String name)
          Find resources from this ClassLoader, and don't search the realm.
 byte[] getBytesToEndOfStream(java.io.DataInputStream in)
          Helper method for addConstituent that reads in a DataInputStream and returns it as a byte[] It attempts to use in.available - the size of the file - else defaults to 2048
 java.net.URL getResource(java.lang.String name)
           
 java.net.URL getResourceDirect(java.lang.String name)
          Get a resource from this ClassLoader, and don't search the realm.
 java.net.URL[] getURLs()
          Retrieve the URLs used by this ClassLoader.
protected  java.lang.Class loadClass(java.lang.String name, boolean resolve)
          Load a class.
 java.lang.Class loadClassDirect(java.lang.String className)
          Load a class directly from this classloader without defering through any other ClassRealm.
 
Methods inherited from class java.net.URLClassLoader
addURL, definePackage, findClass, getPermissions, newInstance, newInstance
 
Methods inherited from class java.security.SecureClassLoader
defineClass, defineClass
 
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getPackage, getPackages, getParent, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

realm

protected DefaultClassRealm realm
The realm.

Constructor Detail

UberJarRealmClassLoader

public UberJarRealmClassLoader(DefaultClassRealm realm)
Method Detail

addConstituent

public void addConstituent(java.net.URL constituent)
Add a constituent to this realm for locating classes. If the url definition ends in .class its a BytesURLStreamHandler so use defineClass insead. addURL is still called for byte[] even though it has no affect and we use defineClass instead, this is for consistentency and to allow access to the class with getURLs()

Parameters:
constituent - URL to contituent jar or directory.

loadClassDirect

public java.lang.Class loadClassDirect(java.lang.String className)
                                throws java.lang.ClassNotFoundException
Load a class directly from this classloader without defering through any other ClassRealm.

Parameters:
className - The name of the class to load.
Returns:
The loaded class.
Throws:
java.lang.ClassNotFoundException - If the class could not be found.

findResource

public java.net.URL findResource(java.lang.String name)
Find a resource within this ClassLoader only (don't delegate to the parent).

Returns:
The resource.

findResourcesDirect

public java.util.Enumeration findResourcesDirect(java.lang.String name)
Find resources from this ClassLoader, and don't search the realm. Otherwise we'd recurse indefinitely.

Returns:
The resource.

findResourceInJarStream

protected java.net.URL findResourceInJarStream(java.net.URL inUrl,
                                               java.lang.String path)

findResourceInDirectoryUrl

protected java.net.URL findResourceInDirectoryUrl(java.net.URL inUrl,
                                                  java.lang.String path)

findClassInJarStream

protected byte[] findClassInJarStream(java.net.URL inUrl,
                                      java.lang.String path)

findClassInDirectoryUrl

protected byte[] findClassInDirectoryUrl(java.net.URL url,
                                         java.lang.String path)

getBytesToEndOfStream

public byte[] getBytesToEndOfStream(java.io.DataInputStream in)
                             throws java.io.IOException
Helper method for addConstituent that reads in a DataInputStream and returns it as a byte[] It attempts to use in.available - the size of the file - else defaults to 2048

Throws:
java.io.IOException

loadClass

protected java.lang.Class loadClass(java.lang.String name,
                                    boolean resolve)
                             throws java.lang.ClassNotFoundException
Load a class.

Overrides:
loadClass in class java.lang.ClassLoader
Parameters:
name - The name of the class to load.
resolve - If true then resolve the class.
Returns:
The loaded class.
Throws:
java.lang.ClassNotFoundException - If the class cannot be found.

getURLs

public java.net.URL[] getURLs()
Retrieve the URLs used by this ClassLoader.

Overrides:
getURLs in class java.net.URLClassLoader
Returns:
The urls.

getResource

public java.net.URL getResource(java.lang.String name)
Overrides:
getResource in class java.lang.ClassLoader

getResourceDirect

public java.net.URL getResourceDirect(java.lang.String name)
Get a resource from this ClassLoader, and don't search the realm. Otherwise we'd recurse indefinitely.

Returns:
The resource.

findResources

public java.util.Enumeration findResources(java.lang.String name)
                                    throws java.io.IOException
Overrides:
findResources in class java.net.URLClassLoader
Throws:
java.io.IOException