I'd like to introduce the Apache Jackrabbit JCR WebDAV Server which provides an advanced remoting feature and how you can take advantage of the feature in an automated way like executing it in command lines.
Apache Jackrabbit JCR WebDAV Server
Apache Jackrabbit JCR WebDAV Server was basically designed to support remote JCR API calls via underlying WebDAV protocol. You can create, read, update or delete data in JCR content repository through JCR WebDAV Server via either a) JCR Client API or b) direct WebDAV requests from the client.It is really good to be able to use JCR APIs directly from a remote client without having to care of the details of WebDAV/HTTP payloads, which should be really a good topic to cover later, but in this article, I'd like to focus only on the use cases from Command Line Client because it's more related to the "automation" topic of this article.
Command Line Examples through WebDAV/HTTP
I don't want to copy every example again here. Jukka Zitting, a former chairman of Apache Jackrabbit project and incubator PMCs, already explained it with very intuitive examples in one of his great blog articles in the past:The blog article of Jukka's explains how to create a node, how to read a node, how to update one single-valued property in different types such as date or string, and how to delete a node.
I'd like to just add two more helpful examples below.
Updating Multiple Values Property from Command Lines
If you want to update a multiple-valued property like hipposys:members property in the following example CND, you can't use the example to update single valued property in Jukka's blog article:
[hipposys:group] > nt:base - hipposys:system (boolean) - hipposys:members (string) multiple - hipposys:description (string) ...
curl --request PUT --header "Content-Type: jcr-value/undefined" \ --data "<values xmlns='http://www.day.com/jcr/webdav/1.0'><value>editor</value><value>john</value><value>jane</value></values>" \ --user admin:admin \ http://localhost:8080/cms/server/default/jcr:root/hippo:configuration/hippo:groups/editor/hipposys:members
Importing System View XML file to JCR from Command Lines
This example is basically just a variation of how to create a node shown in Jukka's blog article by using an external system view XML file instead.
Suppose you have the following system view XML file (e.g, editor.xml):
<?xml version="1.0" encoding="UTF-8"?> <sv:node xmlns:sv="http://www.jcp.org/jcr/sv/1.0" sv:name="editor"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>hipposys:group</sv:value> </sv:property> <sv:property sv:name="hipposys:members" sv:type="String" sv:multiple="true"> <sv:value>editor</sv:value> <sv:value>john</sv:value> </sv:property> <sv:property sv:name="hipposys:securityprovider" sv:type="String"> <sv:value>internal</sv:value> </sv:property> </sv:node>
You can pipe the standard output of the input file, editor.xml, into a curl command by specifying --data argument as @-, meaning the data must be read from the standard input.
cat editor.xml | curl -v --request MKCOL --data @- --user admin:admin \ http://localhost:8080/cms/server/default/jcr:root/hippo:configuration/hippo:groups/editor
curl --request MKCOL --data @- --user admin:admin \ http://localhost:8080/cms/server/default/jcr:root/hippo:configuration/hippo:groups/editor \ < editor.xml
Or, you can specify the input file directly by prefixing the file path with '@' like the following example instead:
curl --request MKCOL --data @editor.xml --user admin:admin \ http://localhost:8080/cms/server/default/jcr:root/hippo:configuration/hippo:groups/editor
Therefore, if you want to remove an existing /hippo:configuration/hippo:groups/editor node and recreate it from the XML file, you could execute a delete command like the following, followed by one of the create command explained above:
curl --request DELETE --user admin:admin \ http://localhost:8080/cms/server/default/jcr:root/hippo:configuration/hippo:groups/editor
I guess you already grasp the whole idea about how we can take advantage of JCR WebDAV Server for automation in command lines. Basically, you can easily create, read, update or delete any content in JCR from command lines!
How to Enable JCR WebDAV Server in Hippo CMS Repository?
By default, JCR WebDAV Server is not enabled in Hippo CMS Repository, but you can easily install and configure it by following this community forge plugin documentation:Please let me know if you have any further questions.