[jdom-interest] JDOM 2 list of elements, remove nulls out entries and fails to remove?
David Wall
david.wall at myeastside.com
Fri May 11 17:59:41 PDT 2012
By the way, when I changed the code to create my own "non-live" lists,
the problem goes away and it works as expected:
List<Element> documentVersionElements = new
LinkedList<Element>(rootElement.getChildren("DocumentVersion", ns));
But the elements I'm removing aren't nested in the XML/JDOM, so removing
one shouldn't cause anything else to change even with a "live" view of
the JDOM. I suppose when I remove an Element, perhaps it moves the List
element order for everything after it and so my live lists are then
messed up?
Anyway, it seems that the Element's hashCode/equals works as expected in
a regular LinkedList of Elements.
On 5/11/2012 5:42 PM, David Wall wrote:
> I believe I've run into a problem that I don't think I had with JDOM
> 1.1.3 before I upgraded to 2.0.1.
>
> I create a list of elements of a selected element using:
>
> List<?> documentVersionElements =
> rootElement.getChildren("DocumentVersion", ns);
>
> I see that I have 6 elements as expected in my list. None are null.
>
> I am basically then trying to find a matching related element id in
> that list using something like:
>
> Element found = null;
> ListIterator<?> iter =
> documentVersionElements.listIterator();
> while( iter.hasNext() ) {
> Element checkElement = (Element)iter.next();
> EsfUUID evParentId = new
> EsfUUID(checkElement.getChildText("documentId", ns));
> if ( evParentId.equals(id) ) {
> found = checkElement;
> break;
> }
> }
>
> Then, assuming I find it (found != null), I process it as expected.
> But I then want to remove the found element from the element list so
> it cannot be found again, so I use this:
>
> documentVersionElements.remove(found);
>
> Most of the time, this seems to work as expected, and the
> documentVersionElements list is then shorter by 1. But there are
> times when a list of 6 elements remains 6 elements after the remove
> (and remove() returns false), with 4 of them now null (not removed,
> but actually a null element), so in when I return to the
> listIterator() above and get my next() element, the element is null.
>
> It's as if my Element objects are not unique in the list in terms of
> equals/hashCode as my elements should never be nulled out.
>
> I am not sure why an element I find by iterating cannot then be
> removed. How could it fail to remove? Why would it change other list
> elements to NULL instead? Is this not a valid usage pattern?
>
> Thanks,
> David
More information about the jdom-interest
mailing list