Unmarshalling Set to TreeSet instead of HashSet
-----------------------------------------------

                 Key: CXF-1906
                 URL: https://issues.apache.org/jira/browse/CXF-1906
             Project: CXF
          Issue Type: Bug
          Components: Aegis Databinding
    Affects Versions: 2.1.3
            Reporter: Marcus Christie
            Priority: Critical


When using the Aegis databinding, if you are deserializing to a class that has 
a Set in it, Aegis is currently instantiating the set as a SortedSet.  This 
fails for cases where the objects being added to the set do not implement 
Comparable, and is undesired in any case.

The error occurs in CollectionType.java:
{code:java}
    protected Collection<Object> createCollection() {
        Collection values = null;

        if (getTypeClass().isAssignableFrom(List.class)) {
            values = new ArrayList();
        } else if (getTypeClass().isAssignableFrom(SortedSet.class)) {
            values = new TreeSet();
        } else if (getTypeClass().isAssignableFrom(Set.class)) {
            values = new HashSet();
        } else if (getTypeClass().isAssignableFrom(Vector.class)) {
            values = new Vector();
        } else if (getTypeClass().isInterface()) {
            values = new ArrayList();
        } else {
....
{code}

If the typeClass is Set, then the second "if" clause evaluates to true since 
Set is a superclass/superinterface of SortedSet.

I've got a patch I'll submit and I'll explain the fix.

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

Reply via email to