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 2013/09/06 16:18:59 UTC

svn commit: r1520575 - in /tomcat/trunk: java/org/apache/catalina/webresources/ test/org/apache/catalina/webresources/ webapps/docs/config/

Author: markt
Date: Fri Sep  6 14:18:59 2013
New Revision: 1520575

URL: http://svn.apache.org/r1520575
Log:
Fix some issues with the new Resources implementation reported by Dan Mikusa:
- The zero-arg constructors for WebResourceSet implementations were either missing or always failed meaning that they could not be specified in a context.xml file as the digester was unable to create them
- The internalPath attribute was not configurable

Modified:
    tomcat/trunk/java/org/apache/catalina/webresources/AbstractFileResourceSet.java
    tomcat/trunk/java/org/apache/catalina/webresources/AbstractResourceSet.java
    tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java
    tomcat/trunk/java/org/apache/catalina/webresources/FileResourceSet.java
    tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java
    tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java
    tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java
    tomcat/trunk/test/org/apache/catalina/webresources/TestDirResourceSet.java
    tomcat/trunk/test/org/apache/catalina/webresources/TestFileResourceSet.java
    tomcat/trunk/test/org/apache/catalina/webresources/TestJarResourceSet.java
    tomcat/trunk/test/org/apache/catalina/webresources/TestJarResourceSetInternal.java
    tomcat/trunk/webapps/docs/config/resources.xml

Modified: tomcat/trunk/java/org/apache/catalina/webresources/AbstractFileResourceSet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/AbstractFileResourceSet.java?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/AbstractFileResourceSet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/AbstractFileResourceSet.java Fri Sep  6 14:18:59 2013
@@ -26,13 +26,12 @@ public abstract class AbstractFileResour
 
     protected static final String[] EMPTY_STRING_ARRAY = new String[0];
 
-    protected final String internalPath;
     protected File fileBase;
     protected String absoluteBase;
     protected String canonicalBase;
 
     protected AbstractFileResourceSet(String internalPath) {
-        this.internalPath = checkInternalPath(internalPath);
+        setInternalPath(internalPath);
     }
 
     protected File file(String name, boolean mustExist) {
@@ -104,7 +103,7 @@ public abstract class AbstractFileResour
     //-------------------------------------------------------- Lifecycle methods
     @Override
     protected void initInternal() throws LifecycleException {
-        fileBase = new File(getBase(), internalPath);
+        fileBase = new File(getBase(), getInternalPath());
         checkType(fileBase);
 
         String absolutePath = fileBase.getAbsolutePath();

Modified: tomcat/trunk/java/org/apache/catalina/webresources/AbstractResourceSet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/AbstractResourceSet.java?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/AbstractResourceSet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/AbstractResourceSet.java Fri Sep  6 14:18:59 2013
@@ -28,8 +28,10 @@ public abstract class AbstractResourceSe
 
     private WebResourceRoot root;
     private String base;
+    private String internalPath;
     private String webAppMount;
 
+
     protected static final StringManager sm =
             StringManager.getManager(Constants.Package);
 
@@ -40,15 +42,6 @@ public abstract class AbstractResourceSe
         }
     }
 
-    protected final String checkInternalPath(String internalPath) {
-        checkPath(internalPath);
-        // Optimise internal processing
-        if (internalPath.equals("/")) {
-            return "";
-        }
-        return internalPath;
-    }
-
     @Override
     public final void setRoot(WebResourceRoot root) {
         this.root = root;
@@ -58,6 +51,21 @@ public abstract class AbstractResourceSe
         return root;
     }
 
+
+    public String getInternalPath() {
+        return internalPath;
+    }
+
+    public void setInternalPath(String internalPath) {
+        checkPath(internalPath);
+        // Optimise internal processing
+        if (internalPath.equals("/")) {
+            this.internalPath = "";
+        } else {
+            this.internalPath = internalPath;
+        }
+    }
+
     public final void setWebAppMount(String webAppMount) {
         checkPath(webAppMount);
         // Optimise internal processing

Modified: tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java Fri Sep  6 14:18:59 2013
@@ -38,7 +38,7 @@ public class DirResourceSet extends Abst
      * A no argument constructor is required for this to work with the digester.
      */
     public DirResourceSet() {
-        super("");
+        super("/");
     }
 
     /**

Modified: tomcat/trunk/java/org/apache/catalina/webresources/FileResourceSet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/FileResourceSet.java?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/FileResourceSet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/FileResourceSet.java Fri Sep  6 14:18:59 2013
@@ -35,7 +35,7 @@ public class FileResourceSet extends Abs
      * A no argument constructor is required for this to work with the digester.
      */
     public FileResourceSet() {
-        super("");
+        super("/");
     }
 
     /**

Modified: tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java Fri Sep  6 14:18:59 2013
@@ -40,7 +40,12 @@ public class JarResourceSet extends Abst
 
     private HashMap<String,JarEntry> jarFileEntries = new HashMap<>();
     private String baseUrl;
-    private final String internalPath;
+
+    /**
+     * A no argument constructor is required for this to work with the digester.
+     */
+    public JarResourceSet() {
+    }
 
     /**
      * Creates a new {@link org.apache.catalina.WebResourceSet} based on a JAR
@@ -63,8 +68,8 @@ public class JarResourceSet extends Abst
             String internalPath) throws IllegalArgumentException {
         setRoot(root);
         setBase(base);
+        setInternalPath(internalPath);
         setWebAppMount(webAppMount);
-        this.internalPath = checkInternalPath(internalPath);
 
         if (getRoot().getState().isAvailable()) {
             try {
@@ -100,7 +105,7 @@ public class JarResourceSet extends Abst
         // an empty resource for requests outside of the mount point.
 
         if (path.startsWith(webAppMount)) {
-            String pathInJar = internalPath + path.substring(
+            String pathInJar = getInternalPath() + path.substring(
                     webAppMount.length(), path.length());
             // Always strip off the leading '/' to get the JAR path
             if (pathInJar.charAt(0) == '/') {
@@ -125,7 +130,7 @@ public class JarResourceSet extends Abst
                     return new EmptyResource(root, path);
                 } else {
                     return new JarResource(root, getBase(), baseUrl, jarEntry,
-                            internalPath, path);
+                            getInternalPath(), path);
                 }
             }
         } else {
@@ -141,7 +146,7 @@ public class JarResourceSet extends Abst
         ArrayList<String> result = new ArrayList<>();
         if (path.startsWith(webAppMount)) {
             String pathInJar =
-                    internalPath + path.substring(webAppMount.length());
+                    getInternalPath() + path.substring(webAppMount.length());
             // Always strip off the leading '/' to get the JAR path
             if (pathInJar.charAt(0) == '/') {
                 pathInJar = pathInJar.substring(1);
@@ -193,7 +198,7 @@ public class JarResourceSet extends Abst
         ResourceSet<String> result = new ResourceSet<>();
         if (path.startsWith(webAppMount)) {
             String pathInJar =
-                    internalPath + path.substring(webAppMount.length());
+                    getInternalPath() + path.substring(webAppMount.length());
             // Always strip off the leading '/' to get the JAR path and make
             // sure it ends in '/'
             if (pathInJar.charAt(pathInJar.length() - 1) != '/') {
@@ -212,7 +217,7 @@ public class JarResourceSet extends Abst
                     if (nextSlash == -1 || nextSlash == name.length() - 1) {
                         if (name.startsWith(pathInJar)) {
                             result.add(webAppMount + '/' +
-                                    name.substring(internalPath.length()));
+                                    name.substring(getInternalPath().length()));
                         }
                     }
                 }

Modified: tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java (original)
+++ tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java Fri Sep  6 14:18:59 2013
@@ -351,4 +351,8 @@ public abstract class AbstractTestResour
                     getMount() + "/new-test", is, false));
         }
     }
+
+    // ------------------------------------------------------------ constructors
+
+    public abstract void testNoArgConstructor();
 }

Modified: tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java (original)
+++ tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java Fri Sep  6 14:18:59 2013
@@ -67,4 +67,9 @@ public abstract class AbstractTestResour
         InputStream is = new ByteArrayInputStream("test".getBytes());
         Assert.assertFalse(resourceRoot.write("/", is, false));
     }
+
+    @Override
+    public void testNoArgConstructor() {
+        // NO-OP
+    }
 }

Modified: tomcat/trunk/test/org/apache/catalina/webresources/TestDirResourceSet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/TestDirResourceSet.java?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/webresources/TestDirResourceSet.java (original)
+++ tomcat/trunk/test/org/apache/catalina/webresources/TestDirResourceSet.java Fri Sep  6 14:18:59 2013
@@ -18,6 +18,8 @@ package org.apache.catalina.webresources
 
 import java.io.File;
 
+import org.junit.Test;
+
 import org.apache.catalina.WebResourceRoot;
 import org.apache.catalina.WebResourceSet;
 
@@ -43,4 +45,11 @@ public class TestDirResourceSet extends 
     public String getBaseDir() {
         return "test/webresources/dir1";
     }
+
+    @Override
+    @Test
+    public void testNoArgConstructor() {
+        @SuppressWarnings("unused")
+        Object obj = new DirResourceSet();
+    }
 }

Modified: tomcat/trunk/test/org/apache/catalina/webresources/TestFileResourceSet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/TestFileResourceSet.java?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/webresources/TestFileResourceSet.java (original)
+++ tomcat/trunk/test/org/apache/catalina/webresources/TestFileResourceSet.java Fri Sep  6 14:18:59 2013
@@ -18,6 +18,8 @@ package org.apache.catalina.webresources
 
 import java.io.File;
 
+import org.junit.Test;
+
 import org.apache.catalina.WebResourceRoot;
 import org.apache.catalina.WebResourceSet;
 
@@ -60,4 +62,11 @@ public class TestFileResourceSet extends
     public String getBaseDir() {
         return "test/webresources/dir2";
     }
+
+    @Override
+    @Test
+    public void testNoArgConstructor() {
+        @SuppressWarnings("unused")
+        Object obj = new FileResourceSet();
+    }
 }

Modified: tomcat/trunk/test/org/apache/catalina/webresources/TestJarResourceSet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/TestJarResourceSet.java?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/webresources/TestJarResourceSet.java (original)
+++ tomcat/trunk/test/org/apache/catalina/webresources/TestJarResourceSet.java Fri Sep  6 14:18:59 2013
@@ -18,6 +18,8 @@ package org.apache.catalina.webresources
 
 import java.io.File;
 
+import org.junit.Test;
+
 import org.apache.catalina.WebResourceRoot;
 import org.apache.catalina.WebResourceSet;
 
@@ -42,4 +44,11 @@ public class TestJarResourceSet extends 
     public String getBaseDir() {
         return "test/webresources";
     }
+
+    @Override
+    @Test
+    public void testNoArgConstructor() {
+        @SuppressWarnings("unused")
+        Object obj = new JarResourceSet();
+    }
 }

Modified: tomcat/trunk/test/org/apache/catalina/webresources/TestJarResourceSetInternal.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/TestJarResourceSetInternal.java?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/webresources/TestJarResourceSetInternal.java (original)
+++ tomcat/trunk/test/org/apache/catalina/webresources/TestJarResourceSetInternal.java Fri Sep  6 14:18:59 2013
@@ -18,6 +18,8 @@ package org.apache.catalina.webresources
 
 import java.io.File;
 
+import org.junit.Test;
+
 import org.apache.catalina.WebResourceRoot;
 import org.apache.catalina.WebResourceSet;
 
@@ -42,4 +44,11 @@ public class TestJarResourceSetInternal 
     public String getBaseDir() {
         return "test/webresources";
     }
+
+    @Override
+    @Test
+    public void testNoArgConstructor() {
+        @SuppressWarnings("unused")
+        Object obj = new JarResourceSet();
+    }
 }

Modified: tomcat/trunk/webapps/docs/config/resources.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/resources.xml?rev=1520575&r1=1520574&r2=1520575&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/resources.xml (original)
+++ tomcat/trunk/webapps/docs/config/resources.xml Fri Sep  6 14:18:59 2013
@@ -132,8 +132,8 @@
       the resources are not located at the root of the JAR as is the case with
       resource JARs. This attribute is required by the
       <code>org.apache.catalina.WebResourceSet</code> implementations provided
-      by Tomcat. Custom implementations may not require it. If not specified,
-      the default value of the empty string will be used.</p>
+      by Tomcat and must start with '/'. Custom implementations may not require
+      it. If not specified, the default value '/' will be used.</p>
     </attribute>
 
     <attribute name="webAppMount" required="false">
@@ -142,7 +142,7 @@
       <code>org.apache.catalina.WebResourceSet</code> implementations provided
       by Tomcat, this attribute is required and must start with '/'. Custom
       implementations may not require it. If not specified, the default value of
-      "/" will be used.</p>
+      '/' will be used.</p>
     </attribute>
 
   </attributes>



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