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 2012/11/01 19:54:15 UTC
svn commit: r1404724 - in /tomcat/trunk: java/org/apache/catalina/
java/org/apache/catalina/servlets/ java/org/apache/catalina/webresources/
test/org/apache/catalina/webresources/
Author: markt
Date: Thu Nov 1 18:54:14 2012
New Revision: 1404724
URL: http://svn.apache.org/viewvc?rev=1404724&view=rev
Log:
Restore ability for HTTP PUT to overwrite an existing resource
Modified:
tomcat/trunk/java/org/apache/catalina/WebResourceRoot.java
tomcat/trunk/java/org/apache/catalina/WebResourceSet.java
tomcat/trunk/java/org/apache/catalina/servlets/DefaultServlet.java
tomcat/trunk/java/org/apache/catalina/servlets/WebdavServlet.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/java/org/apache/catalina/webresources/StandardRoot.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/TesterWebResourceRoot.java
Modified: tomcat/trunk/java/org/apache/catalina/WebResourceRoot.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/WebResourceRoot.java?rev=1404724&r1=1404723&r2=1404724&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/WebResourceRoot.java (original)
+++ tomcat/trunk/java/org/apache/catalina/WebResourceRoot.java Thu Nov 1 18:54:14 2012
@@ -161,14 +161,18 @@ public interface WebResourceRoot extends
* Create a new resource at the requested path using the provided
* InputStream.
*
- * @param path The path to be used for the new Resource. It is relative to
- * the root of the web application and must start with '/'.
- * @param is The InputStream that will provide the content for the new
- * Resource.
+ * @param path The path to be used for the new Resource. It is relative
+ * to the root of the web application and must start with
+ * '/'.
+ * @param is The InputStream that will provide the content for the
+ * new Resource.
+ * @param overwrite If <code>true</code> and the resource already exists it
+ * will be overwritten. If <code>false</code> and the
+ * resource already exists the write will fail.
*
* @return <code>true</code> if and only if the new Resource is written
*/
- boolean write(String path, InputStream is);
+ boolean write(String path, InputStream is, boolean overwrite);
/**
* Creates a new {@link WebResourceSet} for this {@link WebResourceRoot}
Modified: tomcat/trunk/java/org/apache/catalina/WebResourceSet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/WebResourceSet.java?rev=1404724&r1=1404723&r2=1404724&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/WebResourceSet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/WebResourceSet.java Thu Nov 1 18:54:14 2012
@@ -76,14 +76,18 @@ public interface WebResourceSet extends
* InputStream. If a resource already exists at the provided path it will
* not be overwritten.
*
- * @param path The path to be used for the new Resource. It is relative to
- * the root of the web application and must start with '/'.
- * @param is The InputStream that will provide the content for the new
- * Resource.
+ * @param path The path to be used for the new Resource. It is relative
+ * to the root of the web application and must start with
+ * '/'.
+ * @param is The InputStream that will provide the content for the
+ * new Resource.
+ * @param overwrite If <code>true</code> and the resource already exists it
+ * will be overwritten. If <code>false</code> and the
+ * resource already exists the write will fail.
*
* @return <code>true</code> if and only if the new Resource is written
*/
- boolean write(String path, InputStream is);
+ boolean write(String path, InputStream is, boolean overwrite);
void setRoot(WebResourceRoot root);
}
Modified: tomcat/trunk/java/org/apache/catalina/servlets/DefaultServlet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/servlets/DefaultServlet.java?rev=1404724&r1=1404723&r2=1404724&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/servlets/DefaultServlet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/servlets/DefaultServlet.java Thu Nov 1 18:54:14 2012
@@ -511,7 +511,7 @@ public class DefaultServlet
resourceInputStream = req.getInputStream();
}
- if (resources.write(path, resourceInputStream)) {
+ if (resources.write(path, resourceInputStream, true)) {
if (resource.exists()) {
resp.setStatus(HttpServletResponse.SC_NO_CONTENT);
} else {
Modified: tomcat/trunk/java/org/apache/catalina/servlets/WebdavServlet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/servlets/WebdavServlet.java?rev=1404724&r1=1404723&r2=1404724&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/servlets/WebdavServlet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/servlets/WebdavServlet.java Thu Nov 1 18:54:14 2012
@@ -1672,7 +1672,8 @@ public class WebdavServlet
copyResource(errorList, childSrc, childDest);
}
} else if (sourceResource.isFile()) {
- if (!resources.write(dest, sourceResource.getInputStream())) {
+ if (!resources.write(dest, sourceResource.getInputStream(),
+ false)) {
errorList.put(source,
new Integer(WebdavStatus.SC_INTERNAL_SERVER_ERROR));
return false;
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=1404724&r1=1404723&r2=1404724&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java Thu Nov 1 18:54:14 2012
@@ -169,7 +169,7 @@ public class DirResourceSet extends Abst
}
@Override
- public boolean write(String path, InputStream is) {
+ public boolean write(String path, InputStream is, boolean overwrite) {
checkPath(path);
if (is == null) {
@@ -189,7 +189,13 @@ public class DirResourceSet extends Abst
}
if (dest.exists()) {
- return false;
+ if (overwrite) {
+ if (!dest.delete()) {
+ return false;
+ }
+ } else {
+ return false;
+ }
}
try (FileOutputStream fos = new FileOutputStream(dest)) {
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=1404724&r1=1404723&r2=1404724&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/FileResourceSet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/FileResourceSet.java Thu Nov 1 18:54:14 2012
@@ -137,7 +137,7 @@ public class FileResourceSet extends Abs
}
@Override
- public boolean write(String path, InputStream is) {
+ public boolean write(String path, InputStream is, boolean overwrite) {
checkPath(path);
return false;
}
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=1404724&r1=1404723&r2=1404724&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java Thu Nov 1 18:54:14 2012
@@ -217,7 +217,7 @@ public class JarResourceSet extends Abst
}
@Override
- public boolean write(String path, InputStream is) {
+ public boolean write(String path, InputStream is, boolean overwrite) {
checkPath(path);
if (is == null) {
Modified: tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java?rev=1404724&r1=1404723&r2=1404724&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java (original)
+++ tomcat/trunk/java/org/apache/catalina/webresources/StandardRoot.java Thu Nov 1 18:54:14 2012
@@ -137,14 +137,14 @@ public class StandardRoot extends Lifecy
}
@Override
- public boolean write(String path, InputStream is) {
+ public boolean write(String path, InputStream is, boolean overwrite) {
checkState();
- if (preResourceExists(path)) {
+ if (!overwrite && preResourceExists(path)) {
return false;
}
- return main.write(path, is);
+ return main.write(path, is, overwrite);
}
private boolean preResourceExists(String path) {
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=1404724&r1=1404723&r2=1404724&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java (original)
+++ tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java Thu Nov 1 18:54:14 2012
@@ -256,48 +256,51 @@ public abstract class AbstractTestResour
@Test(expected = IllegalArgumentException.class)
public final void testWriteEmpty() {
InputStream is = new ByteArrayInputStream("test".getBytes());
- resourceRoot.write("", is);
+ resourceRoot.write("", is, false);
}
@Test
public final void testWriteRoot() {
InputStream is = new ByteArrayInputStream("test".getBytes());
- Assert.assertFalse(resourceRoot.write(getMount() + "/", is));
+ Assert.assertFalse(resourceRoot.write(getMount() + "/", is, false));
}
@Test
public final void testWriteDirA() {
InputStream is = new ByteArrayInputStream("test".getBytes());
- Assert.assertFalse(resourceRoot.write(getMount() + "/d1", is));
+ Assert.assertFalse(resourceRoot.write(getMount() + "/d1", is, false));
}
@Test
public final void testWriteDirB() {
InputStream is = new ByteArrayInputStream("test".getBytes());
- Assert.assertFalse(resourceRoot.write(getMount() + "/d1/", is));
+ Assert.assertFalse(resourceRoot.write(getMount() + "/d1/", is, false));
}
@Test
public final void testWriteFile() {
InputStream is = new ByteArrayInputStream("test".getBytes());
- Assert.assertFalse(resourceRoot.write(getMount() + "/d1/d1-f1.txt", is));
+ Assert.assertFalse(resourceRoot.write(
+ getMount() + "/d1/d1-f1.txt", is, false));
}
@Test(expected = NullPointerException.class)
public final void testWriteNew() {
- resourceRoot.write(getMount() + "/new-test", null);
+ resourceRoot.write(getMount() + "/new-test", null, false);
}
@Test
public final void testWrite() {
InputStream is = new ByteArrayInputStream("test".getBytes());
if (isWriteable()) {
- Assert.assertTrue(resourceRoot.write(getMount() + "/new-test", is));
+ Assert.assertTrue(resourceRoot.write(
+ getMount() + "/new-test", is, false));
File file = new File(getBaseDir(), "new-test");
Assert.assertTrue(file.exists());
Assert.assertTrue(file.delete());
} else {
- Assert.assertFalse(resourceRoot.write(getMount() + "/new-test", is));
+ Assert.assertFalse(resourceRoot.write(
+ getMount() + "/new-test", is, false));
}
}
}
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=1404724&r1=1404723&r2=1404724&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java (original)
+++ tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java Thu Nov 1 18:54:14 2012
@@ -62,6 +62,6 @@ public abstract class AbstractTestResour
@Test
public void testWriteAbove() {
InputStream is = new ByteArrayInputStream("test".getBytes());
- Assert.assertFalse(resourceRoot.write("/", is));
+ Assert.assertFalse(resourceRoot.write("/", is, false));
}
}
Modified: tomcat/trunk/test/org/apache/catalina/webresources/TesterWebResourceRoot.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/TesterWebResourceRoot.java?rev=1404724&r1=1404723&r2=1404724&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/webresources/TesterWebResourceRoot.java (original)
+++ tomcat/trunk/test/org/apache/catalina/webresources/TesterWebResourceRoot.java Thu Nov 1 18:54:14 2012
@@ -151,12 +151,12 @@ public class TesterWebResourceRoot imple
}
@Override
- public boolean write(String path, InputStream is) {
+ public boolean write(String path, InputStream is, boolean overwrite) {
if (getResource(path).exists()) {
return false;
}
- return main.write(path, is);
+ return main.write(path, is, false);
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org