Package org.codehaus.classworlds
Class UberJarRealmClassLoader
- java.lang.Object
-
- java.lang.ClassLoader
-
- java.security.SecureClassLoader
-
- java.net.URLClassLoader
-
- org.codehaus.classworlds.RealmClassLoader
-
- org.codehaus.classworlds.UberJarRealmClassLoader
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
public class UberJarRealmClassLoader extends RealmClassLoader
Classloader forClassRealm
s. Loads classes from an "uberjar".- Version:
- $Id: UberJarRealmClassLoader.java 126 2006-01-12 04:17:51Z $
- Author:
- bob mcwhirter
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map
classIndex
private java.util.Map
jarIndexes
private java.util.List
urls
-
Fields inherited from class org.codehaus.classworlds.RealmClassLoader
realm
-
-
Constructor Summary
Constructors Constructor Description UberJarRealmClassLoader(DefaultClassRealm realm)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addConstituent(java.net.URL constituent)
Add a constituent to this realm for locating classes.private void
buildIndexForJar(java.net.URL inUrl)
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
findResourcesDirect(java.lang.String name)
Find resources from this ClassLoader, and don't search the realm.java.lang.Class
loadClassDirect(java.lang.String className)
Load a class directly from this classloader without defering through any otherClassRealm
.private byte[]
readStream(java.io.InputStream in)
-
Methods inherited from class org.codehaus.classworlds.RealmClassLoader
findResources, getBytesToEndOfStream, getRealm, getResource, getResourceDirect, getURLs, loadClass
-
Methods inherited from class java.net.URLClassLoader
addURL, close, definePackage, findClass, getPermissions, getResourceAsStream, newInstance, newInstance
-
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
-
-
-
Constructor Detail
-
UberJarRealmClassLoader
public UberJarRealmClassLoader(DefaultClassRealm realm)
-
-
Method Detail
-
addConstituent
public void addConstituent(java.net.URL constituent)
Description copied from class:RealmClassLoader
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()- Overrides:
addConstituent
in classRealmClassLoader
- Parameters:
constituent
- URL to contituent jar or directory.
-
buildIndexForJar
private void buildIndexForJar(java.net.URL inUrl)
-
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 otherClassRealm
.- Overrides:
loadClassDirect
in classRealmClassLoader
- 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)
Description copied from class:RealmClassLoader
Find a resource within this ClassLoader only (don't delegate to the parent).- Overrides:
findResource
in classRealmClassLoader
- Returns:
- The resource.
-
findResourcesDirect
public java.util.Enumeration findResourcesDirect(java.lang.String name)
Description copied from class:RealmClassLoader
Find resources from this ClassLoader, and don't search the realm. Otherwise we'd recurse indefinitely.- Overrides:
findResourcesDirect
in classRealmClassLoader
- 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)
-
readStream
private byte[] readStream(java.io.InputStream in) throws java.io.IOException
- Throws:
java.io.IOException
-
-