public class VFSClassLoader
extends java.security.SecureClassLoader
The search path can consist of VFS FileObjects referring both to folders and JAR files. Any FileObject of type FileType.FILE is assumed to be a JAR and is opened by creating a layered file system with the "jar" scheme.
TODO - Test this with signed Jars and a SecurityManager.
| Modifier and Type | Field and Description |
|---|---|
private java.util.ArrayList<FileObject> |
resources |
| Constructor and Description |
|---|
VFSClassLoader(FileObject[] files,
FileSystemManager manager)
Constructors a new VFSClassLoader for the given files.
|
VFSClassLoader(FileObject[] files,
FileSystemManager manager,
java.lang.ClassLoader parent)
Constructors a new VFSClassLoader for the given FileObjects.
|
VFSClassLoader(FileObject file,
FileSystemManager manager)
Constructors a new VFSClassLoader for the given file.
|
VFSClassLoader(FileObject file,
FileSystemManager manager,
java.lang.ClassLoader parent)
Constructors a new VFSClassLoader for the given file.
|
| Modifier and Type | Method and Description |
|---|---|
private void |
addFileObjects(FileSystemManager manager,
FileObject[] files)
Appends the specified FileObjects to the list of FileObjects to search for classes and resources.
|
protected void |
copyPermissions(java.security.PermissionCollection src,
java.security.PermissionCollection dest)
Copies the permissions from src to dest.
|
private java.lang.Class<?> |
defineClass(java.lang.String name,
Resource res)
Loads and verifies the class with name and located with res.
|
private java.lang.Package |
definePackage(java.lang.String name,
Resource res)
Reads attributes for the package and defines it.
|
protected java.lang.Class<?> |
findClass(java.lang.String name)
Finds and loads the class with the specified name from the search path.
|
protected java.net.URL |
findResource(java.lang.String name)
Finds the resource with the specified name from the search path.
|
protected java.util.Enumeration<java.net.URL> |
findResources(java.lang.String name)
Returns an Enumeration of all the resources in the search path with the specified name.
|
FileObject[] |
getFileObjects()
Provide access to the file objects this class loader represents.
|
protected java.security.PermissionCollection |
getPermissions(java.security.CodeSource cs)
Calls super.getPermissions both for the code source and also adds the permissions granted to the parent layers.
|
private boolean |
isSealed(Resource res)
Returns true if the we should seal the package where res resides.
|
private Resource |
loadResource(java.lang.String name)
Searches through the search path of for the first class or resource with specified name.
|
private FileObject |
lookupFileObject(java.lang.String name)
Does a reverse lookup to find the FileObject when we only have the URL.
|
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getClassLoadingLock, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSignersprivate final java.util.ArrayList<FileObject> resources
public VFSClassLoader(FileObject file, FileSystemManager manager) throws FileSystemException
file - the file to load the classes and resources from.manager - the FileManager to use when trying create a layered Jar file system.FileSystemException - if an error occurs.public VFSClassLoader(FileObject file, FileSystemManager manager, java.lang.ClassLoader parent) throws FileSystemException
file - the file to load the classes and resources from.manager - the FileManager to use when trying create a layered Jar file system.parent - the parent class loader for delegation.FileSystemException - if an error occurs.public VFSClassLoader(FileObject[] files, FileSystemManager manager) throws FileSystemException
files - the files to load the classes and resources from.manager - the FileManager to use when trying create a layered Jar file system.FileSystemException - if an error occurs.public VFSClassLoader(FileObject[] files, FileSystemManager manager, java.lang.ClassLoader parent) throws FileSystemException
files - the FileObjects to load the classes and resources from.manager - the FileManager to use when trying create a layered Jar file system.parent - the parent class loader for delegation.FileSystemException - if an error occurs.public FileObject[] getFileObjects()
private void addFileObjects(FileSystemManager manager, FileObject[] files) throws FileSystemException
manager - The FileSystemManager.files - the FileObjects to append to the search path.FileSystemException - if an error occurs.protected java.lang.Class<?> findClass(java.lang.String name)
throws java.lang.ClassNotFoundException
findClass in class java.lang.ClassLoaderjava.lang.ClassNotFoundException - if the class is not found.private java.lang.Class<?> defineClass(java.lang.String name,
Resource res)
throws java.io.IOException
java.io.IOExceptionprivate boolean isSealed(Resource res) throws FileSystemException
FileSystemExceptionprivate java.lang.Package definePackage(java.lang.String name,
Resource res)
throws FileSystemException
FileSystemExceptionprotected java.security.PermissionCollection getPermissions(java.security.CodeSource cs)
getPermissions in class java.security.SecureClassLoadercs - the CodeSource.protected void copyPermissions(java.security.PermissionCollection src,
java.security.PermissionCollection dest)
src - The source PermissionCollection.dest - The destination PermissionCollection.private FileObject lookupFileObject(java.lang.String name)
protected java.net.URL findResource(java.lang.String name)
findResource in class java.lang.ClassLoadername - The resource name.protected java.util.Enumeration<java.net.URL> findResources(java.lang.String name)
throws java.io.IOException
Gets called from ClassLoader.getResources(String) after parent class loader was questioned.
findResources in class java.lang.ClassLoadername - The resources to find.FileSystemException - if an error occurs.java.io.IOExceptionprivate Resource loadResource(java.lang.String name) throws FileSystemException
name - The resource to load.FileSystemException - if an error occurs.