Package org.apache.commons.vfs2.impl
Class VFSClassLoader
java.lang.Object
java.lang.ClassLoader
java.security.SecureClassLoader
org.apache.commons.vfs2.impl.VFSClassLoader
A class loader that can load classes and resources from a search path.
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.
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionVFSClassLoader
(FileObject[] files, FileSystemManager manager) Constructors a new VFSClassLoader for the given files.VFSClassLoader
(FileObject[] files, FileSystemManager manager, 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, ClassLoader parent) Constructors a new VFSClassLoader for the given file. -
Method Summary
Modifier and TypeMethodDescriptionprivate void
addFileObjects
(FileSystemManager manager, FileObject[] files) Appends the specified FileObjects to the list of FileObjects to search for classes and resources.protected void
Copies the permissions from src to dest.private Class<?>
defineClass
(String name, Resource res) Loads and verifies the class with name and located with res.private Package
definePackage
(String name, Resource res) Reads attributes for the package and defines it.protected Class<?>
Finds and loads the class with the specified name from the search path.protected URL
findResource
(String name) Finds the resource with the specified name from the search path.protected Enumeration<URL>
findResources
(String name) Returns an Enumeration of all the resources in the search path with the specified name.Provide access to the file objects this class loader represents.protected PermissionCollection
Calls super.getPermissions both for the code source and also adds the permissions granted to the parent layers.private boolean
Returns true if the we should seal the package where res resides.private Resource
loadResource
(String name) Searches through the search path of for the first class or resource with specified name.private FileObject
lookupFileObject
(String name) Does a reverse lookup to find the FileObject when we only have the URL.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, getClassLoadingLock, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
Field Details
-
resources
-
-
Constructor Details
-
VFSClassLoader
Constructors a new VFSClassLoader for the given file.- Parameters:
file
- the file to load the classes and resources from.manager
- the FileManager to use when trying create a layered Jar file system.- Throws:
FileSystemException
- if an error occurs.
-
VFSClassLoader
public VFSClassLoader(FileObject file, FileSystemManager manager, ClassLoader parent) throws FileSystemException Constructors a new VFSClassLoader for the given file.- Parameters:
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.- Throws:
FileSystemException
- if an error occurs.
-
VFSClassLoader
Constructors a new VFSClassLoader for the given files. The files will be searched in the order specified.- Parameters:
files
- the files to load the classes and resources from.manager
- the FileManager to use when trying create a layered Jar file system.- Throws:
FileSystemException
- if an error occurs.
-
VFSClassLoader
public VFSClassLoader(FileObject[] files, FileSystemManager manager, ClassLoader parent) throws FileSystemException Constructors a new VFSClassLoader for the given FileObjects. The FileObjects will be searched in the order specified.- Parameters:
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.- Throws:
FileSystemException
- if an error occurs.
-
-
Method Details
-
getFileObjects
Provide access to the file objects this class loader represents.- Returns:
- An array of FileObjects.
- Since:
- 2.0
-
addFileObjects
private void addFileObjects(FileSystemManager manager, FileObject[] files) throws FileSystemException Appends the specified FileObjects to the list of FileObjects to search for classes and resources.- Parameters:
manager
- The FileSystemManager.files
- the FileObjects to append to the search path.- Throws:
FileSystemException
- if an error occurs.
-
findClass
Finds and loads the class with the specified name from the search path.- Overrides:
findClass
in classClassLoader
- Throws:
ClassNotFoundException
- if the class is not found.
-
defineClass
Loads and verifies the class with name and located with res.- Throws:
IOException
-
isSealed
Returns true if the we should seal the package where res resides.- Throws:
FileSystemException
-
definePackage
Reads attributes for the package and defines it.- Throws:
FileSystemException
-
getPermissions
Calls super.getPermissions both for the code source and also adds the permissions granted to the parent layers.- Overrides:
getPermissions
in classSecureClassLoader
- Parameters:
cs
- the CodeSource.- Returns:
- The PermissionCollections.
-
copyPermissions
Copies the permissions from src to dest.- Parameters:
src
- The source PermissionCollection.dest
- The destination PermissionCollection.
-
lookupFileObject
Does a reverse lookup to find the FileObject when we only have the URL. -
findResource
Finds the resource with the specified name from the search path. This returns null if the resource is not found.- Overrides:
findResource
in classClassLoader
- Parameters:
name
- The resource name.- Returns:
- The URL that matches the resource.
-
findResources
Returns an Enumeration of all the resources in the search path with the specified name.Gets called from
ClassLoader.getResources(String)
after parent class loader was questioned.- Overrides:
findResources
in classClassLoader
- Parameters:
name
- The resources to find.- Returns:
- An Enumeration of the resources associated with the name.
- Throws:
FileSystemException
- if an error occurs.IOException
-
loadResource
Searches through the search path of for the first class or resource with specified name.- Parameters:
name
- The resource to load.- Returns:
- The Resource.
- Throws:
FileSystemException
- if an error occurs.
-