Package org.jibx.binding
Class Loader
- java.lang.Object
-
- java.lang.ClassLoader
-
- java.security.SecureClassLoader
-
- java.net.URLClassLoader
-
- org.jibx.binding.Loader
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable
- Direct Known Subclasses:
Loader.NondelegatingLoader
public class Loader extends java.net.URLClassLoaderBinding classloader. This is intended to substitute for the System classloader (i.e., the one used for loading user classes). It first processes one or more binding definitions, caching the binary classes modified by the bindings. It then uses these modified forms of the classes when they're requested for loading.- Author:
- Dennis M. Sosnoski
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classLoader.NondelegatingLoaderVersion of bind-on-demand loader which will not delegate handling of classes included in the binding definition.
-
Field Summary
Fields Modifier and Type Field Description private java.util.ArrayListm_bindingsBinding definitions used by loader.private java.util.HashMapm_classMapMap of classes modified by binding.private booleanm_isBoundFlag for bindings compiled into class code.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.lang.ClassfindClass(java.lang.String name)Find and load class by name.static java.net.URL[]getClassPaths()Method builds an array of URL for items in the class path.protected booleanisBoundClass(java.lang.String name)Check if a class has been modified by a binding.voidloadBinding(java.lang.String fname, java.lang.String sname, java.io.InputStream is, java.net.URL url)Load binding definition.voidloadFileBinding(java.lang.String path)Load binding definition from file path.voidloadResourceBinding(java.lang.String path)Load binding definition from file path.voidprocessBindings()Process the binding definitions.voidreset()Reset loader information.-
Methods inherited from class java.net.URLClassLoader
addURL, close, definePackage, findResource, findResources, getPermissions, getResourceAsStream, getURLs, 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, getResource, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
-
-
-
Constructor Detail
-
Loader
public Loader(java.net.URL[] paths, java.lang.ClassLoader parent)Constructor with classpath URLs and parent classloader supplied. Sets up the paths for both actual classloading and finding classes to be bound.- Parameters:
paths- array of classpath URLsparent- classloader used for delegation loading
-
Loader
public Loader(java.net.URL[] paths)
Constructor with classpath URLs supplied. This uses the supplied classpaths, delegating directly to the parent classloader of the normal System classloader.- Parameters:
paths- array of classpath URLs
-
Loader
public Loader() throws java.net.MalformedURLExceptionDefault constructor. This reads the standard class path and uses it for locating classes used by the binding, delegating directly to the parent classloader of the normal System classloader.- Throws:
java.net.MalformedURLException- on error in classpath URLs
-
-
Method Detail
-
reset
public void reset()
Reset loader information. This discards all prior bindings and clears the internal state in preparation for loading a different set of bindings. It is not possible to clear the loaded classes, though, so any new bindings must refer to different classes from those previously loaded.
-
getClassPaths
public static java.net.URL[] getClassPaths() throws java.net.MalformedURLExceptionMethod builds an array of URL for items in the class path.- Returns:
- array of classpath URLs
- Throws:
java.net.MalformedURLException
-
loadBinding
public void loadBinding(java.lang.String fname, java.lang.String sname, java.io.InputStream is, java.net.URL url) throws JiBXException, java.io.IOExceptionLoad binding definition. This may be called multiple times to load multiple bindings, but only prior to the bindings being compiled. The reader form of the call is generally preferred, since the document encoding may not be properly interpreted from a stream.- Parameters:
fname- binding definition full namesname- short form of name to use as the default name of the bindingis- input stream for binding definition documenturl- URL for binding definition (nullif not available)- Throws:
java.lang.IllegalStateException- if called after bindings have been compiledjava.io.IOException- if error reading the bindingJiBXException- if error in processing the binding definition
-
loadFileBinding
public void loadFileBinding(java.lang.String path) throws JiBXException, java.io.IOExceptionLoad binding definition from file path. This may be called multiple times to load multiple bindings, but only prior to the bindings being compiled.- Parameters:
path- binding definition file path- Throws:
java.lang.IllegalStateException- if called after bindings have been compiledjava.io.IOException- if error reading the fileJiBXException- if error in processing the binding definition
-
loadResourceBinding
public void loadResourceBinding(java.lang.String path) throws JiBXException, java.io.IOExceptionLoad binding definition from file path. This may be called multiple times to load multiple bindings, but only prior to the bindings being compiled.- Parameters:
path- binding definition file path- Throws:
java.lang.IllegalStateException- if called after bindings have been compiledjava.io.IOException- if error reading the fileJiBXException- if error in processing the binding definition
-
processBindings
public void processBindings() throws JiBXExceptionProcess the binding definitions. This compiles the bindings into the classes, saving the modified classes for loading when needed.- Throws:
JiBXException- if error in processing the binding definition
-
isBoundClass
protected boolean isBoundClass(java.lang.String name)
Check if a class has been modified by a binding. If bindings haven't been compiled prior to this call they will be compiled automatically when this method is called.- Parameters:
name- fully qualified package and class name to be found- Returns:
trueif class modified by binding,falseif not
-
findClass
protected java.lang.Class findClass(java.lang.String name) throws java.lang.ClassNotFoundExceptionFind and load class by name. If the named class has been modified by a binding this loads the modified binary class; otherwise, it just uses the base class implementation to do the loading. If bindings haven't been compiled prior to this call they will be compiled automatically when this method is called.- Overrides:
findClassin classjava.net.URLClassLoader- Parameters:
name- fully qualified package and class name to be found- Returns:
- the loaded class
- Throws:
java.lang.ClassNotFoundException- if the class cannot be found- See Also:
ClassLoader.findClass(java.lang.String)
-
-