public class JarClassLoader
extends java.lang.ClassLoader
Modifier and Type | Field and Description |
---|---|
private java.util.Map<java.lang.String,org.apache.bcel.classfile.JavaClass> |
bcelClasses
The classes loaded from this jar using BCEL.
|
private java.util.Map<java.lang.String,java.lang.Class<?>> |
classes
The classes loaded from this jar.
|
private java.util.jar.JarFile |
jar
The jar file.
|
private java.lang.String |
jarName
The jar name, including path.
|
private static java.util.logging.Logger |
LOG
logger
|
private java.util.Set<java.lang.String> |
resources
The resources contained in this jar.
|
private java.util.Map<java.lang.String,java.lang.String> |
resourcesNoCase
The resources contained in this jar.
|
Constructor and Description |
---|
JarClassLoader(java.lang.String jarName,
java.lang.ClassLoader parent)
Initiate a new jar classloader instance, setting its parent classloader
to the given instance.
|
Modifier and Type | Method and Description |
---|---|
private java.lang.String |
classNameToResource(java.lang.String name)
Convert the fully-qualified class name to resource name.
|
boolean |
closeLoader()
Closes this class loader, by closing the jar handle.
|
boolean |
containsClass(java.lang.String className)
Check if the given class is handled by this jar class loader (i.e.
|
boolean |
containsResource(java.lang.String name)
Check if the given resource belongs to this jar.
|
java.net.URL |
findResource(java.lang.String resName)
Finds the resource with the given name.
|
java.lang.String |
getJarName()
Get the
jar name . |
java.lang.String |
getResourceName(java.lang.String name,
boolean caseSens)
Check if the given resource belongs to this jar.
|
boolean |
init()
Initiatilize this classloader, by opening the jar file and saving all
its resources into the
resources set. |
ClassInfo[] |
listClasses()
Loads class information for all classes handled by this jar, without
initiating them (i.e.
|
java.lang.Class<?> |
loadClass(java.lang.String name)
Loads the class with the specified binary name.
|
ClassInfo |
loadClassInfo(java.lang.String name)
Loads the class information for the class with the specified
binary name.
|
private ClassInfo |
loadClassInfo(java.lang.String name,
ClassInfo classInfo)
Loads the class information for the class with the specified
binary name.
|
private java.lang.String |
resourceToClassName(java.lang.String resource)
Convert the resource name to fully-qualified class name.
|
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResources, findSystemClass, getClassLoadingLock, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
private static final java.util.logging.Logger LOG
private final java.util.Set<java.lang.String> resources
private final java.util.Map<java.lang.String,java.lang.String> resourcesNoCase
private final java.util.Map<java.lang.String,java.lang.Class<?>> classes
private java.util.Map<java.lang.String,org.apache.bcel.classfile.JavaClass> bcelClasses
private final java.lang.String jarName
private java.util.jar.JarFile jar
public JarClassLoader(java.lang.String jarName, java.lang.ClassLoader parent)
jarName
- The jar name, including path.parent
- The parent classloader.public boolean init()
resources
set.true
if the jar was initialized, else
false
.public java.lang.String getJarName()
jar name
.public boolean containsClass(java.lang.String className)
className
- The fully qualified class name.true
if the class belongs to this class loader.public boolean containsResource(java.lang.String name)
name
- The fully qualified resource name.true
if the resource belongs to this jar.public java.lang.String getResourceName(java.lang.String name, boolean caseSens)
name
- The fully qualified resource name.caseSens
- The flag to control case sensitivity while searching.null
if not found.public java.net.URL findResource(java.lang.String resName)
findResource
in class java.lang.ClassLoader
resName
- The resource namepublic java.lang.Class<?> loadClass(java.lang.String name) throws java.lang.ClassNotFoundException
ClassLoader.loadClass(String, boolean)
method. It is invoked by the Java virtual
machine to resolve class references. Invoking this method is equivalent
to invoking loadClass(name,
false)
.loadClass
in class java.lang.ClassLoader
name
- The binary name of the classjava.lang.ClassNotFoundException
- If the class was not foundpublic ClassInfo loadClassInfo(java.lang.String name) throws java.lang.ClassNotFoundException
name
- The binary name of the classjava.lang.ClassNotFoundException
- If the class itself (not a superclass of it) was not found or
an error occurred while reading bytecode.public boolean closeLoader()
true
if the class loader was closed.public ClassInfo[] listClasses()
private java.lang.String classNameToResource(java.lang.String name)
/
char and adding the
".class" suffix.name
- The fully-qualified class name.private java.lang.String resourceToClassName(java.lang.String resource)
/
chars with dots with and removing
trailing ".class" suffix.resource
- Resource name.private ClassInfo loadClassInfo(java.lang.String name, ClassInfo classInfo) throws java.lang.ClassNotFoundException
name
- The binary name of the class to be loaded.classInfo
- ClassInfo object that stores definitions of already
loaded child classes. null
if it is the first
class in hierarchy we are trying to load.java.lang.ClassNotFoundException
- If the first class in hierarchy we are trying to load was not
found or an error occurred while reading bytecode.