View Javadoc

1   package com.atlassian.plugin.classloader;
2   
3   import org.apache.commons.lang.Validate;
4   import org.slf4j.Logger;
5   import org.slf4j.LoggerFactory;
6   
7   import java.io.InputStream;
8   import java.io.IOException;
9   import java.net.URL;
10  import java.util.Enumeration;
11  
12  /**
13   * A class loader that delegates to another class loader.
14   */
15  public class DelegationClassLoader extends ClassLoader
16  {
17      private static final Logger log = LoggerFactory.getLogger(DelegationClassLoader.class);
18  
19      private ClassLoader delegateClassLoader = DelegationClassLoader.class.getClassLoader();
20  
21      public void setDelegateClassLoader(ClassLoader delegateClassLoader)
22      {
23          Validate.notNull(delegateClassLoader, "Can't set the delegation target to null");
24          if (log.isDebugEnabled())
25          {
26              log.debug("Update class loader delegation from [" + this.delegateClassLoader +
27                      "] to [" + delegateClassLoader + "]");
28          }
29          this.delegateClassLoader = delegateClassLoader;
30      }
31  
32      public Class loadClass(String name) throws ClassNotFoundException
33      {
34          return delegateClassLoader.loadClass(name);
35      }
36  
37      public URL getResource(String name)
38      {
39          return delegateClassLoader.getResource(name);
40      }
41  
42      @Override
43      public Enumeration<URL> getResources(String name) throws IOException
44      {
45          return delegateClassLoader.getResources(name);
46      }
47  
48      public InputStream getResourceAsStream(String name)
49      {
50          return delegateClassLoader.getResourceAsStream(name);
51      }
52  
53      public synchronized void setDefaultAssertionStatus(boolean enabled)
54      {
55          delegateClassLoader.setDefaultAssertionStatus(enabled);
56      }
57  
58      public synchronized void setPackageAssertionStatus(String packageName, boolean enabled)
59      {
60          delegateClassLoader.setPackageAssertionStatus(packageName, enabled);
61      }
62  
63      public synchronized void setClassAssertionStatus(String className, boolean enabled)
64      {
65          delegateClassLoader.setClassAssertionStatus(className, enabled);
66      }
67  
68      public synchronized void clearAssertionStatus()
69      {
70          delegateClassLoader.clearAssertionStatus();
71      }
72  }