You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by Andreas Schaefer <sc...@me.com.INVALID> on 2019/08/01 21:11:36 UTC

Sling Initial Content with Root Folder properties

Hi

This might be a stupid question but I am stumbling here.

If I have a folder structure like:

/apps
	/test
		/subtest

And I want to add properties to /apps/test like jcr:title.
For that I would need to create a file like this:

SLING-INF/apps/test.json

Now how would it set the sling initial content configuration to make /apps/test to be updated but does not whip out /apps.
In the old, content package model we had .content.xml inside /apps/test so there was no issue with having the root node properties updated.

Cheers - Andy Schaefer

RE: Sling Initial Content with Root Folder properties

Posted by Stefan Seifert <ss...@pro-vision.de>.
>rg.apache.sling.jcr.contentloader.internal.BundleContentLoader Cannot load
>initial content for bundle com.headwire.sling.multipackageupdate : Item is
>protected.
>javax.jcr.nodetype.ConstraintViolationException: Item is protected.
>	at

this usually not a problem with content loader, but a problem with the content using a combination of primary node type and properties not allowed. perhaps you have not specified the primary node type at all in the json file - in this case it gets inherited from the parent node which may result in a node type that does not allow the properties you want to write.

stefan


Re: Sling Initial Content with Root Folder properties

Posted by Andreas Schaefer <sc...@me.com.INVALID>.
Hi Stefan

This did the trick:

<Sling-Initial-Content>
   SLING-INF/apps/test.json;overwriteProperties:=true;path:=/apps,
   SLING-INF/apps/test;overwrite:=false;path:=/apps/test
</Sling-Initial-Content>

Now, I am running into an issue /bin/test. I can create a folder using the old content package but I cannot do the same with Bundle Content.

I get this exception:

rg.apache.sling.jcr.contentloader.internal.BundleContentLoader Cannot load initial content for bundle com.headwire.sling.multipackageupdate : Item is protected.
javax.jcr.nodetype.ConstraintViolationException: Item is protected.
	at org.apache.jackrabbit.oak.jcr.session.ItemImpl$ItemWriteOperation.checkPreconditions(ItemImpl.java:98) [org.apache.jackrabbit.oak-jcr:1.8.8]
	at org.apache.jackrabbit.oak.jcr.session.NodeImpl$35.checkPreconditions(NodeImpl.java:1368) [org.apache.jackrabbit.oak-jcr:1.8.8]
	at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.prePerform(SessionDelegate.java:615) [org.apache.jackrabbit.oak-jcr:1.8.8]
	at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:205) [org.apache.jackrabbit.oak-jcr:1.8.8]
	at org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112) [org.apache.jackrabbit.oak-jcr:1.8.8]
	at org.apache.jackrabbit.oak.jcr.session.NodeImpl.internalSetProperty(NodeImpl.java:1365) [org.apache.jackrabbit.oak-jcr:1.8.8]
	at org.apache.jackrabbit.oak.jcr.session.NodeImpl.setProperty(NodeImpl.java:435) [org.apache.jackrabbit.oak-jcr:1.8.8]

Is there a way to fix this?

- Andy

> On Aug 1, 2019, at 2:46 PM, Stefan Seifert <ss...@pro-vision.de> wrote:
> 
> you did not document which value you have put to the Sling-Initial-Content header of your bundle.
> i assume it is something like:
> 
> <resource-path>;overwrite:=true;ignoreImportProviders:=xml;path:=/apps
> 
> so, by definition [1], it's cleans everything below /apps.
> 
> in your case you only want to deploy to /apps/test, but also you want to set some properties on /apps/test itself.
> that's a usecase that is indeed not ideally supported from the content loader in combination with JSON file format.
> 
> for this special case you may combine multiple entries in Sling-InitialContent, e.g.
> 
> <resource-path-1>;overwrite:=true;ignoreImportProviders:=xml;path:=/apps/test,
> <resource-path-2>;overwriteProperties:=true;path:=/apps
> 
> resource-path-1 contains all your json files of the application, resource-path-2 just on test.json with the properties for the /apps/test node.
> 
> please note: i've not tested this if this works at all! i never encountered this usecase myself. maybe you can change your usecase to avoid properties on the root node of the content load path.
> 
> stefan
> 
> [1] https://sling.apache.org/documentation/bundles/content-loading-jcr-contentloader.html
> 
> 
> 
>> -----Original Message-----
>> From: Andreas Schaefer [mailto:schaefera@me.com.INVALID]
>> Sent: Thursday, August 1, 2019 11:12 PM
>> To: dev
>> Subject: Sling Initial Content with Root Folder properties
>> 
>> Hi
>> 
>> This might be a stupid question but I am stumbling here.
>> 
>> If I have a folder structure like:
>> 
>> /apps
>> 	/test
>> 		/subtest
>> 
>> And I want to add properties to /apps/test like jcr:title.
>> For that I would need to create a file like this:
>> 
>> SLING-INF/apps/test.json
>> 
>> Now how would it set the sling initial content configuration to make
>> /apps/test to be updated but does not whip out /apps.
>> In the old, content package model we had .content.xml inside /apps/test so
>> there was no issue with having the root node properties updated.
>> 
>> Cheers - Andy Schaefer
> 


RE: Sling Initial Content with Root Folder properties

Posted by Stefan Seifert <ss...@pro-vision.de>.
you did not document which value you have put to the Sling-Initial-Content header of your bundle.
i assume it is something like:

<resource-path>;overwrite:=true;ignoreImportProviders:=xml;path:=/apps

so, by definition [1], it's cleans everything below /apps.

in your case you only want to deploy to /apps/test, but also you want to set some properties on /apps/test itself.
that's a usecase that is indeed not ideally supported from the content loader in combination with JSON file format.

for this special case you may combine multiple entries in Sling-InitialContent, e.g.

<resource-path-1>;overwrite:=true;ignoreImportProviders:=xml;path:=/apps/test,
<resource-path-2>;overwriteProperties:=true;path:=/apps

resource-path-1 contains all your json files of the application, resource-path-2 just on test.json with the properties for the /apps/test node.

please note: i've not tested this if this works at all! i never encountered this usecase myself. maybe you can change your usecase to avoid properties on the root node of the content load path.

stefan

[1] https://sling.apache.org/documentation/bundles/content-loading-jcr-contentloader.html



>-----Original Message-----
>From: Andreas Schaefer [mailto:schaefera@me.com.INVALID]
>Sent: Thursday, August 1, 2019 11:12 PM
>To: dev
>Subject: Sling Initial Content with Root Folder properties
>
>Hi
>
>This might be a stupid question but I am stumbling here.
>
>If I have a folder structure like:
>
>/apps
>	/test
>		/subtest
>
>And I want to add properties to /apps/test like jcr:title.
>For that I would need to create a file like this:
>
>SLING-INF/apps/test.json
>
>Now how would it set the sling initial content configuration to make
>/apps/test to be updated but does not whip out /apps.
>In the old, content package model we had .content.xml inside /apps/test so
>there was no issue with having the root node properties updated.
>
>Cheers - Andy Schaefer