Class ClassLoaderUtil
This class is extremely useful for loading resources and classes in a fault tolerant manner that works across different applications servers.
It has come out of many months of frustrating use of multiple application servers at Atlassian, please don't change things unless you're sure they're not going to break in one server or another!
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionstatic URLgetResource(String resourceName, Class callingClass) Load a given resource.static InputStreamgetResourceAsStream(String resourceName, Class callingClass) This is a convenience method to load a resource as a stream.getResources(String resourceName, Class callingClass, boolean aggregate) Load all resources with a given name, potentially aggregating all results from the searched classloaders.static ClassLoad a class with a given name.static voidPrints the current classloader hierarchy - useful for debugging.static voidPrints the classloader hierarchy from a given classloader - useful for debugging.
- 
Constructor Details- 
ClassLoaderUtilpublic ClassLoaderUtil()
 
- 
- 
Method Details- 
getResourcespublic static Iterator<URL> getResources(String resourceName, Class callingClass, boolean aggregate) throws IOException Load all resources with a given name, potentially aggregating all results from the searched classloaders. If no results are found, the resource name is prepended by '/' and tried again. This method will try to load the resources using the following methods (in order): - From Thread.currentThread().getContextClassLoader()
- From ClassLoaderUtil.class.getClassLoader()
- callingClass.getClassLoader()
 - Parameters:
- resourceName- The name of the resources to load
- callingClass- The Class object of the calling object
- aggregate- aggregate
- Returns:
- all resources found
- Throws:
- IOException- in case of IO errors
 
- 
getResourceLoad a given resource.This method will try to load the resource using the following methods (in order): - Parameters:
- resourceName- The name of the resource to load
- callingClass- The Class object of the calling object
- Returns:
- the resource
 
- 
getResourceAsStreamThis is a convenience method to load a resource as a stream. The algorithm used to find the resource is given in getResource()- Parameters:
- resourceName- The name of the resource to load
- callingClass- The Class object of the calling object
- Returns:
- resource as a stream
 
- 
loadClassLoad a class with a given name. It will try to load the class in the following order: - From Thread.currentThread().getContextClassLoader()
- Using the basic Class.forName(java.lang.String)
- From ClassLoaderUtil.class.getClassLoader()
- From the callingClass.getClassLoader()
 - Parameters:
- className- The name of the class to load
- callingClass- The Class object of the calling object
- Returns:
- class with for the given name
- Throws:
- ClassNotFoundException- If the class cannot be found anywhere.
 
- From 
- 
printClassLoaderpublic static void printClassLoader()Prints the current classloader hierarchy - useful for debugging.
- 
printClassLoaderPrints the classloader hierarchy from a given classloader - useful for debugging.- Parameters:
- cl- the class loader
 
 
-