You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2011/05/26 10:52:57 UTC

svn commit: r1127829 - in /cxf/trunk: rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/ systests/databinding/src/test/java/org/apache/cxf/systest/aegis/

Author: ffang
Date: Thu May 26 08:52:56 2011
New Revision: 1127829

URL: http://svn.apache.org/viewvc?rev=1127829&view=rev
Log:
[CXF-3527]NPE while use generic in collections with aegis databinding

Modified:
    cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/AbstractTypeCreator.java
    cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java
    cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/SportsService.java
    cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/SportsServiceImpl.java

Modified: cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/AbstractTypeCreator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/AbstractTypeCreator.java?rev=1127829&r1=1127828&r2=1127829&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/AbstractTypeCreator.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/AbstractTypeCreator.java Thu May 26 08:52:56 2011
@@ -22,6 +22,7 @@ import java.beans.PropertyDescriptor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
 import java.util.Collection;
 import java.util.Map;
 
@@ -103,12 +104,14 @@ public abstract class AbstractTypeCreato
     }
 
     public AegisType createTypeForClass(TypeClassInfo info) {
-
+        
         Class javaClass = TypeUtil.getTypeRelatedClass(info.getType());
         AegisType result = null;
         boolean newType = true;
-
-        if (info.getAegisTypeClass() != null) {
+        if (info.getType() instanceof TypeVariable) {
+            //it's the generic type
+            result = getOrCreateGenericType(info);
+        } else if (info.getAegisTypeClass() != null) {
             result = createUserType(info);
         } else if (isArray(javaClass)) {
             result = createArrayType(info);

Modified: cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java?rev=1127829&r1=1127828&r2=1127829&view=diff
==============================================================================
--- cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java (original)
+++ cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java Thu May 26 08:52:56 2011
@@ -22,6 +22,7 @@ package org.apache.cxf.systest.aegis;
 
 import java.lang.reflect.Method;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -178,6 +179,21 @@ public class AegisClientServerTest exten
         assertEquals(result.toString(), "{key1={1=3}}");
     }
     
+    @Test
+    public void testGenericCollection() throws Exception {
+        AegisDatabinding aegisBinding = new AegisDatabinding();
+        JaxWsProxyFactoryBean proxyFactory = new JaxWsProxyFactoryBean();
+        proxyFactory.setDataBinding(aegisBinding);
+        proxyFactory.setServiceClass(SportsService.class);
+        proxyFactory.setAddress("http://localhost:" + PORT + "/jaxwsAndAegisSports");
+        proxyFactory.getInInterceptors().add(new LoggingInInterceptor());
+        proxyFactory.getOutInterceptors().add(new LoggingOutInterceptor());
+        SportsService service = (SportsService) proxyFactory.create();
+        List<String> list = new ArrayList<String>();
+        list.add("ffang");
+        String ret = service.getGeneric(list);
+        assertEquals(ret, "ffang");
+    }
           
     @Test
     public void testDynamicClient() throws Exception {

Modified: cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/SportsService.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/SportsService.java?rev=1127829&r1=1127828&r2=1127829&view=diff
==============================================================================
--- cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/SportsService.java (original)
+++ cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/SportsService.java Thu May 26 08:52:56 2011
@@ -43,4 +43,6 @@ public interface SportsService {
     }
 
     Map<String, Map<Integer, Integer>> testComplexMapResult();
+    
+    <T> T getGeneric(Collection<T> collection);
 }

Modified: cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/SportsServiceImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/SportsServiceImpl.java?rev=1127829&r1=1127828&r2=1127829&view=diff
==============================================================================
--- cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/SportsServiceImpl.java (original)
+++ cxf/trunk/systests/databinding/src/test/java/org/apache/cxf/systest/aegis/SportsServiceImpl.java Thu May 26 08:52:56 2011
@@ -22,6 +22,7 @@ package org.apache.cxf.systest.aegis;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -60,5 +61,16 @@ public class SportsServiceImpl implement
         return result;
 
     }
+
+   
+    public <T> T getGeneric(Collection<T> collection) {
+        Iterator<T> iter = collection.iterator();
+        
+        T ret = null;
+        if (iter.hasNext()) {
+            ret = iter.next();
+        }
+        return ret;
+    }
       
 }