Author: markt Date: Mon Jul 30 16:22:00 2007 New Revision: 561183 URL: http://svn.apache.org/viewvc?view=rev&rev=561183 Log: Fix WebDAV for MS clients. Fix error message when there is no request content
Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java tomcat/container/tc5.5.x/webapps/docs/changelog.xml Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java?view=diff&rev=561183&r1=561182&r2=561183 ============================================================================== --- tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java (original) +++ tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java Mon Jul 30 16:22:00 2007 @@ -48,6 +48,7 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import org.apache.catalina.Globals; import org.apache.catalina.util.DOMWriter; import org.apache.catalina.util.MD5Encoder; import org.apache.catalina.util.RequestUtil; @@ -321,6 +322,35 @@ /** + * Override the DefaultServlet implementation and only use the PathInfo. If + * the ServletPath is non-null, it will be because the WebDAV servlet has + * been mapped to a url other than /* to configure editing at different url + * than normal viewing. + * + * @param request The servlet request we are processing + */ + protected String getRelativePath(HttpServletRequest request) { + + // Are we being processed by a RequestDispatcher.include()? + if (request.getAttribute(Globals.INCLUDE_REQUEST_URI_ATTR) != null) { + String result = (String) request.getAttribute( + Globals.INCLUDE_PATH_INFO_ATTR); + if ((result == null) || (result.equals(""))) + result = "/"; + return (result); + } + + // No, extract the desired path directly from the request + String result = request.getPathInfo(); + if ((result == null) || (result.equals(""))) { + result = "/"; + } + return (result); + + } + + + /** * OPTIONS Method. * * @param req The request @@ -391,38 +421,40 @@ Node propNode = null; - DocumentBuilder documentBuilder = getDocumentBuilder(); - - try { - Document document = documentBuilder.parse - (new InputSource(req.getInputStream())); - - // Get the root element of the document - Element rootElement = document.getDocumentElement(); - NodeList childList = rootElement.getChildNodes(); - - for (int i=0; i < childList.getLength(); i++) { - Node currentNode = childList.item(i); - switch (currentNode.getNodeType()) { - case Node.TEXT_NODE: - break; - case Node.ELEMENT_NODE: - if (currentNode.getNodeName().endsWith("prop")) { - type = FIND_BY_PROPERTY; - propNode = currentNode; - } - if (currentNode.getNodeName().endsWith("propname")) { - type = FIND_PROPERTY_NAMES; - } - if (currentNode.getNodeName().endsWith("allprop")) { - type = FIND_ALL_PROP; + if (req.getInputStream().available() >0) { + DocumentBuilder documentBuilder = getDocumentBuilder(); + + try { + Document document = documentBuilder.parse + (new InputSource(req.getInputStream())); + + // Get the root element of the document + Element rootElement = document.getDocumentElement(); + NodeList childList = rootElement.getChildNodes(); + + for (int i=0; i < childList.getLength(); i++) { + Node currentNode = childList.item(i); + switch (currentNode.getNodeType()) { + case Node.TEXT_NODE: + break; + case Node.ELEMENT_NODE: + if (currentNode.getNodeName().endsWith("prop")) { + type = FIND_BY_PROPERTY; + propNode = currentNode; + } + if (currentNode.getNodeName().endsWith("propname")) { + type = FIND_PROPERTY_NAMES; + } + if (currentNode.getNodeName().endsWith("allprop")) { + type = FIND_ALL_PROP; + } + break; } - break; } + } catch(Exception e) { + // Something went wrong - use the defaults. + // TODO : Enhance that ! } - } catch(Exception e) { - // Most likely there was no content : we use the defaults. - // TODO : Enhance that ! } if (type == FIND_BY_PROPERTY) { Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?view=diff&rev=561183&r1=561182&r2=561183 ============================================================================== --- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original) +++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Mon Jul 30 16:22:00 2007 @@ -30,6 +30,9 @@ associated resources. (markt) </fix> <fix> + Fix WebDAV Servlet so it works correctly with MS clients. (markt) + </fix> + <fix> Remove invalid attribute "encoding" of MBean MemoryUserDatabase, which lead to errors in the manager webapp JMXProxy output. (rjung) </fix> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]