You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bi...@apache.org on 2008/11/15 13:58:25 UTC

svn commit: r714245 - in /cxf/trunk/rt/databinding/aegis/src: main/java/org/apache/cxf/aegis/type/collection/ test/java/org/apache/cxf/aegis/type/java5/

Author: bimargulies
Date: Sat Nov 15 04:58:24 2008
New Revision: 714245

URL: http://svn.apache.org/viewvc?rev=714245&view=rev
Log:
Fix CXF-1906 and some related issues involving collection subtypes. We still have java.util namespace bugs 
lurking, but I'm not chasing them today.

Modified:
    cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/collection/CollectionType.java
    cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionServiceInterface.aegis.xml
    cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionServiceInterface.java
    cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTest$CollectionService.aegis.xml
    cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTest.java

Modified: cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/collection/CollectionType.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/collection/CollectionType.java?rev=714245&r1=714244&r2=714245&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/collection/CollectionType.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/collection/CollectionType.java Sat Nov 15 04:58:24 2008
@@ -22,9 +22,11 @@
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
 import java.util.SortedSet;
+import java.util.Stack;
 import java.util.TreeSet;
 import java.util.Vector;
 
@@ -57,23 +59,34 @@
     @SuppressWarnings("unchecked")
     protected Collection<Object> createCollection() {
         Collection values = null;
-
-        if (getTypeClass().isAssignableFrom(List.class)) {
+        
+        /*
+         * getTypeClass returns the type of the object. These ifs asked if the proposed
+         * type can be assigned to the object, not the other way around. Thus List before
+         * Vector and Set before SortedSet.
+         */
+        
+        Class userTypeClass = getTypeClass();
+        if (userTypeClass.isAssignableFrom(List.class)) {
             values = new ArrayList();
-        } else if (getTypeClass().isAssignableFrom(SortedSet.class)) {
-            values = new TreeSet();
-        } else if (getTypeClass().isAssignableFrom(Set.class)) {
+        } else if (userTypeClass.isAssignableFrom(LinkedList.class)) {
+            values = new LinkedList();
+        } else if (userTypeClass.isAssignableFrom(Set.class)) {
             values = new HashSet();
-        } else if (getTypeClass().isAssignableFrom(Vector.class)) {
+        } else if (userTypeClass.isAssignableFrom(SortedSet.class)) {
+            values = new TreeSet();
+        } else if (userTypeClass.isAssignableFrom(Vector.class)) {
             values = new Vector();
-        } else if (getTypeClass().isInterface()) {
+        } else if (userTypeClass.isAssignableFrom(Stack.class)) {
+            values = new Stack();
+        } else if (userTypeClass.isInterface()) {
             values = new ArrayList();
         } else {
             try {
-                values = (Collection<Object>)getTypeClass().newInstance();
+                values = (Collection<Object>)userTypeClass.newInstance();
             } catch (Exception e) {
                 throw new DatabindingException("Could not create map implementation: "
-                                               + getTypeClass().getName(), e);
+                                               + userTypeClass.getName(), e);
             }
         }
 

Modified: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionServiceInterface.aegis.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionServiceInterface.aegis.xml?rev=714245&r1=714244&r2=714245&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionServiceInterface.aegis.xml (original)
+++ cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionServiceInterface.aegis.xml Sat Nov 15 04:58:24 2008
@@ -9,5 +9,14 @@
         <method name="takeSortedStrings">
         	<parameter index="0" mappedName="strings"/>
         </method>
+        <method name="takeUnsortedSet">
+        	<parameter index="0" mappedName="strings"/>
+        </method>
+        <method name="takeStack">
+        	<parameter index="0" mappedName="strings"/>
+        </method>
+        <method name="takeArrayList">
+        	<parameter index="0" mappedName="strings"/>
+        </method>
 	</mapping>
 </mappings>
\ No newline at end of file

Modified: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionServiceInterface.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionServiceInterface.java?rev=714245&r1=714244&r2=714245&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionServiceInterface.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionServiceInterface.java Sat Nov 15 04:58:24 2008
@@ -18,12 +18,12 @@
  */
 package org.apache.cxf.aegis.type.java5;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
 import java.util.SortedSet;
-
-import javax.jws.WebMethod;
-import javax.jws.WebParam;
+import java.util.Stack;
 
 public interface CollectionServiceInterface {
 
@@ -37,8 +37,13 @@
 
     void takeDoubleList(List<Double> doublesList);
 
-    String takeSortedStrings(@WebParam(name = "strings")SortedSet<String> strings);
+    String takeSortedStrings(SortedSet<String> strings);
+    
+    //CHECKSTYLE:OFF
+    String takeUnsortedSet(HashSet<String> strings);
+    String takeStack(Stack<String> strings);
+    String takeArrayList(ArrayList<String> strings);
+    //CHECKSTYLE:ON
     
-    @WebMethod
-    void method1(@WebParam(name = "headers1") List<String> headers1);
+    void method1(List<String> headers1);
 }

Modified: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTest$CollectionService.aegis.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTest%24CollectionService.aegis.xml?rev=714245&r1=714244&r2=714245&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTest$CollectionService.aegis.xml (original)
+++ cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTest$CollectionService.aegis.xml Sat Nov 15 04:58:24 2008
@@ -9,5 +9,14 @@
         <method name="takeSortedStrings">
         	<parameter index="0" mappedName="strings"/>
         </method>
+        <method name="takeUnsortedSet">
+        	<parameter index="0" mappedName="strings"/>
+        </method>
+        <method name="takeStack">
+        	<parameter index="0" mappedName="strings"/>
+        </method>
+        <method name="takeArrayList">
+        	<parameter index="0" mappedName="strings"/>
+        </method>
 	</mapping>
 </mappings>
\ No newline at end of file

Modified: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTest.java?rev=714245&r1=714244&r2=714245&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTest.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTest.java Sat Nov 15 04:58:24 2008
@@ -21,10 +21,13 @@
 import java.beans.Introspector;
 import java.beans.PropertyDescriptor;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.SortedSet;
+import java.util.Stack;
 import java.util.TreeSet;
 
 import javax.xml.namespace.QName;
@@ -226,7 +229,7 @@
     }
     
     @Test
-    public void testSortedSet() throws Exception {
+    public void testListTypes() throws Exception {
         createService(CollectionService.class, new CollectionService(), null);
         
         ClientProxyFactoryBean proxyFac = new ClientProxyFactoryBean();
@@ -243,6 +246,13 @@
         strings.add("Baker");
         String first = csi.takeSortedStrings(strings);
         assertEquals("Able", first);
+        
+        //CHECKSTYLE:OFF
+        HashSet<String> hashedSet = new HashSet<String>();
+        hashedSet.addAll(strings);
+        String countString = csi.takeUnsortedSet(hashedSet);
+        assertEquals("2", countString);
+        //CHECKSTYLE:ON
     }
 
     public class CollectionService implements CollectionServiceInterface {
@@ -278,5 +288,20 @@
         public void method1(List<String> headers1) {
             // do nothing, this is purely for schema issues.
         }
+
+        public String takeStack(Stack<String> strings) {
+            return strings.firstElement();
+        }
+
+        //CHECKSTYLE:OFF
+        public String takeUnsortedSet(HashSet<String> strings) {
+            return new Integer(strings.size()).toString();
+        }
+
+        public String takeArrayList(ArrayList<String> strings) {
+            return strings.get(0);
+        }
+        //CHECKSTYLE:ON
+
     }
 }