[
https://issues.apache.org/jira/browse/SLING-12944?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18022080#comment-18022080
]
Joerg Hoh commented on SLING-12944:
-----------------------------------
The SlingPostServlet assumes that the following holds true:
{code}
Resource r = ...
Node n = r.adaptTo(Node.class);
if (n != null) {
for (String propertyName = r.getValueMap().entrySet()) {
assertTrue(n.hasProperty(propertyName);
}
}
{code}
in other words: Every element in a ValueMap adapted from a JcrNodeResource is
backed by a JCR property. And this assumption got violated in SLING-12781. And
I don't think that that this assumption is harcoded only in the
SlingPostServlet. In fact I have seen a lot of code, which consists of a mixed
use of Sling Resource API and JCR API, and at some point this assumption is
likely made as well.
For that my recommendation is to revert SLING-12781, as it breaks backwards
compatibility and can result in a lot of different symptoms which are hard to
track back to this change.
> SlingPostServlet fails with JCR Resource 3.3.4
> ----------------------------------------------
>
> Key: SLING-12944
> URL: https://issues.apache.org/jira/browse/SLING-12944
> Project: Sling
> Issue Type: Bug
> Components: API
> Affects Versions: JCR Resource 3.3.4
> Reporter: Joerg Hoh
> Assignee: Konrad Windszus
> Priority: Major
>
> I am just testing the latest JCR Resource 3.3.4 with an recent development
> state of AEM, and the following POST fails with a status 422 (works fine with
> JCR Resource 3.3.2)
> {code}
> $ curl -svo /dev/null -u admin:admin -Fsling:resourceType=ab/cd
> localhost:4502/tmp/test1
> {code}
> (that path did not exist yet)
> {code}
> 22.09.2025 12:33:27.982 *WARN* [[0:0:0:0:0:0:0:1] [1758537207973] POST
> /tmp/test1 HTTP/1.1] org.apache.sling.servlets.post.impl.SlingPostServlet
> Exception while handling POST on path [/tmp/test1] with operation
> [org.apache.sling
> .servlets.post.impl.operations.ModifyOperation]
> org.apache.sling.servlets.post.exceptions.PreconditionViolatedPersistenceException:
> sling:resourceType not found on /tmp/test1
> at
> org.apache.sling.servlets.post.impl.helper.JCRSupportImpl.isPropertyMultiple(JCRSupportImpl.java:230)
> [org.apache.sling.servlets.post:2.6.0]
> at
> org.apache.sling.servlets.post.impl.helper.JCRSupport.isPropertyMultiple(JCRSupport.java:116)
> [org.apache.sling.servlets.post:2.6.0]
> at
> org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.isMultiValue(SlingPropertyValueHandler.java:368)
> [org.apache.sling.servlets.post:2.6.0]
> at
> org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.setPropertyAsIs(SlingPropertyValueHandler.java:236)
> [org.apache.sling.servlets.post:2.6.0]
> at
> org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.setProperty(SlingPropertyValueHandler.java:124)
> [org.apache.sling.servlets.post:2.6.0]
> at
> org.apache.sling.servlets.post.impl.operations.ModifyOperation.writeContent(ModifyOperation.java:372)
> [org.apache.sling.servlets.post:2.6.0]
> at
> org.apache.sling.servlets.post.impl.operations.ModifyOperation.doRun(ModifyOperation.java:93)
> [org.apache.sling.servlets.post:2.6.0]
> at
> org.apache.sling.servlets.post.impl.operations.AbstractPostOperation.run(AbstractPostOperation.java:103)
> [org.apache.sling.servlets.post:2.6.0]
> at
> org.apache.sling.servlets.post.impl.SlingPostServlet.doPost(SlingPostServlet.java:249)
> [org.apache.sling.servlets.post:2.6.0]
> [...]
> Caused by: javax.jcr.PathNotFoundException: sling:resourceType not found on
> /tmp/test1
> at
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:660)
> [org.apache.jackrabbit.oak-jcr:1.84.0.T20250917093322-af8592b]
> at
> org.apache.jackrabbit.oak.jcr.session.NodeImpl$11.perform(NodeImpl.java:653)
> [org.apache.jackrabbit.oak-jcr:1.84.0.T20250917093322-af8592b]
> at
> org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:236)
> [org.apache.jackrabbit.oak-jcr:1.84.0.T20250917093322-af8592b]
> at
> org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:113)
> [org.apache.jackrabbit.oak-jcr:1.84.0.T20250917093322-af8592b]
> at
> org.apache.jackrabbit.oak.jcr.session.NodeImpl.getProperty(NodeImpl.java:653)
> [org.apache.jackrabbit.oak-jcr:1.84.0.T20250917093322-af8592b]
> at
> org.apache.sling.servlets.post.impl.helper.JCRSupportImpl.isPropertyMultiple(JCRSupportImpl.java:227)
> [org.apache.sling.servlets.post:2.6.0]
> ... 195 common frames omitted
> {code}
> the following call works:
> {code}
> $ curl -u admin:admin -Ffoo=bar localhost:4502/tmp/test1
> {code}
> /CC [~kwin]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)