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 2016/12/11 15:24:08 UTC
svn commit: r1773579 - in /jackrabbit/trunk:
jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/
jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/
jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/
Author: reschke
Date: Sun Dec 11 15:24:07 2016
New Revision: 1773579
URL: http://svn.apache.org/viewvc?rev=1773579&view=rev
Log:
JCR-4079: incorrect PROPPATCH response error handling
Modified:
jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java
Modified: jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java?rev=1773579&r1=1773578&r2=1773579&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java Sun Dec 11 15:24:07 2016
@@ -1922,8 +1922,11 @@ public class RepositoryServiceImpl imple
PropPatchMethod method = new PropPatchMethod(getItemUri(nodeId, sessionInfo), changeList);
execute(method, sessionInfo);
+ method.checkSuccess();
} catch (IOException e) {
throw new RepositoryException(e);
+ } catch (DavException e) {
+ throw ExceptionConverter.generate(e);
}
}
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java?rev=1773579&r1=1773578&r2=1773579&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java Sun Dec 11 15:24:07 2016
@@ -268,6 +268,13 @@ public class MultiStatusResponse impleme
}
/**
+ * @return {@code true} if the response is of type "propstat" (containing information about individual properties)
+ */
+ public boolean isPropStat() {
+ return this.type == TYPE_PROPSTAT;
+ }
+
+ /**
* @param document
* @see org.apache.jackrabbit.webdav.xml.XmlSerializable#toXml(org.w3c.dom.Document)
*/
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java?rev=1773579&r1=1773578&r2=1773579&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java Sun Dec 11 15:24:07 2016
@@ -102,33 +102,46 @@ public class PropPatchMethod extends Dav
// check of OK response contains all set/remove properties
MultiStatusResponse[] resp = multiStatus.getResponses();
if (resp.length != 1) {
- log.warn("Expected a single multi-status response in PROPPATCH.");
+ log.warn("Expected a single multi-status response in PROPPATCH, but got " + resp.length + " elements.");
}
boolean success = true;
+
// only check the first ms-response
- for (int i = 0; i < 1; i++) {
- DavPropertyNameSet okSet = resp[i].getPropertyNames(DavServletResponse.SC_OK);
- if (okSet.isEmpty()) {
- log.debug("PROPPATCH failed: No 'OK' response found for resource " + resp[i].getHref());
- success = false;
- } else {
- DavPropertyNameIterator it = propertyNames.iterator();
- while (it.hasNext()) {
- DavPropertyName pn = it.nextPropertyName();
- success = okSet.remove(pn);
+ if (resp.length == 1) {
+ MultiStatusResponse r = resp[0];
+
+ if (r.isPropStat()) {
+ DavPropertyNameSet okSet = r.getPropertyNames(DavServletResponse.SC_OK);
+ if (okSet.isEmpty()) {
+ log.debug("PROPPATCH failed: No 'OK' response found for resource " + r.getHref());
+ success = false;
+ } else {
+ DavPropertyNameIterator it = propertyNames.iterator();
+ while (it.hasNext()) {
+ DavPropertyName pn = it.nextPropertyName();
+ success = okSet.remove(pn);
+ }
+ }
+ if (!okSet.isEmpty()) {
+ StringBuffer b = new StringBuffer("The following properties outside of the original request where set or removed: ");
+ DavPropertyNameIterator it = okSet.iterator();
+ while (it.hasNext()) {
+ b.append(it.nextPropertyName().toString()).append("; ");
+ }
+ log.warn(b.toString());
}
}
- if (!okSet.isEmpty()) {
- StringBuffer b = new StringBuffer("The following properties outside of the original request where set or removed: ");
- DavPropertyNameIterator it = okSet.iterator();
- while (it.hasNext()) {
- b.append(it.nextPropertyName().toString()).append("; ");
+ else {
+ int status = r.getStatus()[0].getStatusCode();
+ success = status == DavServletResponse.SC_OK;
+ if (!success) {
+ log.warn("PROPPATCH failed: overall status of " + status);
}
- log.warn(b.toString());
}
}
// if build the error message
if (!success) {
+ // TODO: array might be empty, no?
Status[] st = resp[0].getStatus();
// TODO: respect multiple error reasons (not only the first one)
for (int i = 0; i < st.length && responseException == null; i ++) {