You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2006/05/26 12:53:59 UTC
svn commit: r409635 - in
/jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav:
DavServletRequest.java WebdavRequestImpl.java
Author: jukka
Date: Fri May 26 03:53:59 2006
New Revision: 409635
URL: http://svn.apache.org/viewvc?rev=409635&view=rev
Log:
1.0: Merged revision 392905: JCR-389
Modified:
jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavServletRequest.java
jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java
Modified: jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavServletRequest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavServletRequest.java?rev=409635&r1=409634&r2=409635&view=diff
==============================================================================
--- jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavServletRequest.java (original)
+++ jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/DavServletRequest.java Fri May 26 03:53:59 2006
@@ -119,11 +119,13 @@
/**
* Parse the Xml request body and return a {@link org.w3c.dom.Document}.
- * If the request body can not be parsed <code>null</code> is returned.
*
- * @return Document representing the Xml request body or <code>null</code>.
+ * @return Document representing the Xml request body or <code>null</code>
+ * if no request body is present.
+ * @throws DavException If the request body cannot be parsed into an Xml
+ * Document.
*/
- public Document getRequestDocument();
+ public Document getRequestDocument() throws DavException;
/**
* Return the type of PROPFIND request as indicated by the PROPFIND request
Modified: jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java?rev=409635&r1=409634&r2=409635&view=diff
==============================================================================
--- jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java (original)
+++ jackrabbit/branches/1.0/jcr-server/webdav/src/java/org/apache/jackrabbit/webdav/WebdavRequestImpl.java Fri May 26 03:53:59 2006
@@ -56,6 +56,8 @@
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
+
+import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
@@ -242,15 +244,15 @@
}
/**
- * @return Xml document
* @see DavServletRequest#getRequestDocument()
*/
- public Document getRequestDocument() {
+ public Document getRequestDocument() throws DavException {
Document requestDocument = null;
/*
- Don't attempt to parse the body if the contentlength header is 0
- NOTE: a value of -1 indicates that the length is unknown, thus we have to parse the body.
- NOTE that http1.1 request using chunked transfer coding will therefore not be detected here
+ Don't attempt to parse the body if the contentlength header is 0.
+ NOTE: a value of -1 indicates that the length is unknown, thus we have
+ to parse the body. Note that http1.1 request using chunked transfer
+ coding will therefore not be detected here.
*/
if (httpRequest.getContentLength() == 0) {
return requestDocument;
@@ -259,19 +261,32 @@
try {
InputStream in = httpRequest.getInputStream();
if (in != null) {
- DocumentBuilder docBuilder = BUILDER_FACTORY.newDocumentBuilder();
- requestDocument = docBuilder.parse(in);
+ // use a buffered input stream to find out whether there actually
+ // is a request body
+ InputStream bin = new BufferedInputStream(in);
+ bin.mark(1);
+ boolean isEmpty = -1 == bin.read();
+ bin.reset();
+ if (!isEmpty) {
+ DocumentBuilder docBuilder = BUILDER_FACTORY.newDocumentBuilder();
+ requestDocument = docBuilder.parse(bin);
+ }
}
} catch (IOException e) {
if (log.isDebugEnabled()) {
log.debug("Unable to build an XML Document from the request body: " + e.getMessage());
}
+ throw new DavException(DavServletResponse.SC_BAD_REQUEST);
} catch (ParserConfigurationException e) {
if (log.isDebugEnabled()) {
log.debug("Unable to build an XML Document from the request body: " + e.getMessage());
}
+ throw new DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR);
} catch (SAXException e) {
- log.debug("Unable to build an XML Document from the request body: " + e.getMessage());
+ if (log.isDebugEnabled()) {
+ log.debug("Unable to build an XML Document from the request body: " + e.getMessage());
+ }
+ throw new DavException(DavServletResponse.SC_BAD_REQUEST);
}
return requestDocument;
}
@@ -313,8 +328,7 @@
private void parsePropFindRequest() throws DavException {
propfindProps = new DavPropertyNameSet();
Document requestDocument = getRequestDocument();
- // propfind httpRequest with empty body or invalid Xml >> retrieve all property
- // TODO: invalid XML -> spec requires a 'BAD REQUEST' error code
+ // propfind httpRequest with empty body >> retrieve all property
if (requestDocument == null) {
return;
}
@@ -910,4 +924,4 @@
public String getRealPath(String s) {
return httpRequest.getRealPath(s);
}
-}
\ No newline at end of file
+}