GitLab Mirror pushed to branch 2.10 at cms-community / hippo-jackrabbit

Commits:
fa480bd5 by Julian Reschke at 2017-01-06T13:28:14+00:00
JCR-3924 - Allow release-deploy to skip tests (ported to 2.10)

git-svn-id: https://svn.apache.org/repos/asf/jackrabbit/branches/2.10@1777604 
13f79535-47bb-0310-9956-ffa450edef68

- - - - -
7ac320bb by Julian Reschke at 2017-01-06T15:13:32+00:00
JCR-4079: incorrect PROPPATCH response error handling (ported to 2.10)

git-svn-id: https://svn.apache.org/repos/asf/jackrabbit/branches/2.10@1777627 
13f79535-47bb-0310-9956-ffa450edef68

- - - - -


4 changed files:

- jackrabbit-parent/pom.xml
- 
jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
- 
jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java
- 
jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java


Changes:

=====================================
jackrabbit-parent/pom.xml
=====================================
--- a/jackrabbit-parent/pom.xml
+++ b/jackrabbit-parent/pom.xml
@@ -225,7 +225,7 @@
           <configuration>
             <useReleaseProfile>false</useReleaseProfile>
             <goals>deploy</goals>
-            <arguments>-Papache-release,pedantic</arguments>
+            <arguments>-Papache-release,pedantic ${arguments}</arguments>
           </configuration>
         </plugin>
         <plugin>


=====================================
jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
=====================================
--- 
a/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
+++ 
b/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
@@ -1915,8 +1915,11 @@ public class RepositoryServiceImpl implements 
RepositoryService, DavConstants {
 
             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);
         }
     }
 


=====================================
jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java
=====================================
--- 
a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java
+++ 
b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/MultiStatusResponse.java
@@ -268,6 +268,13 @@ public class MultiStatusResponse implements 
XmlSerializable, DavConstants {
     }
 
     /**
+     * @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)
      */


=====================================
jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java
=====================================
--- 
a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java
+++ 
b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java
@@ -102,33 +102,46 @@ public class PropPatchMethod extends DavMethodBase 
implements DavConstants {
         // 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 ++) {



View it on GitLab: 
https://code.onehippo.org/cms-community/hippo-jackrabbit/compare/bf20b8befffdadba1b1aa3f447c0a9fb14404945...7ac320bb18ae9164598aba736ec484db5faab36c
_______________________________________________
Hippocms-svn mailing list
Hippocms-svn@lists.onehippo.org
https://lists.onehippo.org/mailman/listinfo/hippocms-svn

Reply via email to