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); }