[ https://issues.apache.org/jira/browse/SLING-8375?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16841369#comment-16841369 ]
Viorel Lupu commented on SLING-8375: ------------------------------------ [~rombert]: I've made a PR which is linked in the issue links. I decided against hardcoding the protected property names and instead went with capturing and logging the oak exceptions. Let me know if you think a cleaner approach can be used in this case. > SlingPostServlet: :import operation must skip protected properties if present > ----------------------------------------------------------------------------- > > Key: SLING-8375 > URL: https://issues.apache.org/jira/browse/SLING-8375 > Project: Sling > Issue Type: Improvement > Components: Servlets > Environment: AEM 6.3 > Reporter: Viorel Lupu > Priority: Major > Labels: import, json > Fix For: Servlets Post 2.3.32 > > Attachments: error-import-json.log > > Time Spent: 10m > Remaining Estimate: 0h > > h2. Description > Posting JSON content to the SlingPostServlet with *:import* operation as > documented at > [https://sling.apache.org/documentation/bundles/manipulating-content-the-slingpostservlet-servlets-post.html#slingpostservlet-operations] > fails when the JSON payload contains protected property names such as: > > {code:java} > "jcr:createdBy", > "jcr:created", > "jcr:createdBy", > "jcr:baseVersion", > "jcr:lastModified", > "jcr:lastModifiedBy", > "jcr:uuid", > "cq:lastModified", > "cq:lastModifiedBy", > "cq:lastReplicated", > "jcr:versionHistory", > "rep:policy", > "onTime", > "offTime" > {code} > {code:java} > # curl invocation > curl -L -vv -u admin:admin \ > -F ":operation=import" \ > -F ":contentType=json" \ > -F ":name=newcontentnode" \ > -F ":content=@data.json" \ > -F ":replace=true" \ > -H 'Referer: http://localhost:4502/content/we-retail/language-masters/en' \ > -H 'User-Agent: Adobe-Campaign/5.0' \ > http://localhost:4502/content/we-retail/language-masters/en{code} > > h2. Suggested Improvement > The importer should skip protected properties and proceed with import rather > than failing. > h2. Error.log: > more detailed error log attached to issue > > {code:java} > 26.04.2019 16:34:55.298 *ERROR* [0:0:0:0:0:0:0:1 [1556289295274] POST > /content/we-retail/language-masters HTTP/1.1] > org.apache.sling.servlets.post.impl.operations.ImportOperation Exception > during response processing. > javax.jcr.nodetype.ConstraintViolationException: Property is protected: > jcr:createdBy = admin > at > org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate.setProperty(NodeDelegate.java:525) > at > org.apache.jackrabbit.oak.jcr.session.NodeImpl$35.perform(NodeImpl.java:1376) > at > org.apache.jackrabbit.oak.jcr.session.NodeImpl$35.perform(NodeImpl.java:1364) > at > org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:208) > at org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112) > at > org.apache.jackrabbit.oak.jcr.session.NodeImpl.internalSetProperty(NodeImpl.java:1364) > at > org.apache.jackrabbit.oak.jcr.session.NodeImpl.setProperty(NodeImpl.java:434) > at > org.apache.sling.jcr.contentloader.internal.DefaultContentCreator.createProperty(DefaultContentCreator.java:361) > at > org.apache.sling.jcr.contentloader.internal.readers.JsonReader.createProperty(JsonReader.java:226) > at > org.apache.sling.jcr.contentloader.internal.readers.JsonReader.createNode(JsonReader.java:199) > at > org.apache.sling.jcr.contentloader.internal.readers.JsonReader.createNode(JsonReader.java:197) > at > org.apache.sling.jcr.contentloader.internal.readers.JsonReader.parse(JsonReader.java:159) > at > org.apache.sling.jcr.contentloader.internal.DefaultContentImporter.importContent(DefaultContentImporter.java:93) > at > org.apache.sling.servlets.post.impl.operations.ImportOperation.doRun(ImportOperation.java:176) > at > org.apache.sling.servlets.post.AbstractPostOperation.run(AbstractPostOperation.java:97) > at > org.apache.sling.servlets.post.impl.SlingPostServlet.doPost(SlingPostServlet.java:205) > at > org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java:146) > at > org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:342) > at > org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:374) > at > org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:552) > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)