code: public static Iterator<URL> getResources(String resourceName, Class<?> callingClass, boolean aggregate)
  			throws IOException {
  		AggregateIterator<URL> iterator = new AggregateIterator<URL>();
  		iterator.addEnumeration(Thread.currentThread().getContextClassLoader().getResources(resourceName));
  		if (!iterator.hasNext() || aggregate) {
  			iterator.addEnumeration(ClassLoaderUtil.class.getClassLoader().getResources(resourceName));
  		}
  		if (!iterator.hasNext() || aggregate) {
  			ClassLoader cl = callingClass.getClassLoader();
  			if (cl != null) {
  				iterator.addEnumeration(cl.getResources(resourceName));
  			}
  		}
  		if (!iterator.hasNext() && (resourceName != null)
  				&& ((resourceName.length() == 0) || (resourceName.charAt(0) != '/'))) {
  			return getResources('/' + resourceName, callingClass, aggregate);
  		}
  		return iterator;
  	}
docs: 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):
  <ul>
  <li>From Thread.currentThread().getContextClassLoader()
  <li>From ClassLoaderUtil.class.getClassLoader()
  <li>callingClass.getClassLoader()
  </ul>
  
  @param resourceName
  The name of the resources to load
  @param callingClass
  The Class object of the calling object
  @param aggregate
  <code>true</code> to aggregate resources from all classloaders
  @return Iterator of matching resources
  @throws IOException
  If I/O errors occur