You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mu...@apache.org on 2008/06/02 15:55:52 UTC
svn commit: r662439 - in /struts/sandbox/trunk/struts2-convention-plugin: ./
src/main/java/org/apache/struts2/convention/ src/main/resources/
src/test/java/org/apache/struts2/convention/
src/test/java/org/apache/struts2/convention/actions/action/
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