com.opensymphony.xwork2.util

## Class ClassLoaderUtil

- java.lang.Object
- - com.opensymphony.xwork2.util.ClassLoaderUtil

-     public class ClassLoaderUtil
      extends Object

  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 Summary

    Constructors
    Constructor and Description
    `ClassLoaderUtil()`

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static URL` | `getResource(String resourceName, Class callingClass)` Load a given resource.
    `static InputStream` | `getResourceAsStream(String resourceName, Class callingClass)` This is a convenience method to load a resource as a stream.
    `static Iterator<URL>` | `getResources(String resourceName, Class callingClass, boolean aggregate)` Load all resources with a given name, potentially aggregating all results from the searched classloaders.
    `static Class` | `loadClass(String className, Class callingClass)` Load a class with a given name.
    `static void` | `printClassLoader()` Prints the current classloader hierarchy - useful for debugging.
    `static void` | `printClassLoader(ClassLoader cl)` Prints the classloader hierarchy from a given classloader - useful for debugging.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ClassLoaderUtil

          public ClassLoaderUtil()

  - ### Method Detail

    - #### getResources

          public 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

    - #### getResource

          public static URL getResource(String resourceName,
                                        Class callingClass)

      Load a given resource.

      This method will try to load the resource using the following methods (in order):

      - From `Thread.currentThread().getContextClassLoader()`
      - From `ClassLoaderUtil.class.getClassLoader()`
      - From the `callingClass.getClassLoader()`
      Parameters:
        `resourceName` - The name of the resource to load
        `callingClass` - The Class object of the calling object
      Returns:
        the resource

    - #### getResourceAsStream

          public static InputStream getResourceAsStream(String resourceName,
                                                        Class callingClass)

      This 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

    - #### loadClass

          public static Class loadClass(String className,
                                        Class callingClass)
                                 throws ClassNotFoundException

      Load 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.

    - #### printClassLoader

          public static void printClassLoader()

      Prints the current classloader hierarchy - useful for debugging.

    - #### printClassLoader

          public static void printClassLoader(ClassLoader cl)

      Prints the classloader hierarchy from a given classloader - useful for debugging.
      Parameters:
        `cl` - the class loader

Copyright © 2000–2026 Apache Software Foundation. All rights reserved.