Author: musachy Date: Mon Jun 2 06:55:51 2008 New Revision: 662439 URL: http://svn.apache.org/viewvc?rev=662439&view=rev Log: (empty)
Added: struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts.properties struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestBase.java (with props) struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestExtends.java (with props) Removed: struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/AbstractClassLoaderResolver.java struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/ClassClassLoaderResolver.java struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/URLClassLoaderResolver.java Modified: struts/sandbox/trunk/struts2-convention-plugin/pom.xml struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/StringTools.java struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts-plugin.xml struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java Modified: struts/sandbox/trunk/struts2-convention-plugin/pom.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/pom.xml?rev=662439&r1=662438&r2=662439&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-convention-plugin/pom.xml (original) +++ struts/sandbox/trunk/struts2-convention-plugin/pom.xml Mon Jun 2 06:55:51 2008 @@ -1,74 +1,72 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -/* - * $Id$ - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.apache.struts</groupId> - <artifactId>struts2-plugins</artifactId> - <version>2.1.3-SNAPSHOT</version> - </parent> - <groupId>org.apache.struts</groupId> - <artifactId>struts2-convention-plugin</artifactId> - <packaging>jar</packaging> - <name>Struts 2 Convention Plugin</name> - - <scm> - <connection>scm:svn:http://svn.apache.org/repos/asf/struts/sandbox/trunk/struts2-convention-plugin</connection> - <developerConnection>scm:svn:https://svn.apache.org/repos/asf/struts/sandbox/trunk/struts2-convention-plugin</developerConnection> - <url>http://svn.apache.org/viewcvs.cgi/struts/sandbox/trunk/struts2-convention-plugin</url> - </scm> - - <dependencies> - <dependency> - <groupId>org.apache.struts</groupId> - <artifactId>struts2-core</artifactId> - <version>2.1.1-SNAPSHOT</version> - </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <scope>test</scope> - <version>3.8.1</version> - </dependency> - <dependency> - <groupId>org.easymock</groupId> - <artifactId>easymock</artifactId> - <version>2.3</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> - <version>2.4</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>jsp-api</artifactId> - <version>2.0</version> - <scope>provided</scope> - </dependency> - </dependencies> -</project> +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* + * $Id$ + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +--><project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-plugins</artifactId> + <version>2.1.3-SNAPSHOT</version> + </parent> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-convention-plugin</artifactId> + <packaging>jar</packaging> + <name>Struts 2 Convention Plugin</name> + + <scm> + <connection>scm:svn:http://svn.apache.org/repos/asf/struts/sandbox/trunk/struts2-convention-plugin</connection> + <developerConnection>scm:svn:https://svn.apache.org/repos/asf/struts/sandbox/trunk/struts2-convention-plugin</developerConnection> + <url>http://svn.apache.org/viewcvs.cgi/struts/sandbox/trunk/struts2-convention-plugin</url> + </scm> + + <dependencies> + <dependency> + <groupId>org.apache.struts</groupId> + <artifactId>struts2-core</artifactId> + <version>2.1.3-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + <version>3.8.1</version> + </dependency> + <dependency> + <groupId>org.easymock</groupId> + <artifactId>easymock</artifactId> + <version>2.3</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>2.4</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>jsp-api</artifactId> + <version>2.0</version> + <scope>provided</scope> + </dependency> + </dependencies> +</project> \ No newline at end of file Modified: struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java?rev=662439&r1=662438&r2=662439&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java (original) +++ struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java Mon Jun 2 06:55:51 2008 @@ -20,6 +20,7 @@ */ package org.apache.struts2.convention; +import java.io.IOException; import java.net.URL; import java.util.Arrays; import java.util.HashMap; @@ -38,6 +39,8 @@ import com.opensymphony.xwork2.config.entities.ResultConfig; import com.opensymphony.xwork2.config.entities.ResultTypeConfig; import com.opensymphony.xwork2.inject.Inject; +import com.opensymphony.xwork2.util.finder.ResourceFinder; +import com.opensymphony.xwork2.util.finder.Test; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; @@ -230,27 +233,41 @@ actionName); } - URLClassLoaderResolver resolver = new URLClassLoaderResolver(); - resolver.find(new URLClassLoaderResolver.NameTest() { + ResourceFinder finder = new ResourceFinder(classPathLocation); + try { + Map<String, URL> matches = finder.getResourcesMap(""); + if (matches != null) { + Test<URL> resourceTest = getResourceTest(resultPath, actionName); + for (Map.Entry<String, URL> entry : matches.entrySet()) { + if (resourceTest.test(entry.getValue())) { + if (LOG.isTraceEnabled()) { + LOG.trace("Processing URL [#0]", entry.getKey()); + } + + String urlStr = entry.getValue().toString(); + int index = urlStr.lastIndexOf(resultPrefix); + String path = urlStr.substring(index); + makeResults(actionClass, path, resultPrefix, results, packageConfig, resultsByExtension); + } + + } + } + } catch (IOException ex) { + if (LOG.isErrorEnabled()) + LOG.error("Unable to scan directory [#0] for results", ex, classPathLocation); + } + + } + + private Test<URL> getResourceTest(final String resultPath, final String actionName) { + return new Test<URL>() { public boolean test(URL url) { String urlStr = url.toString(); int index = urlStr.lastIndexOf(resultPath); String path = urlStr.substring(index + resultPath.length()); return path.startsWith(actionName); } - }, false, classPathLocation); - - Set<URL> matches = resolver.getMatches(); - for (URL match : matches) { - if (LOG.isTraceEnabled()) { - LOG.trace("Processing URL [#0]", match.toString()); - } - - String urlStr = match.toString(); - int index = urlStr.lastIndexOf(resultPrefix); - String path = urlStr.substring(index); - makeResults(actionClass, path, resultPrefix, results, packageConfig, resultsByExtension); - } + }; } /** Modified: struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java?rev=662439&r1=662438&r2=662439&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java (original) +++ struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java Mon Jun 2 06:55:51 2008 @@ -20,6 +20,7 @@ */ package org.apache.struts2.convention; +import java.io.IOException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; @@ -27,7 +28,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -37,7 +37,6 @@ import org.apache.struts2.convention.annotation.AnnotationTools; import org.apache.struts2.convention.annotation.ExceptionMapping; import org.apache.struts2.convention.annotation.ExceptionMappings; -import org.apache.struts2.convention.annotation.InterceptorRef; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.Namespaces; import org.apache.struts2.convention.annotation.ParentPackage; @@ -50,9 +49,10 @@ import com.opensymphony.xwork2.config.entities.InterceptorMapping; import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.config.entities.ResultConfig; -import com.opensymphony.xwork2.config.providers.InterceptorBuilder; import com.opensymphony.xwork2.inject.Inject; -import com.opensymphony.xwork2.util.DomHelper; +import com.opensymphony.xwork2.util.finder.ClassFinder; +import com.opensymphony.xwork2.util.finder.Test; +import com.opensymphony.xwork2.util.finder.UrlSet; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; @@ -73,6 +73,8 @@ private String[] actionPackages; private String[] excludePackages; private String[] packageLocators; + private String[] excludeJars; + private boolean disableJarScanning = true; private boolean disableActionScanning = false; private boolean disablePackageLocatorsScanning = false; private String actionSuffix = "Action"; @@ -127,6 +129,23 @@ } /** + * @param exlcudeJars Comma separated list of regular expressions of jars to be exluded. + * Ignored if "struts.convention.action.disableJarScanning" is true + */ + @Inject(value = "struts.convention.action.excludeJars", required = false) + public void setExcludeJars(String excludeJars) { + this.excludeJars = excludeJars.split("\\s*[,]\\s*");; + } + + /** + * @param disableJarScanning Disable scanning jar files for actions + */ + @Inject(value = "struts.convention.action.disableJarScanning", required = false) + public void setDisableJarScanning(String disableJarScanning) { + this.disableJarScanning = "true".equals(disableJarScanning); + } + + /** * @param disableActionScanning If set to true, only the named packages will be scanned */ @Inject(value = "struts.convention.package.locators.disable", required = false) @@ -225,48 +244,112 @@ } } - Set<Class<?>> classes = new HashSet<Class<?>>(); - if (actionPackages != null) { - classes.addAll(findActionsInNamedPackages()); - } + Set<Class> classes = findActions(); + buildConfiguration(classes); + } + } + + @SuppressWarnings("unchecked") + protected Set<Class> findActions() { + Set<Class> classes = new HashSet<Class>(); + try { + if (actionPackages != null || (packageLocators != null && !disablePackageLocatorsScanning)) { + ClassFinder finder = new ClassFinder(getClassLoader(), buildUrlSet().getUrls(), true); + + // named packages + if (actionPackages != null) { + for (String packageName : actionPackages) { + Test<ClassFinder.ClassInfo> test = getPackageFinderTest(packageName); + classes.addAll(finder.findClasses(test)); + } + } - if (packageLocators != null && !disablePackageLocatorsScanning) { - classes.addAll(findActionsUsingPackageLocators()); + //package locators + if (packageLocators != null && !disablePackageLocatorsScanning) { + for (String packageLocator : packageLocators) { + Test<ClassFinder.ClassInfo> test = getPackageLocatorTest(packageLocator); + classes.addAll(finder.findClasses(test)); + } + } } + } catch (Exception ex) { + if (LOG.isErrorEnabled()) + LOG.error("Unable to scan named packages", ex); + } - buildConfiguration(classes); + return classes; + } + + private UrlSet buildUrlSet() throws IOException { + UrlSet urlSet = new UrlSet(getClassLoader()); + + urlSet = urlSet.exclude(ClassLoader.getSystemClassLoader().getParent()); + urlSet = urlSet.excludeJavaExtDirs(); + urlSet = urlSet.excludeJavaEndorsedDirs(); + urlSet = urlSet.excludeJavaHome(); + urlSet = urlSet.excludePaths(System.getProperty("sun.boot.class.path", "")); + urlSet = urlSet.exclude(".*/JavaVM.framework/.*"); + + if (disableJarScanning) { + urlSet = urlSet.exclude(".*?jar(!/)?"); + } else if (excludeJars != null) { + for (String pattern : excludeJars) { + urlSet = urlSet.exclude(pattern.trim()); + } } + + return urlSet; } - protected Set<Class<?>> findActionsInNamedPackages() { - ClassClassLoaderResolver resolver = new ClassClassLoaderResolver(); - resolver.find(getClassLoaderResolverTest(), true, actionPackages); - - return resolver.getMatches(); + private ClassLoader getClassLoader() { + return Thread.currentThread().getContextClassLoader(); } - protected ClassClassLoaderResolver.Test<Class<?>> getClassLoaderResolverTest() { - return new ClassClassLoaderResolver.Test<Class<?>>() { - public boolean test(Class type) { - return (checkImplementsAction && com.opensymphony.xwork2.Action.class.isAssignableFrom(type)) || - type.getSimpleName().endsWith(actionSuffix); + protected Test<ClassFinder.ClassInfo> getPackageFinderTest(final String packageName) { + // so "my.package" does not match "my.package2.test" + final String strictPackageName = packageName + "."; + return new Test<ClassFinder.ClassInfo>() { + public boolean test(ClassFinder.ClassInfo classInfo) { + String classPackageName = classInfo.getPackageName(); + boolean inPackage = classPackageName.equals(packageName) || classPackageName.startsWith(strictPackageName); + boolean nameMatches = classInfo.getName().endsWith(actionSuffix); + + try { + return inPackage && (nameMatches || (checkImplementsAction && com.opensymphony.xwork2.Action.class.isAssignableFrom(classInfo.get()))); + } catch (ClassNotFoundException ex) { + if (LOG.isErrorEnabled()) + LOG.error("Unable to load class [#0]", ex, classInfo.getName()); + return false; + } } }; } - protected Set<Class<?>> findActionsUsingPackageLocators() { - ClassClassLoaderResolver resolver = new ClassClassLoaderResolver(); - resolver.findByLocators(new ClassClassLoaderResolver.Test<Class<?>>() { - public boolean test(Class<?> type) { - return (checkImplementsAction && com.opensymphony.xwork2.Action.class.isAssignableFrom(type)) || - type.getSimpleName().endsWith(actionSuffix); + protected Test<ClassFinder.ClassInfo> getPackageLocatorTest(final String packageLocator) { + return new Test<ClassFinder.ClassInfo>() { + public boolean test(ClassFinder.ClassInfo classInfo) { + String packageName = classInfo.getPackageName(); + if (packageName.length() > 0) { + String[] splitted = packageName.split("\\."); + + boolean packageMatches = StringTools.contains(splitted, packageLocator, false); + boolean nameMatches = classInfo.getName().endsWith(actionSuffix); + + try { + return packageMatches && (nameMatches || (checkImplementsAction && com.opensymphony.xwork2.Action.class.isAssignableFrom(classInfo.get()))); + } catch (ClassNotFoundException ex) { + if (LOG.isErrorEnabled()) + LOG.error("Unable to load class [#0]", ex, classInfo.getName()); + return false; + } + } else + return false; } - }, true, excludePackages, packageLocators); - - return resolver.getMatches(); + }; } - protected void buildConfiguration(Set<Class<?>> classes) { + @SuppressWarnings("unchecked") + protected void buildConfiguration(Set<Class> classes) { Map<String, PackageConfig.Builder> packageConfigs = new HashMap<String, PackageConfig.Builder>(); for (Class<?> actionClass : classes) { Modified: struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/StringTools.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/StringTools.java?rev=662439&r1=662438&r2=662439&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/StringTools.java (original) +++ struts/sandbox/trunk/struts2-convention-plugin/src/main/java/org/apache/struts2/convention/StringTools.java Mon Jun 2 06:55:51 2008 @@ -44,6 +44,17 @@ return str; } + public static boolean contains(String[] strings, String value, boolean ignoreCase) { + if (strings != null) { + for (String string : strings) { + if (string.equals(value) || (ignoreCase && string.equalsIgnoreCase(value))) + return true; + } + } + + return false; + } + public static String upToLastToken(String str, String s) { int index = str.lastIndexOf(s); if (index >= 0) { Modified: struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts-plugin.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts-plugin.xml?rev=662439&r1=662438&r2=662439&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts-plugin.xml (original) +++ struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts-plugin.xml Mon Jun 2 06:55:51 2008 @@ -40,6 +40,7 @@ <constant name="struts.convention.result.path" value="/WEB-INF/content/"/> <constant name="struts.convention.action.suffix" value="Action"/> <constant name="struts.convention.action.disableScanning" value="false"/> + <constant name="struts.convention.action.disableJarScanning" value="true"/> <constant name="struts.convention.action.mapAllMatches" value="false"/> <constant name="struts.convention.action.checkImplementsAction" value="true"/> <constant name="struts.convention.default.parent.package" value="convention-default"/> @@ -50,7 +51,7 @@ <constant name="struts.convention.exclude.packages" value="org.apache.struts.*,org.apache.struts2.*,org.springframework.web.struts.*,org.springframework.web.struts2.*,org.hibernate.*"/> <constant name="struts.convention.relative.result.types" value="dispatcher,velocity,freemarker"/> <constant name="struts.convention.redirect.to.slash" value="true"/> - <constant name="struts.mapper.alwaysSelectFullNamespace" value="true"/> + <constant name="struts.mapper.alwaysSelectFullNamespace" value="true"/> <package name="convention-default" extends="struts-default"> </package> Added: struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts.properties URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts.properties?rev=662439&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts.properties (added) +++ struts/sandbox/trunk/struts2-convention-plugin/src/main/resources/struts.properties Mon Jun 2 06:55:51 2008 @@ -0,0 +1,18 @@ +struts.convention.action.excludeJars = .*/activemq-(core|ra)-[\\d.]+.jar(!/)?, \ + .*/catalina.*?jar(!/)?, \ + .*/tomcat.*?jar(!/)?, \ + .*/junit-[\\d.]+.jar(!/)?, \ + .*/log4j-[\\d.]+.jar(!/)?, \ + .*/xwork-[\\d.]+.jar(!/)?, \ + .*/ognl-[\\d.]+.jar(!/)?, \ + .*/aopalliance-[\\d.]+.jar(!/)?, \ + .*/jstl-[\\d.]+.jar(!/)?, \ + .*/dwr-[\\d.]+.jar(!/)?, \ + .*/freemarker-[\\d.]+.jar(!/)?, \ + .*/servlet-api-[\\d.]+.jar(!/)?, \ + .*/sitemesh-[\\d.]+.jar(!/)?, \ + .*/commons-(beanutils|el|digester|fileupload|codec|chain|logging|cli|pool|lang|collections|dbcp)-[\\d.]+.jar(!/)?, \ + .*/spring-(beans|context|core|mock|web|jdbc)-[\\d.]+.jar(!/)?, \ + .*/velocity-[\\d.]+.jar(!/)?, \ + .*/velocity-(dep|tools)-[\\d.]+.jar(!/)?, \ + .*/struts2-(config-browser-plugin|core|dojo-plugin|dwr-plugin|jsf-plugin|sitemesh-plugin|spring-plugin|struts1-plugin|tiles-plugin)-[\\d.]+.jar(!/)? \ No newline at end of file Modified: struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java?rev=662439&r1=662438&r2=662439&view=diff ============================================================================== --- struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java (original) +++ struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java Mon Jun 2 06:55:51 2008 @@ -41,6 +41,7 @@ import org.apache.struts2.convention.actions.action.ActionNamesAction; import org.apache.struts2.convention.actions.action.SingleActionNameAction; import org.apache.struts2.convention.actions.action.TestAction; +import org.apache.struts2.convention.actions.action.TestExtends; import org.apache.struts2.convention.actions.exception.ExceptionsActionLevelAction; import org.apache.struts2.convention.actions.exception.ExceptionsMethodLevelAction; import org.apache.struts2.convention.actions.interceptor.ActionLevelInterceptor2Action; @@ -172,6 +173,7 @@ expect(resultMapBuilder.build(ActionNamesAction.class, getAnnotation(ActionNamesAction.class, "run", Actions.class).value()[1], "actions2", actionPkg)).andReturn(results); expect(resultMapBuilder.build(SingleActionNameAction.class, getAnnotation(SingleActionNameAction.class, "run", Action.class), "action", actionPkg)).andReturn(results); expect(resultMapBuilder.build(TestAction.class, null, "test", actionPkg)).andReturn(results); + expect(resultMapBuilder.build(TestExtends.class, null, "test-extends", actionPkg)).andReturn(results); /* org.apache.struts2.convention.actions.idx */ /* org.apache.struts2.convention.actions.idx.idx2 */ @@ -257,6 +259,7 @@ interceptorBuilder.setConfiguration(configuration); PackageBasedActionConfigBuilder builder = new PackageBasedActionConfigBuilder(configuration, actionNameBuilder, resultMapBuilder, interceptorBuilder ,of, "false", "struts-default"); + builder.setDisableJarScanning("true"); if (actionPackages != null) { builder.setActionPackages(actionPackages); } @@ -272,13 +275,14 @@ /* org.apache.struts2.convention.actions.action */ PackageConfig pkgConfig = configuration.getPackageConfig("org.apache.struts2.convention.actions.action#struts-default#/action"); assertNotNull(pkgConfig); - assertEquals(6, pkgConfig.getActionConfigs().size()); + assertEquals(7, pkgConfig.getActionConfigs().size()); verifyActionConfig(pkgConfig, "action1", ActionNameAction.class, "run1", pkgConfig.getName()); verifyActionConfig(pkgConfig, "action2", ActionNameAction.class, "run2", pkgConfig.getName()); verifyActionConfig(pkgConfig, "actions1", ActionNamesAction.class, "run", pkgConfig.getName()); verifyActionConfig(pkgConfig, "actions2", ActionNamesAction.class, "run", pkgConfig.getName()); verifyActionConfig(pkgConfig, "action", SingleActionNameAction.class, "run", pkgConfig.getName()); verifyActionConfig(pkgConfig, "test", TestAction.class, "execute", pkgConfig.getName()); + verifyActionConfig(pkgConfig, "test-extends", TestExtends.class, "execute", pkgConfig.getName()); /* org.apache.struts2.convention.actions.namespace3 */ //action on namespace1 (action level) Added: struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestBase.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestBase.java?rev=662439&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestBase.java (added) +++ struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestBase.java Mon Jun 2 06:55:51 2008 @@ -0,0 +1,27 @@ +/* + * $Id$ + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.struts2.convention.actions.action; + +import com.opensymphony.xwork2.ActionSupport; + +public abstract class TestBase extends ActionSupport { + +} Propchange: struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestBase.java ------------------------------------------------------------------------------ svn:keywords = Id Added: struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestExtends.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestExtends.java?rev=662439&view=auto ============================================================================== --- struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestExtends.java (added) +++ struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestExtends.java Mon Jun 2 06:55:51 2008 @@ -0,0 +1,25 @@ +/* + * $Id$ + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.struts2.convention.actions.action; + +public class TestExtends extends TestBase { + +} Propchange: struts/sandbox/trunk/struts2-convention-plugin/src/test/java/org/apache/struts2/convention/actions/action/TestExtends.java ------------------------------------------------------------------------------ svn:keywords = Id