Class OSGiWebappClassLoader
- java.lang.Object
-
- java.lang.ClassLoader
-
- java.security.SecureClassLoader
-
- java.net.URLClassLoader
-
- org.eclipse.jetty.webapp.WebAppClassLoader
-
- org.eclipse.jetty.osgi.boot.internal.webapp.OSGiWebappClassLoader
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
,ClassVisibilityChecker
,org.osgi.framework.BundleReference
public class OSGiWebappClassLoader extends WebAppClassLoader implements org.osgi.framework.BundleReference
OSGiWebappClassLoader Extends the webapp classloader to also use the classloader of the Bundle defining the webapp.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.eclipse.jetty.webapp.WebAppClassLoader
WebAppClassLoader.Context
-
-
Field Summary
Fields Modifier and Type Field Description static java.util.Set<java.lang.String>
JAR_WITH_SUCH_CLASS_MUST_BE_EXCLUDED
when a logging framework is setup in the osgi classloaders, it can access this and register the classes that must not be found in the jar.
-
Constructor Summary
Constructors Constructor Description OSGiWebappClassLoader(java.lang.ClassLoader parent, WebAppContext context, org.osgi.framework.Bundle contributor)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addClassPath(java.lang.String classPath)
Parse the classpath ourselves to be able to filter things.static void
addClassThatIdentifiesAJarThatMustBeRejected(java.lang.Class<?> zclass)
static void
addClassThatIdentifiesAJarThatMustBeRejected(java.lang.String zclassName)
protected java.lang.Class<?>
findClass(java.lang.String name)
java.net.URL
findResource(java.lang.String name)
org.osgi.framework.Bundle
getBundle()
Returns theBundle
that defined this web-application.java.net.URL
getResource(java.lang.String name)
Get a resource from the classloader NOTE: this method provides a convenience of hacking off a leading / should one be present.java.util.Enumeration<java.net.URL>
getResources(java.lang.String name)
protected java.lang.Class<?>
loadAsResource(java.lang.String name, boolean checkSystemResource)
Try to load the class from the bundle classloader.void
setWebappContext(WebAppContext webappContext)
In the case of the generation of a webapp via a jetty context file we need a proper classloader to setup the app before we have the WebappContext So we place a fake one there to start with.-
Methods inherited from class org.eclipse.jetty.webapp.WebAppClassLoader
addClassFileTransformer, addClassPath, addJars, addTransformer, close, foundClass, getContext, getName, getPermissions, isServerClass, isSystemClass, loadClass, removeClassFileTransformer, removeTransformer, runWithServerClassAccess, setName, toString
-
Methods inherited from class java.net.URLClassLoader
addURL, definePackage, findResources, 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, getPackage, getPackages, getParent, getPlatformClassLoader, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
-
-
-
Constructor Detail
-
OSGiWebappClassLoader
public OSGiWebappClassLoader(java.lang.ClassLoader parent, WebAppContext context, org.osgi.framework.Bundle contributor) throws java.io.IOException
- Parameters:
parent
- The parent classloader.context
- The WebAppContextcontributor
- The bundle that defines this web-application.- Throws:
java.io.IOException
- if unable to cerate the OSGiWebappClassLoader
-
-
Method Detail
-
addClassThatIdentifiesAJarThatMustBeRejected
public static void addClassThatIdentifiesAJarThatMustBeRejected(java.lang.Class<?> zclass)
-
addClassThatIdentifiesAJarThatMustBeRejected
public static void addClassThatIdentifiesAJarThatMustBeRejected(java.lang.String zclassName)
-
findClass
protected java.lang.Class<?> findClass(java.lang.String name) throws java.lang.ClassNotFoundException
- Overrides:
findClass
in classWebAppClassLoader
- Throws:
java.lang.ClassNotFoundException
-
getBundle
public org.osgi.framework.Bundle getBundle()
Returns theBundle
that defined this web-application.- Specified by:
getBundle
in interfaceorg.osgi.framework.BundleReference
- Returns:
- The
Bundle
object associated with thisBundleReference
.
-
getResources
public java.util.Enumeration<java.net.URL> getResources(java.lang.String name) throws java.io.IOException
- Overrides:
getResources
in classWebAppClassLoader
- Throws:
java.io.IOException
-
getResource
public java.net.URL getResource(java.lang.String name)
Description copied from class:WebAppClassLoader
Get a resource from the classloader NOTE: this method provides a convenience of hacking off a leading / should one be present. This is non-standard and it is recommended to not rely on this behavior- Overrides:
getResource
in classWebAppClassLoader
-
findResource
public java.net.URL findResource(java.lang.String name)
- Overrides:
findResource
in classjava.net.URLClassLoader
-
loadAsResource
protected java.lang.Class<?> loadAsResource(java.lang.String name, boolean checkSystemResource) throws java.lang.ClassNotFoundException
Try to load the class from the bundle classloader. We do NOT load it as a resource as the WebAppClassLoader does because the url that is returned is an osgi-special url that does not play properly with WebAppClassLoader's method of extracting the class from the resource. This implementation directly asks the osgi bundle classloader to load the given class name.- Overrides:
loadAsResource
in classWebAppClassLoader
- Parameters:
name
- the name of the class to loadcheckSystemResource
- if true and the class isn't a system class we return it- Returns:
- the loaded class
- Throws:
java.lang.ClassNotFoundException
- if the class cannot be found- See Also:
WebAppClassLoader.loadAsResource(java.lang.String, boolean)
-
addClassPath
public void addClassPath(java.lang.String classPath) throws java.io.IOException
Parse the classpath ourselves to be able to filter things. This is a derivative work of the super class- Overrides:
addClassPath
in classWebAppClassLoader
- Parameters:
classPath
- Comma or semicolon separated path of filenames or URLs pointing to directories or jar files. Directories should end with '/'.- Throws:
java.io.IOException
- if unable to add classpath
-
setWebappContext
public void setWebappContext(WebAppContext webappContext)
In the case of the generation of a webapp via a jetty context file we need a proper classloader to setup the app before we have the WebappContext So we place a fake one there to start with. We replace it with the actual webapp context with this method. We also apply the extraclasspath there at the same time.- Parameters:
webappContext
- the web app context
-
-