You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2013/03/26 12:53:02 UTC

svn commit: r1461064 - in /jackrabbit/trunk: jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/

Author: reschke
Date: Tue Mar 26 11:53:02 2013
New Revision: 1461064

URL: http://svn.apache.org/r1461064
Log:
JCR-3545: fix error handling for unknown WebDAV REPORTs

Modified:
    jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java
    jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DeltaVResourceImpl.java
    jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavException.java

Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java?rev=1461064&r1=1461063&r2=1461064&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/AbstractResource.java Tue Mar 26 11:53:02 2013
@@ -66,8 +66,10 @@ import org.apache.jackrabbit.webdav.vers
 import org.apache.jackrabbit.webdav.version.report.ReportInfo;
 import org.apache.jackrabbit.webdav.version.report.ReportType;
 import org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty;
+import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.w3c.dom.Element;
 
 import javax.jcr.Item;
 import javax.jcr.RepositoryException;
@@ -75,6 +77,9 @@ import javax.jcr.Session;
 import javax.jcr.observation.EventListener;
 import javax.jcr.observation.Event;
 import javax.jcr.observation.EventIterator;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.ParserConfigurationException;
+
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
@@ -468,12 +473,18 @@ abstract class AbstractResource implemen
             throw new DavException(DavServletResponse.SC_NOT_FOUND);
         }
 
-        if (supportedReports.isSupportedReport(reportInfo)) {
-            Report report = ReportType.getType(reportInfo).createReport(this, reportInfo);
-            return report;
-        } else {
-            throw new DavException(DavServletResponse.SC_UNPROCESSABLE_ENTITY, "Unknown report "+ reportInfo.getReportName() +"requested.");
+        if (!supportedReports.isSupportedReport(reportInfo)) {
+            Element condition = null;
+            try {
+                condition = DomUtil.createDocument().createElementNS("DAV:", "supported-report");
+            } catch (ParserConfigurationException ex) {
+                // we don't care THAT much
+            }
+            throw new DavException(DavServletResponse.SC_CONFLICT,
+                    "Unknown report '" + reportInfo.getReportName() + "' requested.", null, condition);
         }
+
+        return ReportType.getType(reportInfo).createReport(this, reportInfo);
     }
 
     /**
@@ -500,7 +511,7 @@ abstract class AbstractResource implemen
     public DavResource[] getReferenceResources(DavPropertyName hrefPropertyName) throws DavException {
         DavProperty<?> prop = getProperty(hrefPropertyName);
         if (prop == null || !(prop instanceof HrefProperty)) {
-            throw new DavException(DavServletResponse.SC_CONFLICT, "Unknown Href-Property '"+hrefPropertyName+"' on resource "+getResourcePath());
+            throw new DavException(DavServletResponse.SC_CONFLICT, "Unknown Href-Property '" + hrefPropertyName + "' on resource " + getResourcePath());
         }
 
         List<String> hrefs = ((HrefProperty)prop).getHrefs();

Modified: jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DeltaVResourceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DeltaVResourceImpl.java?rev=1461064&r1=1461063&r2=1461064&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DeltaVResourceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/DeltaVResourceImpl.java Tue Mar 26 11:53:02 2013
@@ -22,6 +22,7 @@ import javax.jcr.Item;
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Property;
+import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.webdav.DavCompliance;
@@ -44,8 +45,10 @@ import org.apache.jackrabbit.webdav.vers
 import org.apache.jackrabbit.webdav.version.report.ReportInfo;
 import org.apache.jackrabbit.webdav.version.report.ReportType;
 import org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty;
+import org.apache.jackrabbit.webdav.xml.DomUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.w3c.dom.Element;
 
 /**
  * The <code>DeltaVResourceImpl</code> encapsulates the functionality common to all
@@ -117,12 +120,17 @@ public class DeltaVResourceImpl extends 
             throw new DavException(DavServletResponse.SC_NOT_FOUND);
         }
 
-        if (supportedReports.isSupportedReport(reportInfo)) {
-            Report report = ReportType.getType(reportInfo).createReport(this, reportInfo);
-            return report;
-        } else {
-            throw new DavException(DavServletResponse.SC_UNPROCESSABLE_ENTITY, "Unknown report "+ reportInfo.getReportName() +"requested.");
+        if (!supportedReports.isSupportedReport(reportInfo)) {
+            Element condition = null;
+            try {
+                condition = DomUtil.createDocument().createElementNS("DAV:", "supported-report");
+            } catch (ParserConfigurationException ex) {
+                // we don't care THAT much
+            }
+            throw new DavException(DavServletResponse.SC_CONFLICT,
+                    "Unknown report '" + reportInfo.getReportName() + "' requested.", null, condition);
         }
+        return ReportType.getType(reportInfo).createReport(this, reportInfo);
     }
 
     /**

Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavException.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavException.java?rev=1461064&r1=1461063&r2=1461064&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavException.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/DavException.java Tue Mar 26 11:53:02 2013
@@ -40,7 +40,7 @@ public class DavException extends Except
         try {
             statusPhrases.load(DavException.class.getResourceAsStream("statuscode.properties"));
         } catch (IOException e) {
-            log.error("Failed to load status properties: "+ e.getMessage());
+            log.error("Failed to load status properties: " + e.getMessage());
         }
     }
 
@@ -128,7 +128,7 @@ public class DavException extends Except
      * @return status phrase corresponding to the given error code.
      */
     public static String getStatusPhrase(int errorCode) {
-        return statusPhrases.getProperty(errorCode+"");
+        return statusPhrases.getProperty(errorCode + "");
     }
 
     /**