[
https://issues.apache.org/jira/browse/SLING-5637?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Carsten Ziegeler updated SLING-5637:
------------------------------------
Description:
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:
{quote}
### 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()));
}
{quote}
was:
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
{quote}
===================================================================
---
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()));
}
{quote}
> 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:
> {quote}
> ### 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()));
> }
> {quote}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)