You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2012/11/06 13:18:21 UTC
svn commit: r1406110 - in /struts/struts2/trunk:
plugins/convention/src/main/java/org/apache/struts2/convention/
plugins/embeddedjsp/src/main/java/org/apache/struts2/
xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/
Author: lukaszlenart
Date: Tue Nov 6 12:18:21 2012
New Revision: 1406110
URL: http://svn.apache.org/viewvc?rev=1406110&view=rev
Log:
WW-3917 removes FileManager dependency from UrlSet
Modified:
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPLoader.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/UrlSet.java
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=1406110&r1=1406109&r2=1406110&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 Nov 6 12:18:21 2012
@@ -65,6 +65,7 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -80,6 +81,7 @@ import java.util.regex.Pattern;
public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
private static final Logger LOG = LoggerFactory.getLogger(PackageBasedActionConfigBuilder.class);
+ private static final boolean EXTRACT_BASE_INTERFACES = true;
private final Configuration configuration;
private final ActionNameBuilder actionNameBuilder;
@@ -384,7 +386,8 @@ public class PackageBasedActionConfigBui
// only considers classes that match the action packages
// specified by the user
Test<String> classPackageTest = getClassPackageTest();
- ClassFinder finder = new ClassFinder(getClassLoaderInterface(), buildUrlSet().getUrls(), true, this.fileProtocols, classPackageTest);
+ List<URL> urls = readUrls();
+ ClassFinder finder = new ClassFinder(getClassLoaderInterface(), urls, EXTRACT_BASE_INTERFACES, fileProtocols, classPackageTest);
Test<ClassFinder.ClassInfo> test = getActionClassTest();
classes.addAll(finder.findClasses(test));
@@ -397,9 +400,19 @@ public class PackageBasedActionConfigBui
return classes;
}
+ private List<URL> readUrls() throws IOException {
+ List<URL> list = buildUrlSet().getUrls();
+ // Usually the "classes" dir.
+ ArrayList<URL> classesList = Collections.list(getClassLoaderInterface().getResources(""));
+ for (URL url : classesList) {
+ list.addAll(fileManager.getAllPhysicalUrls(url));
+ }
+ return list;
+ }
+
private UrlSet buildUrlSet() throws IOException {
ClassLoaderInterface classLoaderInterface = getClassLoaderInterface();
- UrlSet urlSet = new UrlSet(fileManager, classLoaderInterface, this.fileProtocols);
+ UrlSet urlSet = new UrlSet(classLoaderInterface, this.fileProtocols);
//excluding the urls found by the parent class loader is desired, but fails in JBoss (all urls are removed)
if (excludeParentClassLoader) {
@@ -425,7 +438,11 @@ public class PackageBasedActionConfigBui
}
//try to find classes dirs inside war files
- urlSet = urlSet.includeClassesUrl(classLoaderInterface);
+ urlSet = urlSet.includeClassesUrl(classLoaderInterface, new UrlSet.FileProtocolNormalizer() {
+ public URL normalizeToFileProtocol(URL url) {
+ return fileManager.normalizeToFileProtocol(url);
+ }
+ });
urlSet = urlSet.excludeJavaExtDirs();
@@ -472,7 +489,7 @@ public class PackageBasedActionConfigBui
}
}
}
- return new UrlSet(fileManager, includeUrls);
+ return new UrlSet(includeUrls);
}
return urlSet;
Modified: struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPLoader.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPLoader.java?rev=1406110&r1=1406109&r2=1406110&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPLoader.java (original)
+++ struts/struts2/trunk/plugins/embeddedjsp/src/main/java/org/apache/struts2/JSPLoader.java Tue Nov 6 12:18:21 2012
@@ -184,7 +184,7 @@ public class JSPLoader {
//find available jars
ClassLoaderInterface classLoaderInterface = getClassLoaderInterface();
- UrlSet urlSet = new UrlSet(fileManager, classLoaderInterface);
+ UrlSet urlSet = new UrlSet(classLoaderInterface);
//find jars
List<URL> urls = urlSet.getUrls();
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/UrlSet.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/UrlSet.java?rev=1406110&r1=1406109&r2=1406110&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/UrlSet.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/UrlSet.java Tue Nov 6 12:18:21 2012
@@ -15,7 +15,6 @@
*/
package com.opensymphony.xwork2.util.finder;
-import com.opensymphony.xwork2.FileManager;
import com.opensymphony.xwork2.util.logging.Logger;
import com.opensymphony.xwork2.util.logging.LoggerFactory;
import org.apache.commons.lang3.ObjectUtils;
@@ -26,6 +25,7 @@ import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
@@ -50,40 +50,41 @@ import java.util.Set;
* @version $Rev$ $Date$
*/
public class UrlSet {
+
private static final Logger LOG = LoggerFactory.getLogger(UrlSet.class);
+
private final Map<String,URL> urls;
private Set<String> protocols;
- private FileManager fileManager;
- public UrlSet(FileManager fileManager, ClassLoaderInterface classLoader) throws IOException {
- this(fileManager);
+ private UrlSet() {
+ this.urls = new HashMap<String,URL>();
+ }
+
+ public UrlSet(ClassLoaderInterface classLoader) throws IOException {
+ this();
load(getUrls(classLoader));
}
- public UrlSet(FileManager fileManager, ClassLoaderInterface classLoader, Set<String> protocols) throws IOException {
- this(fileManager);
+ public UrlSet(ClassLoaderInterface classLoader, Set<String> protocols) throws IOException {
+ this();
this.protocols = protocols;
- this.fileManager = fileManager;
load(getUrls(classLoader, protocols));
}
+ public UrlSet(URL... urls){
+ this(Arrays.asList(urls));
+ }
/**
* Ignores all URLs that are not "jar" or "file"
* @param urls
*/
- public UrlSet(FileManager fileManager, Collection<URL> urls){
- this(fileManager);
+ public UrlSet(Collection<URL> urls){
+ this();
load(urls);
}
- private UrlSet(FileManager fileManager) {
- this.urls = new HashMap<String,URL>();
- this.fileManager = fileManager;
- }
-
- private UrlSet(FileManager fileManager, Map<String, URL> urls) {
+ private UrlSet(Map<String, URL> urls) {
this.urls = urls;
- this.fileManager = fileManager;
}
private void load(Collection<URL> urls){
@@ -91,7 +92,9 @@ public class UrlSet {
try {
this.urls.put(location.toExternalForm(), location);
} catch (Exception e) {
- e.printStackTrace();
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Cannot translate url to external form!", e);
+ }
}
}
}
@@ -99,7 +102,7 @@ public class UrlSet {
public UrlSet include(UrlSet urlSet){
Map<String, URL> urls = new HashMap<String, URL>(this.urls);
urls.putAll(urlSet.urls);
- return new UrlSet(fileManager, urls);
+ return new UrlSet(urls);
}
public UrlSet exclude(UrlSet urlSet) {
@@ -108,11 +111,11 @@ public class UrlSet {
for (String url : parentUrls.keySet()) {
urls.remove(url);
}
- return new UrlSet(fileManager, urls);
+ return new UrlSet(urls);
}
public UrlSet exclude(ClassLoaderInterface parent) throws IOException {
- return exclude(new UrlSet(fileManager, parent, this.protocols));
+ return exclude(new UrlSet(parent, this.protocols));
}
public UrlSet exclude(File file) throws MalformedURLException {
@@ -177,13 +180,13 @@ public class UrlSet {
urls.put(url, entry.getValue());
}
}
- return new UrlSet(fileManager, urls);
+ return new UrlSet(urls);
}
/**
* Try to find a classes directory inside a war file add its normalized url to this set
*/
- public UrlSet includeClassesUrl(ClassLoaderInterface classLoaderInterface) throws IOException {
+ public UrlSet includeClassesUrl(ClassLoaderInterface classLoaderInterface, FileProtocolNormalizer normalizer) throws IOException {
Enumeration<URL> rootUrlEnumeration = classLoaderInterface.getResources("");
while (rootUrlEnumeration.hasMoreElements()) {
URL url = rootUrlEnumeration.nextElement();
@@ -192,14 +195,14 @@ public class UrlSet {
//if it is inside a war file, get the url to the file
externalForm = StringUtils.substringBefore(externalForm, "/WEB-INF/classes");
URL warUrl = new URL(externalForm);
- URL normalizedUrl = fileManager.normalizeToFileProtocol(warUrl);
+ URL normalizedUrl = normalizer.normalizeToFileProtocol(warUrl);
URL finalUrl = ObjectUtils.defaultIfNull(normalizedUrl, warUrl);
Map<String, URL> newUrls = new HashMap<String, URL>(this.urls);
if ("jar".equals(finalUrl.getProtocol()) || "file".equals(finalUrl.getProtocol())) {
newUrls.put(finalUrl.toExternalForm(), finalUrl);
}
- return new UrlSet(fileManager, newUrls);
+ return new UrlSet(newUrls);
}
}
@@ -207,7 +210,7 @@ public class UrlSet {
}
public UrlSet relative(File file) throws MalformedURLException {
- String urlPath = file.toURL().toExternalForm();
+ String urlPath = file.toURI().toURL().toExternalForm();
Map<String, URL> urls = new HashMap<String, URL>();
for (Map.Entry<String, URL> entry : this.urls.entrySet()) {
String url = entry.getKey();
@@ -215,7 +218,7 @@ public class UrlSet {
urls.put(url, entry.getValue());
}
}
- return new UrlSet(fileManager, urls);
+ return new UrlSet(urls);
}
public List<URL> getUrls() {
@@ -265,14 +268,13 @@ public class UrlSet {
LOG.debug("Ignoring URL [#0] because it is not a valid protocol", url.toExternalForm());
}
+ return list;
+ }
- // Usually the "classes" dir.
- ArrayList<URL> classesList = Collections.list(classLoader.getResources(""));
- for (URL url : classesList) {
- list.addAll(fileManager.getAllPhysicalUrls(url));
- }
+ public static interface FileProtocolNormalizer {
+
+ URL normalizeToFileProtocol(URL url);
- return list;
}
}