Hi,
I want to dump all JCR content to mongodb for analysis.
I see there is https://issues.apache.org/jira/browse/SLING-3485 .
And org.apache.sling.servlets.get.impl.helpers.ResourceTraversor does what
I want to do.
But I am stuck with older version of Sling.
Are there other ways to dump JSON of a node tree?
I have the following code but it cannot be compiled because
ResourceTraversor cannot be found:
final Pattern ENTRY = Pattern.compile("/\\d+/\\d+/[^/]+/jcr:content$");
class JsonDumpNodeVisitor extends TraversingItemVisitor {
private final ResourceResolver resolver;
private final PrintWriter writer;
public JsonDumpNodeVisitor(ResourceResolver resolver, PrintWriter
writer) {
this.resolver = resolver;
this.writer = writer;
}
@Override
protected void entering(Property property, int level) throws
RepositoryException {
}
@Override
protected void entering(Node node, int level) throws
RepositoryException {
final String nodeType = node.getPrimaryNodeType().getName();
final String path = node.getPath();
final Matcher m = ENTRY.matcher(path);
if (m.find() && "cq:PageContent".equals(nodeType)) {
final ResourceTraversor traversor = new ResourceTraversor(-1,
Long.MAX_VALUE, resolver.getResource(path), false);
traversor.collectResources();
writer.write(traversor.getJSONObject().toString());
}
}
@Override
protected void leaving(Property property, int level) throws
RepositoryException {
}
@Override
protected void leaving(Node node, int level) throws RepositoryException
{
}
}
final Node node =
resourceResolver.getResource(rootPath).adaptTo(Node.class);
final TraversingItemVisitor visitor = new
JsonDumpNodeVisotor(resourceResolver, out);
node.accept(visitor);