Author: lukaszlenart
Date: Tue Jul 31 20:38:52 2012
New Revision: 1367763
URL: http://svn.apache.org/viewvc?rev=1367763&view=rev
Log:
Solves problem with rest-showcase app and adds additional test to proof how
excludePackages works
Added:
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/
- copied from r1364910,
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/apache/struts2/rest/example/
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/ExcludeAction.java
- copied, changed from r1364910,
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/action/ActionNameAction.java
Removed:
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/apache/
Modified:
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/Order.java
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersService.java
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
Modified:
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/Order.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/Order.java?rev=1367763&r1=1364910&r2=1367763&view=diff
==============================================================================
---
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/Order.java
(original)
+++
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/Order.java
Tue Jul 31 20:38:52 2012
@@ -1,4 +1,4 @@
-package org.apache.struts2.rest.example;
+package org.demo.rest.example;
public class Order {
String id;
Modified:
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java?rev=1367763&r1=1364910&r2=1367763&view=diff
==============================================================================
---
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java
(original)
+++
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java
Tue Jul 31 20:38:52 2012
@@ -1,16 +1,11 @@
-package org.apache.struts2.rest.example;
+package org.demo.rest.example;
import java.util.Collection;
-import org.apache.struts2.dispatcher.ServletActionRedirectResult;
import org.apache.struts2.rest.DefaultHttpHeaders;
import org.apache.struts2.rest.HttpHeaders;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.convention.annotation.Result;
-import org.apache.struts2.convention.annotation.ParentPackage;
-import org.apache.struts2.convention.annotation.Namespaces;
-import org.apache.struts2.convention.annotation.Namespace;
-import org.apache.struts2.convention.annotation.InterceptorRef;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Validateable;
Modified:
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersService.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersService.java?rev=1367763&r1=1364910&r2=1367763&view=diff
==============================================================================
---
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersService.java
(original)
+++
struts/struts2/trunk/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersService.java
Tue Jul 31 20:38:52 2012
@@ -1,4 +1,4 @@
-package org.apache.struts2.rest.example;
+package org.demo.rest.example;
import java.util.*;
Modified:
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java?rev=1367763&r1=1367762&r2=1367763&view=diff
==============================================================================
---
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
(original)
+++
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
Tue Jul 31 20:38:52 2012
@@ -492,9 +492,17 @@ public class PackageBasedActionConfigBui
* package-based action scan
*/
protected boolean includeClassNameInActionScan(String className) {
-
String classPackageName = StringUtils.substringBeforeLast(className,
".");
+ return (checkActionPackages(classPackageName) ||
checkPackageLocators(classPackageName)) &&
checkExcludePackages(classPackageName);
+ }
+ /**
+ * Checks if provided class package is on the exclude list
+ *
+ * @param classPackageName name of class package
+ * @return false if class package is on the {@link #excludePackages} list
+ */
+ protected boolean checkExcludePackages(String classPackageName) {
if(excludePackages != null && excludePackages.length > 0) {
WildcardHelper wildcardHelper = new WildcardHelper();
@@ -508,7 +516,16 @@ public class PackageBasedActionConfigBui
}
}
}
+ return true;
+ }
+ /**
+ * Checks if class package match provided list of action packages
+ *
+ * @param classPackageName name of class package
+ * @return true if class package is on the {@link #actionPackages} list
+ */
+ protected boolean checkActionPackages(String classPackageName) {
if (actionPackages != null) {
for (String packageName : actionPackages) {
String strictPackageName = packageName + ".";
@@ -517,7 +534,16 @@ public class PackageBasedActionConfigBui
return true;
}
}
+ return false;
+ }
+ /**
+ * Checks if class package match provided list of package locators
+ *
+ * @param classPackageName name of class package
+ * @return true if class package is on the {@link #packageLocators} list
+ */
+ protected boolean checkPackageLocators(String classPackageName) {
if (packageLocators != null && !disablePackageLocatorsScanning) {
for (String packageLocator : packageLocators) {
if (classPackageName.length() > 0
@@ -530,10 +556,9 @@ public class PackageBasedActionConfigBui
}
}
}
-
return false;
}
-
+
/**
* Construct a {@link Test} object that determines if a specified class
name
* should be included in the package scan based on the clazz's package
name.
Modified:
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java?rev=1367763&r1=1367762&r2=1367763&view=diff
==============================================================================
---
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
(original)
+++
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
Tue Jul 31 20:38:52 2012
@@ -60,6 +60,7 @@ import org.apache.struts2.convention.act
import
org.apache.struts2.convention.actions.defaultinterceptor.SingleActionNameAction2;
import
org.apache.struts2.convention.actions.exception.ExceptionsActionLevelAction;
import
org.apache.struts2.convention.actions.exception.ExceptionsMethodLevelAction;
+import org.apache.struts2.convention.actions.exclude.ExcludeAction;
import
org.apache.struts2.convention.actions.interceptor.ActionLevelInterceptor2Action;
import
org.apache.struts2.convention.actions.interceptor.ActionLevelInterceptor3Action;
import
org.apache.struts2.convention.actions.interceptor.ActionLevelInterceptorAction;
@@ -133,6 +134,10 @@ public class PackageBasedActionConfigBui
run(null, "actions", "dontfind");
}
+ public void testJustExcludedPackages() throws MalformedURLException {
+ run("org.apache.struts2.convention.actions", null,
"org.apache.struts2.convention.actions.exclude");
+ }
+
private void run(String actionPackages, String packageLocators, String
excludePackages) throws MalformedURLException {
//setup interceptors
List<InterceptorConfig> defaultInterceptors = new
ArrayList<InterceptorConfig>();
@@ -208,6 +213,8 @@ public class PackageBasedActionConfigBui
"/chain", strutsDefault, null);
PackageConfig transPkg =
makePackageConfig("org.apache.struts2.convention.actions.transactions#struts-default#/transactions",
"/transactions", strutsDefault, null);
+ PackageConfig excludePkg =
makePackageConfig("org.apache.struts2.convention.actions.exclude#struts-default#/exclude",
+ "/exclude", strutsDefault, null);
ResultMapBuilder resultMapBuilder =
createStrictMock(ResultMapBuilder.class);
checkOrder(resultMapBuilder, false);
@@ -312,6 +319,12 @@ public class PackageBasedActionConfigBui
expect(resultMapBuilder.build(TransNameAction.class,
getAnnotation(TransNameAction.class, "trans1", Action.class), "trans1",
transPkg)).andReturn(results);
expect(resultMapBuilder.build(TransNameAction.class,
getAnnotation(TransNameAction.class, "trans2", Action.class), "trans2",
transPkg)).andReturn(results);
+ /* org.apache.struts2.convention.actions.exclude */
+ // this is only expected when excludePackages was specified with
org.apache.struts2.convention.actions.exclude package
+ if (excludePackages == null ||
!excludePackages.contains("org.apache.struts2.convention.actions.exclude")) {
+ expect(resultMapBuilder.build(ExcludeAction.class,
getAnnotation(ExcludeAction.class, "run1", Action.class), "exclude1",
excludePkg)).andReturn(results);
+ }
+
EasyMock.replay(resultMapBuilder);
final DummyContainer mockContainer = new DummyContainer();
@@ -567,7 +580,7 @@ public class PackageBasedActionConfigBui
/* org.apache.struts2.convention.actions */
pkgConfig =
configuration.getPackageConfig("org.apache.struts2.convention.actions#struts-default#");
assertNotNull(pkgConfig);
- System.out.println("actions " + pkgConfig.getActionConfigs());
+
assertEquals(4, pkgConfig.getActionConfigs().size());
verifyActionConfig(pkgConfig, "no-annotation",
NoAnnotationAction.class, "execute", pkgConfig.getName());
verifyActionConfig(pkgConfig, "default-result-path",
DefaultResultPathAction.class, "execute", pkgConfig.getName());
@@ -580,6 +593,14 @@ public class PackageBasedActionConfigBui
verifyActionConfig(pkgConfig, "trans1", TransNameAction.class,
"trans1", pkgConfig.getName());
verifyActionConfig(pkgConfig, "trans2", TransNameAction.class,
"trans2", pkgConfig.getName());
+ /* org.apache.struts2.convention.actions.exclude */
+ pkgConfig =
configuration.getPackageConfig("org.apache.struts2.convention.actions.exclude#struts-default#/exclude");
+ if (excludePackages != null &&
excludePackages.contains("org.apache.struts2.convention.actions.exclude")) {
+ verifyMissingActionConfig(configuration, "exclude1",
ExcludeAction.class, "run1",
"org.apache.struts2.convention.actions.exclude#struts-default#/exclude");
+ } else {
+ verifyActionConfig(pkgConfig, "exclude1", ExcludeAction.class,
"run1", pkgConfig.getName());
+ }
+
//test unknown handler automatic chaining
pkgConfig =
configuration.getPackageConfig("org.apache.struts2.convention.actions.chain#struts-default#/chain");
ServletContext context = EasyMock.createNiceMock(ServletContext.class);
@@ -606,6 +627,12 @@ public class PackageBasedActionConfigBui
assertEquals(packageName, ac.getPackageName());
}
+ private void verifyMissingActionConfig(Configuration configuration, String
actionName, Class<?> actionClass,
+ String methodName, String
packageName) {
+ assertNull(configuration.getPackageConfig(packageName));
+
assertFalse(configuration.getPackageConfigNames().contains(packageName));
+ }
+
private void verifyMissingActionConfig(PackageConfig pkgConfig, String
actionName, Class<?> actionClass,
String methodName, String packageName) {
ActionConfig ac = pkgConfig.getAllActionConfigs().get(actionName);
Copied:
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/ExcludeAction.java
(from r1364910,
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/action/ActionNameAction.java)
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/ExcludeAction.java?p2=struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/ExcludeAction.java&p1=struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/action/ActionNameAction.java&r1=1364910&r2=1367763&rev=1367763&view=diff
==============================================================================
---
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/action/ActionNameAction.java
(original)
+++
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/exclude/ExcludeAction.java
Tue Jul 31 20:38:52 2012
@@ -18,7 +18,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.struts2.convention.actions.action;
+package org.apache.struts2.convention.actions.exclude;
import org.apache.struts2.convention.annotation.Action;
@@ -27,14 +27,9 @@ import org.apache.struts2.convention.ann
* This is a test action.
* </p>
*/
-public class ActionNameAction {
- @Action("action1")
+public class ExcludeAction {
+ @Action("exclude1")
public String run1() {
return null;
}
-
- @Action("action2")
- public String run2() {
- return null;
- }
}
\ No newline at end of file