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);

Reply via email to