jcr component allows you to add/read nodes to/from a JCR compliant content repository (for example, Apache Jackrabbit) with its producer, or register an EventListener with the consumer.
Maven users will need to add the following dependency to their
pom.xml for this component:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jcr</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
From Camel 2.10 onwards you can use consumer as an EventListener in JCR or a producer to read a node by identifier.
repository element of the URI is used to look up the JCR
Repository object in the Camel context registry.
When a message is sent to a JCR producer endpoint:
javax.jcr.Valueinstances and added to the new node and the node's UUID is returned in the OUT message.
Please note that the JCR Producer used message properties instead of message headers in Camel versions earlier than 2.12.3. See https://issues.apache.org/jira/browse/CAMEL-7067 for more details.
The consumer will connect to JCR periodically and return a List<javax.jcr.observation.Event> in the message body.
The snippet below creates a node named
node under the
/home/test node in the content repository. One additional property is added to the node as well:
my.contents.property which will contain the body of the message being sent.
from("direct:a").setHeader(JcrConstants.JCR_NODE_NAME, constant("node")) .setHeader("my.contents.property", body()) .to("jcr://user:pass@repository/home/test");
The following code will register an EventListener under the path import-application/inbox for Event.NODE_ADDED and Event.NODE_REMOVED events (event types 1 and 2, both masked as 3) and listening deep for all the children.
<route> <from uri="jcr://user:pass@repository/import-application/inbox?eventTypes=3&deep=true" /> <to uri="direct:execute-import-application" /> </route>