You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xmlbeans.apache.org by "Radu Preotiuc-Pietro (JIRA)" <xm...@xml.apache.org> on 2008/04/08 00:53:25 UTC

[jira] Resolved: (XMLBEANS-252) List returned by generated getFooList() is not sortable

     [ https://issues.apache.org/jira/browse/XMLBEANS-252?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Radu Preotiuc-Pietro resolved XMLBEANS-252.
-------------------------------------------

    Resolution: Won't Fix

I am afraid we can't fix this one.

In XMLBeans, an XmlObject can be seen as a pointer to a place in the document. When one does

    List l = parent.getFooList();
    XmlObject o = l.get(1),

the elements in the list are pointers to the XML elements in the document. When one sets the content of the first element to some value, say

    parent.setFooArray(1, o2)

then o will point to an element whose content has now changed (you don't even need an array to observe this). In particular, in the sort case if you have

    XmlObject o1 = l.get(1);
    XmlObject o2 = l.get(2);
    l.set(1, o2);

after these operations, o1 has the same contents as o2 and if one wants a swap, then one needs to do:

    XmlObject o1 = l.get(1).copy();
    XmlObject o2 = l.get(2);
    l.set(1, o2);
    l.set(2, o1);

I know that it is kind of unintuitive, but this is how it always worked. I think between a change in behavior that will potentially cause pain to people who want to upgrade and depend (perhaps unknowkingly) on the existing behavior and a simple workaround for people who need this functionality, I would choose the latter.

So if one needs to sort the array "for read", one can do

List l2 = new ArrayList(l);

If one wants to sort the elements in the document, then one would do

List l2 = new ArrayList(l.size());
for (int i=0; i<l.size(); i++)
    l2.add(l.get(i).copy());
Collections.sort(l2);
parent.setFooArray(l2.toArray());


> List<Type> returned by generated getFooList() is not sortable
> -------------------------------------------------------------
>
>                 Key: XMLBEANS-252
>                 URL: https://issues.apache.org/jira/browse/XMLBEANS-252
>             Project: XMLBeans
>          Issue Type: Bug
>    Affects Versions: Version 2.1
>         Environment: Win XP SP2, JRE 1.5.0_06-b05, XMLBeans 2.1.0
>            Reporter: Erik Godding Boye
>            Priority: Critical
>
> I am trying to sort the list returned by the generated getFooList() [multiple occurrence method] using java.util.Collections#sort(java.util.List<Type>, java.util.Comparator<Type>). The elements are not sorted, and no exception is thrown. I would expect either, but I do not see any reason for the list to be unmodifiable (and thus throwing exception when trying to sort it). A simple workaround is to create a new list supplying the original list (from the generated method) in the constructor. The new list is sortable without any problems.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org