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