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:
Closeable, AutoCloseable, org.eclipse.jetty.util.ClassVisibilityChecker, org.osgi.framework.BundleReference

public class OSGiWebappClassLoader extends org.eclipse.jetty.webapp.WebAppClassLoader implements org.osgi.framework.BundleReference
OSGiWebappClassLoader Extends the webapp classloader to also use the classloader of the Bundle defining the webapp.
  • Field Details

    • JAR_WITH_SUCH_CLASS_MUST_BE_EXCLUDED

      public static final Set<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 Details

    • OSGiWebappClassLoader

      public OSGiWebappClassLoader(ClassLoader parent, org.eclipse.jetty.webapp.WebAppContext context, org.osgi.framework.Bundle contributor) throws IOException
      Parameters:
      parent - The parent classloader.
      context - The WebAppContext
      contributor - The bundle that defines this web-application.
      Throws:
      IOException - if unable to cerate the OSGiWebappClassLoader
  • Method Details

    • addClassThatIdentifiesAJarThatMustBeRejected

      public static void addClassThatIdentifiesAJarThatMustBeRejected(Class<?> zclass)
    • addClassThatIdentifiesAJarThatMustBeRejected

      public static void addClassThatIdentifiesAJarThatMustBeRejected(String zclassName)
    • findClass

      protected Class<?> findClass(String name) throws ClassNotFoundException
      Overrides:
      findClass in class org.eclipse.jetty.webapp.WebAppClassLoader
      Throws:
      ClassNotFoundException
    • getBundle

      public org.osgi.framework.Bundle getBundle()
      Returns the Bundle that defined this web-application.
      Specified by:
      getBundle in interface org.osgi.framework.BundleReference
      Returns:
      The Bundle object associated with this BundleReference.
    • getResources

      public Enumeration<URL> getResources(String name) throws IOException
      Overrides:
      getResources in class org.eclipse.jetty.webapp.WebAppClassLoader
      Throws:
      IOException
    • getResource

      public URL getResource(String name)
      Overrides:
      getResource in class org.eclipse.jetty.webapp.WebAppClassLoader
    • findResource

      public URL findResource(String name)
      Overrides:
      findResource in class URLClassLoader
    • loadAsResource

      protected Class<?> loadAsResource(String name, boolean checkSystemResource) throws 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 class org.eclipse.jetty.webapp.WebAppClassLoader
      Throws:
      ClassNotFoundException
      See Also:
      • WebAppClassLoader.loadAsResource(java.lang.String, boolean)
    • addClassPath

      public void addClassPath(String classPath) throws IOException
      Parse the classpath ourselves to be able to filter things. This is a derivative work of the super class
      Overrides:
      addClassPath in class org.eclipse.jetty.webapp.WebAppClassLoader
      Throws:
      IOException