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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org