You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2016/10/05 09:40:55 UTC

svn commit: r1763375 - in /tomcat/trunk: build.xml java/org/apache/catalina/webresources/war/WarURLConnection.java java/org/apache/tomcat/util/buf/UriUtil.java java/org/apache/tomcat/util/scan/JarFactory.java

Author: markt
Date: Wed Oct  5 09:40:54 2016
New Revision: 1763375

URL: http://svn.apache.org/viewvc?rev=1763375&view=rev
Log:
Add support for using 'war:file:...' URLs to refer to WAR files rather than 'jar:file:...'

Modified:
    tomcat/trunk/build.xml
    tomcat/trunk/java/org/apache/catalina/webresources/war/WarURLConnection.java
    tomcat/trunk/java/org/apache/tomcat/util/buf/UriUtil.java
    tomcat/trunk/java/org/apache/tomcat/util/scan/JarFactory.java

Modified: tomcat/trunk/build.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/build.xml?rev=1763375&r1=1763374&r2=1763375&view=diff
==============================================================================
--- tomcat/trunk/build.xml (original)
+++ tomcat/trunk/build.xml Wed Oct  5 09:40:54 2016
@@ -339,6 +339,7 @@
     <include name="org/apache/catalina/startup/Tool.*" />
     <include name="org/apache/catalina/security/SecurityClassLoad.*" />
     <include name="org/apache/catalina/webresources/war/**" />
+    <include name="org/apache/tomcat/util/buf/UriUtil.*" />
   </patternset>
 
   <patternset id="files.tomcat-juli">

Modified: tomcat/trunk/java/org/apache/catalina/webresources/war/WarURLConnection.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/war/WarURLConnection.java?rev=1763375&r1=1763374&r2=1763375&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/war/WarURLConnection.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/war/WarURLConnection.java Wed Oct  5 09:40:54 2016
@@ -22,6 +22,8 @@ import java.net.URL;
 import java.net.URLConnection;
 import java.security.Permission;
 
+import org.apache.tomcat.util.buf.UriUtil;
+
 
 public class WarURLConnection extends URLConnection {
 
@@ -30,18 +32,7 @@ public class WarURLConnection extends UR
 
     protected WarURLConnection(URL url) throws IOException {
         super(url);
-
-        // Need to make this look like a JAR URL for the WAR file
-        // Assumes that the spec is absolute and starts war:file:/...
-        String file = url.getFile();
-        if (file.contains("*/")) {
-            file = file.replaceFirst("\\*/", "!/");
-        } else {
-            file = file.replaceFirst("\\^/", "!/");
-        }
-
-        URL innerJarUrl = new URL("jar", url.getHost(), url.getPort(), file);
-
+        URL innerJarUrl = UriUtil.warToJar(url);
         wrappedJarUrlConnection = innerJarUrl.openConnection();
     }
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/buf/UriUtil.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/buf/UriUtil.java?rev=1763375&r1=1763374&r2=1763375&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/buf/UriUtil.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/buf/UriUtil.java Wed Oct  5 09:40:54 2016
@@ -128,4 +128,27 @@ public final class UriUtil {
         tmp = PATTERN_CARET.matcher(tmp).replaceAll("%5e/");
         return PATTERN_ASTERISK.matcher(tmp).replaceAll("%2a/");
     }
+
+
+    /**
+     * Convert a URL of the form <code>war:file:...</code> to
+     * <code>war:file:...</code>.
+     *
+     * @param warUrl The WAR URL to convert
+     *
+     * @return The equivalent JAR URL
+     *
+     * @throws MalformedURLException If the conversion fails
+     */
+    public static URL warToJar(URL warUrl) throws MalformedURLException {
+        // Assumes that the spec is absolute and starts war:file:/...
+        String file = warUrl.getFile();
+        if (file.contains("*/")) {
+            file = file.replaceFirst("\\*/", "!/");
+        } else {
+            file = file.replaceFirst("\\^/", "!/");
+        }
+
+        return new URL("jar", warUrl.getHost(), warUrl.getPort(), file);
+    }
 }

Modified: tomcat/trunk/java/org/apache/tomcat/util/scan/JarFactory.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/scan/JarFactory.java?rev=1763375&r1=1763374&r2=1763375&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/scan/JarFactory.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/scan/JarFactory.java Wed Oct  5 09:40:54 2016
@@ -21,6 +21,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 
 import org.apache.tomcat.Jar;
+import org.apache.tomcat.util.buf.UriUtil;
 
 /**
  * Provide a mechanism to obtain objects that implement {@link Jar}.
@@ -31,21 +32,26 @@ public class JarFactory {
         // Factory class. Hide public constructor.
     }
 
+
     public static Jar newInstance(URL url) throws IOException {
-        String jarUrl = url.toString();
-        if (jarUrl.startsWith("jar:file:")) {
-            if (jarUrl.endsWith("!/")) {
+        String urlString = url.toString();
+        if (urlString.startsWith("jar:file:")) {
+            if (urlString.endsWith("!/")) {
                 return new JarFileUrlJar(url, true);
             } else {
                 return new JarFileUrlNestedJar(url);
             }
-        } else if (jarUrl.startsWith("file:")) {
+        } else if (urlString.startsWith("war:file:")) {
+            URL jarUrl = UriUtil.warToJar(url);
+            return new JarFileUrlNestedJar(jarUrl);
+        } else if (urlString.startsWith("file:")) {
             return new JarFileUrlJar(url, false);
         } else {
             return new UrlJar(url);
         }
     }
 
+
     public static URL getJarEntryURL(URL baseUrl, String entryName)
             throws MalformedURLException {
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org