[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xmlbeans-dev
Subject:    [jira] Resolved: (XMLBEANS-252) List<Type> returned by generated
From:       "Radu Preotiuc-Pietro (JIRA)" <xmlbeans-dev () xml ! apache ! org>
Date:       2008-04-07 22:53:25
Message-ID: 2040210046.1207608805588.JavaMail.jira () brutus
[Download RAW message or body]


     [ 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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic