[ 
https://issues.apache.org/jira/browse/SLING-9896?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17468063#comment-17468063
 ] 

Thomas Mueller commented on SLING-9896:
---------------------------------------

Hm, I can't find the WARN in the log file.
{noformat}
https://github.com/apache/sling-org-apache-sling-servlets-post/blob/org.apache.sling.servlets.post-2.4.2/src/main/java/org/apache/sling/servlets/post/impl/helper/SlingPropertyValueHandler.java#L114

import org.apache.sling.api.resource.PersistenceException;
public void setProperty(final Resource parent, final RequestProperty prop)
    throws PersistenceException {
throw new PersistenceException("Resource at '" + parent.getPath() + "' is not 
modifiable."); <<== here

https://github.com/apache/sling-org-apache-sling-servlets-post/blob/org.apache.sling.servlets.post-2.4.2/src/main/java/org/apache/sling/servlets/post/impl/operations/ModifyOperation.java#L372

  private void writeContent(final ResourceResolver resolver,
            final Map<String, RequestProperty> reqProperties,
            final List<Modification> changes,
            final VersioningConfiguration versioningConfiguration)
    throws PersistenceException {
propHandler.setProperty(parent, prop); <<=== here


https://github.com/apache/sling-org-apache-sling-servlets-post/blob/org.apache.sling.servlets.post-2.4.2/src/main/java/org/apache/sling/servlets/post/impl/SlingPostServlet.java#L243

            try {
                operation.run(request, htmlResponse, processors); <<=== here
            } catch (ResourceNotFoundException rnfe) {
                htmlResponse.setStatus(HttpServletResponse.SC_NOT_FOUND,
                    rnfe.getMessage());
            } catch (final PreconditionViolatedPersistenceException e) {
                log.warn("Exception while handling POST {} with {}",
                        new Object[] 
{request.getResource().getPath(),operation.getClass().getName()},e);
                if (backwardsCompatibleStatuscode) {
                    htmlResponse.setError(e);
                } else {
                    htmlResponse.setStatus(422, "invalid payload");
                }
            } catch (final PersistenceException e) {
                // also catches the  RetryableOperationException, as the 
handling is the same
                log.warn("Exception while handling POST {} with {}",
                        new Object[] 
{request.getResource().getPath(),operation.getClass().getName()},e);
                if (backwardsCompatibleStatuscode) {
                    htmlResponse.setError(e);
                } else {
                    htmlResponse.setStatus(HttpServletResponse.SC_CONFLICT, 
"repository state conflicting with request");
                }
            } catch (final Exception exception) {
                log.warn("Exception while handling POST {} with {}",
                        new Object[] 
{request.getResource().getPath(),operation.getClass().getName()},exception);
                htmlResponse.setError(exception);
            }
    
{noformat}

> change statuscode in SlingPostServlet for PersistenceException
> --------------------------------------------------------------
>
>                 Key: SLING-9896
>                 URL: https://issues.apache.org/jira/browse/SLING-9896
>             Project: Sling
>          Issue Type: Improvement
>          Components: Servlets
>    Affects Versions: Servlets Post 2.3.36
>            Reporter: Joerg Hoh
>            Assignee: Robert Munteanu
>            Priority: Major
>             Fix For: Servlets POST 2.4.2
>
>          Time Spent: 9h 20m
>  Remaining Estimate: 0h
>
> When the SlingPostServlet receives a PersistenceExceptions while trying to 
> persist the changes, it should not throw an internal server error, but a 
> statuscode of 405, because this behavior is expected.
> Example stacktrace:
> {noformat}
> 11.11.2020 11:18:38.418 *ERROR* [172.16.123.101 [1605093518414] POST 
> /foo/bar.html HTTP/1.1] 
> org.apache.sling.servlets.post.impl.operations.ModifyOperation
> Exception during response processing.
> org.apache.sling.api.resource.PersistenceException: Unable to create node at 
> /foo/bar.html
>         at 
> org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.create(JcrResourceProvider.java:477)
>  [org.apache.sling.jcr.resource:3.0.22]
>         at 
> org.apache.sling.resourceresolver.impl.providers.stateful.AuthenticatedResourceProvider.create(AuthenticatedResourceProvider.java:182)
>  [org.apache.sling.resourceresolver:1.7.0]
>         at 
> org.apache.sling.resourceresolver.impl.helper.ResourceResolverControl.create(ResourceResolverControl.java:381)
>  [org.apache.sling.resourceresolver:1.7.0]
>         at 
> org.apache.sling.resourceresolver.impl.ResourceResolverImpl.create(ResourceResolverImpl.java:979)
>  [org.apache.sling.resourceresolver:1.7.0]
>         at 
> org.apache.sling.servlets.post.impl.operations.AbstractCreateOperation.deepGetOrCreateResource(AbstractCreateOperation.java:598)
>  [org.apache.sling.servlets.post:2.3.36]
>         at 
> org.apache.sling.servlets.post.impl.operations.AbstractCreateOperation.processCreate(AbstractCreateOperation.java:146)
>  [org.apache.sling.servlets.post:2.3.36]
>         at 
> org.apache.sling.servlets.post.impl.operations.ModifyOperation.doRun(ModifyOperation.java:83)
>  [org.apache.sling.servlets.post:2.3.36]
>         at 
> org.apache.sling.servlets.post.impl.operations.AbstractPostOperation.run(AbstractPostOperation.java:99)
>  [org.apache.sling.servlets.post:2.3.36]
>         at 
> org.apache.sling.servlets.post.impl.SlingPostServlet.doPost(SlingPostServlet.java:233)
>  [org.apache.sling.servlets.post:2.3.36]
>         at 
> org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java:146)
>  [org.apache.sling.api:2.22.0]
>         at 
> org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:342)
>  [org.apache.sling.api:2.22.0]
>               [...]        
> Caused by: javax.jcr.nodetype.ConstraintViolationException: No default node 
> type available for /foo/bar.html
>         at 
> org.apache.jackrabbit.oak.plugins.tree.TreeUtil.addChild(TreeUtil.java:234) 
> [org.apache.jackrabbit.oak-security-spi:1.35.0]
>         at 
> org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate.addChild(NodeDelegate.java:690)
>  [org.apache.jackrabbit.oak-jcr:1.35.0]
>         at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$5.perform(NodeImpl.java:314) 
> [org.apache.jackrabbit.oak-jcr:1.35.0]
>         at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$5.perform(NodeImpl.java:280) 
> [org.apache.jackrabbit.oak-jcr:1.35.0]
>         at 
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:209)
>  [org.apache.jackrabbit.oak-jcr:1.35.0]
>         at 
> org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112) 
> [org.apache.jackrabbit.oak-jcr:1.35.0]
>         at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl.addNode(NodeImpl.java:280) 
> [org.apache.jackrabbit.oak-jcr:1.35.0]
>         at 
> org.apache.jackrabbit.oak.jcr.session.NodeImpl.addNode(NodeImpl.java:265) 
> [org.apache.jackrabbit.oak-jcr:1.35.0]
>         at 
> org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.create(JcrResourceProvider.java:448)
>  [org.apache.sling.jcr.resource:3.0.22]
>         ... 154 common frames omitted
> {noformat}
> Discussion at 
> https://www.mail-archive.com/[email protected]/msg100122.html (dev@sling)
> PR: https://github.com/apache/sling-org-apache-sling-servlets-post/pull/7



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to