Re: streaming document output
Rolf Lear <[email protected]> Thu, 11 Apr 2013 14:15:17 -0400
| Newsgroups | gmane.comp.java.jdom.general |
|---|---|
| Message-ID | <[email protected]> |
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? > > _______________________________________________ To control your jdom-interest membership: http://www.jdom.org/mailman/options/jdom-interest/[email protected]