diff --git a/plugins/codebehind/src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java b/plugins/codebehind/src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java
index 53b4967c7..305bdc4c5 100644
--- a/plugins/codebehind/src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java
+++ b/plugins/codebehind/src/main/java/org/apache/struts2/config/ClasspathPackageProvider.java
@@ -61,7 +61,7 @@ public class ClasspathPackageProvider implements PackageProvider {
* The default page prefix (or "path").
* Some applications may place pages under "/WEB-INF" as an extreme security precaution.
*/
- private static final String DEFAULT_PAGE_PREFIX = "struts.configuration.classpath.defaultPagePrefix";
+ protected static final String DEFAULT_PAGE_PREFIX = "struts.configuration.classpath.defaultPagePrefix";
/**
* The default page prefix (none).
@@ -71,7 +71,7 @@ public class ClasspathPackageProvider implements PackageProvider {
/**
* The default page extension, to use in place of ".jsp".
*/
- private static final String DEFAULT_PAGE_EXTENSION = "struts.configuration.classpath.defaultPageExtension";
+ protected static final String DEFAULT_PAGE_EXTENSION = "struts.configuration.classpath.defaultPageExtension";
/**
* The defacto default page extension, usually associated with JavaServer Pages.
@@ -82,7 +82,12 @@ public class ClasspathPackageProvider implements PackageProvider {
* A setting to indicate a custom default parent package,
* to use in place of "struts-default".
*/
- private static final String DEFAULT_PARENT_PACKAGE = "struts.configuration.classpath.defaultParentPackage";
+ protected static final String DEFAULT_PARENT_PACKAGE = "struts.configuration.classpath.defaultParentPackage";
+
+ /**
+ * A setting to disable action scanning.
+ */
+ protected static final String DISABLE_ACTION_SCANNING = "struts.configuration.classpath.disableActionScanning";
/**
* Name of the framework's default configuration package,
@@ -94,7 +99,7 @@ public class ClasspathPackageProvider implements PackageProvider {
* The default page prefix (or "path").
* Some applications may place pages under "/WEB-INF" as an extreme security precaution.
*/
- private static final String FORCE_LOWER_CASE = "struts.configuration.classpath.forceLowerCase";
+ protected static final String FORCE_LOWER_CASE = "struts.configuration.classpath.forceLowerCase";
/**
* Whether to use a lowercase letter as the initial letter of an action.
@@ -120,6 +125,8 @@ public class ClasspathPackageProvider implements PackageProvider {
* @see #needsReload
*/
private boolean initialized = false;
+
+ private boolean disableActionScanning = false;
private PackageLoader packageLoader;
@@ -167,6 +174,16 @@ public class ClasspathPackageProvider implements PackageProvider {
this.servletContext = ctx;
}
+ /**
+ * Disables action scanning.
+ *
+ * @param disableActionScanning True to disable
+ */
+ @Inject(value=DISABLE_ACTION_SCANNING, required=false)
+ public void setDisableActionScanning(String disableActionScanning) {
+ this.disableActionScanning = "true".equals(disableActionScanning);
+ }
+
/**
* Register a default parent package for the actions.
*
@@ -437,7 +454,7 @@ public class ClasspathPackageProvider implements PackageProvider {
* @throws ConfigurationException
*/
public void loadPackages() throws ConfigurationException {
- if (actionPackages != null) {
+ if (actionPackages != null && !disableActionScanning) {
String[] names = actionPackages.split("\\s*[,]\\s*");
// Initialize the classloader scanner with the configured packages
if (names.length > 0) {
diff --git a/plugins/codebehind/src/test/java/org/apache/struts2/config/ClasspathPackageProviderTest.java b/plugins/codebehind/src/test/java/org/apache/struts2/config/ClasspathPackageProviderTest.java
index 93a77ed23..1b03fd128 100644
--- a/plugins/codebehind/src/test/java/org/apache/struts2/config/ClasspathPackageProviderTest.java
+++ b/plugins/codebehind/src/test/java/org/apache/struts2/config/ClasspathPackageProviderTest.java
@@ -74,6 +74,17 @@ public class ClasspathPackageProviderTest extends TestCase {
ActionConfig actionConfig = (ActionConfig) configs.get("customParentPackage");
assertNotNull(actionConfig);
}
+
+ public void testDisableScanning() {
+ provider = new ClasspathPackageProvider();
+ provider.setActionPackages("org.apache.struts2.config");
+ provider.setDisableActionScanning("true");
+ config = new DefaultConfiguration();
+ provider.init(config);
+ provider.loadPackages();
+
+ assertEquals(0, config.getPackageConfigs().size());
+ }
public void testParentPackage() {
PackageConfig pkg = config.getPackageConfig("org.apache.struts2.config");
diff --git a/plugins/rest/src/main/java/org/apache/struts2/rest/ControllerClasspathPackageProvider.java b/plugins/rest/src/main/java/org/apache/struts2/rest/ControllerClasspathPackageProvider.java
index 7953819a1..cb3bc474b 100644
--- a/plugins/rest/src/main/java/org/apache/struts2/rest/ControllerClasspathPackageProvider.java
+++ b/plugins/rest/src/main/java/org/apache/struts2/rest/ControllerClasspathPackageProvider.java
@@ -22,6 +22,7 @@ package org.apache.struts2.rest;
import org.apache.struts2.config.ClasspathPackageProvider;
+import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.ResolverUtil.ClassTest;
/**
@@ -29,6 +30,11 @@ import com.opensymphony.xwork2.util.ResolverUtil.ClassTest;
*/
public class ControllerClasspathPackageProvider extends ClasspathPackageProvider {
+ /**
+ * A setting to disable action scanning.
+ */
+ protected static final String DISABLE_REST_CONTROLLER_SCANNING = "struts.configuration.rest.disableControllerScanning";
+
@Override
protected ClassTest createActionClassTest() {
return new ClassTest() {
@@ -43,5 +49,26 @@ public class ControllerClasspathPackageProvider extends ClasspathPackageProvider
protected String getClassSuffix() {
return "Controller";
}
+
+ /**
+ * Ignore setting to disable action scanning from the codebehind plugin.
+ *
+ * @param disableActionScanning True to disable
+ */
+ @Override
+ @Inject(value=DISABLE_ACTION_SCANNING, required=false)
+ public void setDisableActionScanning(String disableActionScanning) {
+ // do nothing
+ }
+
+ /**
+ * Disables controller scanning.
+ *
+ * @param disableActionScanning True to disable
+ */
+ @Inject(value=DISABLE_REST_CONTROLLER_SCANNING, required=false)
+ public void setDisableRestControllerScanning(String disableActionScanning) {
+ super.setDisableActionScanning(disableActionScanning);
+ }
}
diff --git a/plugins/rest/src/main/resources/struts-plugin.xml b/plugins/rest/src/main/resources/struts-plugin.xml
index 306a6b92d..b4dfe6185 100644
--- a/plugins/rest/src/main/resources/struts-plugin.xml
+++ b/plugins/rest/src/main/resources/struts-plugin.xml
@@ -22,6 +22,11 @@
+
+
+
+
+