Author: lukaszlenart
Date: Fri Apr 27 12:12:03 2012
New Revision: 1331373
URL: http://svn.apache.org/viewvc?rev=1331373&view=rev
Log:
WW-3803 improves support for JAR inside EAR package when used with JBoss 7
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/URLUtil.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/UrlSet.java
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/URLUtil.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/URLUtil.java?rev=1331373&r1=1331372&r2=1331373&view=diff
==============================================================================
---
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/URLUtil.java
(original)
+++
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/URLUtil.java
Fri Apr 27 12:12:03 2012
@@ -23,6 +23,8 @@ import java.io.IOException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -123,8 +125,7 @@ public class URLUtil {
Object content = url.openConnection().getContent();
try {
if (content.getClass().toString().startsWith("class
org.jboss.vfs.VirtualFile")) {
- Method method =
content.getClass().getDeclaredMethod("getPhysicalFile");
- File physicalFile = (File) method.invoke(content);
+ File physicalFile = readJBossPhysicalFile(content);
return physicalFile.toURI().toURL();
}
} catch (Exception e) {
@@ -133,4 +134,44 @@ public class URLUtil {
return url;
}
+ public static List<URL> getAllJBossPhysicalUrls(URL url) throws
IOException {
+ List<URL> urls = new ArrayList<URL>();
+ Object content = url.openConnection().getContent();
+ try {
+ if (content.getClass().toString().startsWith("class
org.jboss.vfs.VirtualFile")) {
+ File physicalFile = readJBossPhysicalFile(content);
+ readFile(urls, physicalFile);
+ readFile(urls, physicalFile.getParentFile());
+ } else {
+ urls.add(url);
+ }
+ } catch (Exception e) {
+ LOG.warn("Error calling getPhysicalFile() on JBoss VirtualFile.",
e);
+ }
+ return urls;
+ }
+
+ private static File readJBossPhysicalFile(Object content) throws Exception
{
+ Method method =
content.getClass().getDeclaredMethod("getPhysicalFile");
+ return (File) method.invoke(content);
+ }
+
+ private static void readFile(List<URL> urls, File physicalFile) throws
MalformedURLException {
+ if (physicalFile.isDirectory()) {
+ for (File file : physicalFile.listFiles()) {
+ if (file.isFile()) {
+ addIfAbsent(urls, file.toURI().toURL());
+ } else if (file.isDirectory()) {
+ readFile(urls, file);
+ }
+ }
+ }
+ }
+
+ private static void addIfAbsent(List<URL> urls, URL fileUrl) {
+ if (!urls.contains(fileUrl)) {
+ urls.add(fileUrl);
+ }
+ }
+
}
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=1331373&r1=1331372&r2=1331373&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
Fri Apr 27 12:12:03 2012
@@ -264,7 +264,7 @@ public class UrlSet {
ArrayList<URL> classesList =
Collections.list(classLoader.getResources(""));
for (URL url : classesList) {
if (URLUtil.isJBossUrl(url)) {
- list.add(URLUtil.getJBossPhysicalUrl(url));
+ list.addAll(URLUtil.getAllJBossPhysicalUrls(url));
} else {
list.add(url);
}