[jdom-interest] streaming document output

Rolf Lear jdom at tuis.net
Thu Apr 11 11:15:17 PDT 2013


Hi Patrick.

OK, you have a long list of child Elements, and you generate them 
on-the-fly during output. You also fudge the same in JDOM 1 by using 
indexed access too. Now JDOM 2.x is not using the iterator....
... OK, I see the problem. I think the right fix would be for the 
XMLOutputter to use the iterator (yes, they are faster in JDOM 2 than 
1.x, but maybe not as fast as indexed access)....

As a side note, yes, XMLOutputter is final, by design. The bulk of the 
logic is 'exported' to the interface XMLOutputProcessor, and there's a 
'nearly' concrete implementation of that - 
http://jdom.org/docs/apidocs/org/jdom2/output/support/AbstractXMLOutputProcessor.html 
- read the comments. If a fix for the core JDOM code is not enough, you 
will likely want to extend the AbstractXMLOutputProcessor and override 
printElement(...).

I wrote a little blurb on why I changed the XMLOutputter to be final 
here: 
https://github.com/hunterhacker/jdom/wiki/JDOM2-Feature-Outputter-Updates

Let me inspect the code for where you believe the index-based lookups 
are.... if you have a pointer for where I should start that will 
help.... Ahh, it's in the Walker classes... that is a little bit 
'hairy'. Let me play with it a little bit.

Rolf



On 11/04/2013 1:29 PM, Patrick Dowler wrote:
>
> We have a few web services that send XML documents in the response. 
> The documents can be large and when they are there is always one spot 
> where there is an arbitrarily long list of child elements.
>
> With jdom1 we had implemented a subclass of Element for the element 
> with the long list of child elements and then had the iterator over 
> that list dynamically generate the children. Since the XMLOutputter 
> used indexed access rather than the iterator, we also had to subclass 
> it and override the list access. That works fine at the time.
>
> No we are porting to jdom2 and I see that the outputter still uses 
> indexed access; that is a shame given all the comments in the code 
> about how the iterator is generally better than having to call size() 
> on the lists. It would be really nice and enable people to implement 
> customisations if jdom2 used the iterators rather than the indexing 
> throughout the codebase. Is that a lot of work?
>
> The further problem we have right now is that XMLOutputter is final so 
> we can't trivially port our jdom1 code. Is implementing a custom 
> XMLOutputProcessor the right place to do that? The change we'd be 
> making is to change it to use iterators... is that something that 
> should go into the core library?
>
> For XMLOutputProcessor, I am looking specifically at these methods:
>
> process(Writer,Format,Element)
> process(Writer,Format,List)
>
> Is that the place to change to iterators?
>
>



More information about the jdom-interest mailing list