package org.gatein.common.classloader; import java.net.URL; import java.net.URLClassLoader; import java.util.HashSet; /** * A URLClassLoader that skips delegation of specified resources, and classes to parent. */ public class FilteringClassLoader extends URLClassLoader { private HashSet<String> filtered = new HashSet<String>(); public FilteringClassLoader(ClassLoader parent, URL[] urls, String [] filteredNames) { super(urls, parent); for (String name: filteredNames) { filtered.add(name); } } @Override protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { if (filtered.contains(name)) { Class localClass = findLoadedClass(name); if (localClass == null) { localClass = findClass(name); } if (resolve) { resolveClass(localClass); } return localClass; } return super.loadClass(name, resolve); } }