2009/4/15 Felix Meschberger <[email protected]>:
>> I'm using o.a.s.commons.json.jcr.JsonItemWriter.dump(NodeIterator,
>
> I have to admit, that the JsonItemWriter is kind of strange in light of
> the resource tree: it dumps (part of) the repository but not the
> resource tree....
>
>> Writer), and I'm experiencing that it does not output any nodes.
>> The method calls dumpSingleNode for each node in the iterator, and
>> passes a 0 for maxRecursionLevels, which makes no sense to me.
>
> This is true and desired, since this method AFAICT is intended to only
> dump the nodes and their properties of a NodeIterator.

That is the desired behaviour, yes, but that is not how it currently works.

dump(NodeIterator) does not dump ANY node, regardless of recursion
level, because the test at JsonItemWriter#134:
recursionLevelActive(currentRecursionLevel, maxRecursionLevels) ..
always returns false, because currentRecursionLevel == 1 and
maxRecursionLevels == 0.
Isn't this a bug?

I made a testcase:
        JsonItemWriter writer = new JsonItemWriter(null);
        MockNode node1 = new MockNode("/node1");
        MockNode node2 = new MockNode("/node2");
        final NodeIterator it = new MockNodeIterator(new Node[]{node1, node2});
        final StringWriter sw = new StringWriter();
        writer.dump(it, sw);
        System.out.println(sw.toString());
This prints an empty JSON array: [].

However, with the change I proposed in the previous mail:
JsonItemWriter#76:
- dumpSingleNode(it.nextNode(), w, 1, 0);
+ dump(it.nextNode(), w, 1, 1);

... the test prints the expected two JSON objects:
[{"name":"node1"},{"name":"node2"}]

I'd be happy to create a JIRA task and fix this, should you agree that
this is a bug (as I suspect it is).

-- 
Vidar S. Ramdal <[email protected]> - http://www.idium.no
Akersgata 16, N-0158 Oslo, Norway
+47 21 531941, ext 2070

Reply via email to