Anonymous avatar Anonymous committed 25f6135

add support to limit the classes that can be loaded by the reloading class loader

git-svn-id: http://svn.opensymphony.com/svn/xwork/trunk@2019 e221344d-f017-0410-9bd5-d282ab1896d7

Comments (0)

Files changed (1)

core/src/main/java/com/opensymphony/xwork2/util/classloader/ReloadingClassLoader.java

 import java.io.File;
 import java.net.URL;
 import java.net.URISyntaxException;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import java.util.Set;
+import java.util.Collections;
+import java.util.Collection;
+import java.util.HashSet;
 
 /**
  * The ReloadingClassLoader uses a delegation mechanism to allow
     private ResourceStore[] stores;
     private ClassLoader delegate;
 
+    private Set<Pattern> acceptClasses = Collections.emptySet();
+
     public ReloadingClassLoader(final ClassLoader pParent) {
         super(pParent);
         parent = pParent;
     }
 
     public Class loadClass(String name) throws ClassNotFoundException {
-        return delegate.loadClass(name);
+        return isAccepted(name) ? delegate.loadClass(name) : parent.loadClass(name);
     }
 
     public void setClassAssertionStatus(String className, boolean enabled) {
     public void setPackageAssertionStatus(String packageName, boolean enabled) {
         delegate.setPackageAssertionStatus(packageName, enabled);
     }
+
+    public void setAccepClasses(Set<Pattern> acceptClasses) {
+        this.acceptClasses = acceptClasses;
+    }
+
+    protected boolean isAccepted(String className) {
+        if (!this.acceptClasses.isEmpty()) {
+            for (Pattern pattern : acceptClasses) {
+                Matcher matcher = pattern.matcher(className);
+                if (matcher.matches()) {
+                    return true;
+                }
+            }
+            return false;
+        } else
+            return true;
+    }
 }
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.