Carsten Ziegeler created SLING-5637:
---------------------------------------

             Summary: Resource.delete is not called if resource is adaptable to 
Node
                 Key: SLING-5637
                 URL: https://issues.apache.org/jira/browse/SLING-5637
             Project: Sling
          Issue Type: Bug
          Components: Servlets
    Affects Versions: Servlets Post 2.3.8
            Reporter: Carsten Ziegeler
             Fix For: Servlets Post 2.3.10


If a resource is adaptable to Node, the node is directly removed.
ResourceProvider.delete is never invoked.
While this works with the JcrResourceProvider it does not work with any other 
resource provider providing resources which adapt to a node

Proposed solution:
### Eclipse Workspace Patch 1.0
#P org.apache.sling.servlets.post
Index: 
src/main/java/org/apache/sling/servlets/post/impl/operations/DeleteOperation.java
===================================================================
--- 
src/main/java/org/apache/sling/servlets/post/impl/operations/DeleteOperation.java
   (Revision 1737673)
+++ 
src/main/java/org/apache/sling/servlets/post/impl/operations/DeleteOperation.java
   (Arbeitskopie)
@@ -58,15 +58,15 @@
         // SLING-3203: selectors, extension and suffix make no sense here and
         // might lead to deleting other resources than the one the user means.
         final RequestPathInfo rpi = request.getRequestPathInfo();
-        if( (rpi.getSelectors() != null && rpi.getSelectors().length > 0) 
+        if( (rpi.getSelectors() != null && rpi.getSelectors().length > 0)
                 || (rpi.getExtension() != null && rpi.getExtension().length() 
> 0)
                 || (rpi.getSuffix() != null && rpi.getSuffix().length() > 0)) {
             response.setStatus(
-                    HttpServletResponse.SC_FORBIDDEN, 
+                    HttpServletResponse.SC_FORBIDDEN,
                     "DeleteOperation request cannot include any selectors, 
extension or suffix");
             return;
         }
-        
+
         final VersioningConfiguration versioningConfiguration = 
getVersioningConfiguration(request);
         final boolean deleteChunks = isDeleteChunkRequest(request);
         final Iterator<Resource> res = getApplyToResources(request);
@@ -100,19 +100,17 @@
             } else {
                 checkoutIfNecessary(node.getParent(), changes,
                     versioningConfiguration);
-                node.remove();
             }
-
-        } else {
-            try {
-                resource.getResourceResolver().delete(resource);
-            } catch (final PersistenceException pe) {
-                if (pe.getCause() instanceof RepositoryException) {
-                    throw (RepositoryException) pe.getCause();
-                }
-                throw new RepositoryException(pe);
+        }
+        try {
+            resource.getResourceResolver().delete(resource);
+        } catch (final PersistenceException pe) {
+            if (pe.getCause() instanceof RepositoryException) {
+                throw (RepositoryException) pe.getCause();
             }
+            throw new RepositoryException(pe);
         }
+
         changes.add(Modification.onDeleted(resource.getPath()));
     }
 




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to