View Javadoc
1   package com.atlassian.plugin.classloader;
2   
3   import org.slf4j.Logger;
4   import org.slf4j.LoggerFactory;
5   
6   import java.io.IOException;
7   import java.io.InputStream;
8   import java.net.URL;
9   import java.util.Enumeration;
10  
11  import static com.google.common.base.Preconditions.checkNotNull;
12  
13  /**
14   * A class loader that delegates to another class loader.
15   */
16  public class DelegationClassLoader extends ClassLoader {
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          this.delegateClassLoader = checkNotNull(delegateClassLoader, "Can't set the delegation target to null");
23          if (log.isDebugEnabled()) {
24              log.debug("Update class loader delegation from [{}] to [{}]", this.delegateClassLoader, delegateClassLoader);
25          }
26      }
27  
28      public Class loadClass(String name) throws ClassNotFoundException {
29          return delegateClassLoader.loadClass(name);
30      }
31  
32      public URL getResource(String name) {
33          return delegateClassLoader.getResource(name);
34      }
35  
36      @Override
37      public Enumeration<URL> getResources(String name) throws IOException {
38          return delegateClassLoader.getResources(name);
39      }
40  
41      public InputStream getResourceAsStream(String name) {
42          return delegateClassLoader.getResourceAsStream(name);
43      }
44  
45      public synchronized void setDefaultAssertionStatus(boolean enabled) {
46          delegateClassLoader.setDefaultAssertionStatus(enabled);
47      }
48  
49      public synchronized void setPackageAssertionStatus(String packageName, boolean enabled) {
50          delegateClassLoader.setPackageAssertionStatus(packageName, enabled);
51      }
52  
53      public synchronized void setClassAssertionStatus(String className, boolean enabled) {
54          delegateClassLoader.setClassAssertionStatus(className, enabled);
55      }
56  
57      public synchronized void clearAssertionStatus() {
58          delegateClassLoader.clearAssertionStatus();
59      }
60  }