Author: dkulp Date: Wed Sep 14 17:56:31 2011 New Revision: 1170744 URL: http://svn.apache.org/viewvc?rev=1170744&view=rev Log: Merged revisions 1170736 via svnmerge from https://svn.us.apache.org/repos/asf/cxf/branches/2.4.x-fixes
................ r1170736 | dkulp | 2011-09-14 13:52:42 -0400 (Wed, 14 Sep 2011) | 10 lines Merged revisions 1170731 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1170731 | dkulp | 2011-09-14 13:43:57 -0400 (Wed, 14 Sep 2011) | 2 lines [CXF-3611] Fix the detection of array/list types in JAXBSchemaInitializer ........ ................ Modified: cxf/branches/2.3.x-fixes/ (props changed) cxf/branches/2.3.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java cxf/branches/2.3.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java Propchange: cxf/branches/2.3.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.3.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java?rev=1170744&r1=1170743&r2=1170744&view=diff ============================================================================== --- cxf/branches/2.3.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java (original) +++ cxf/branches/2.3.x-fixes/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBSchemaInitializer.java Wed Sep 14 17:56:31 2011 @@ -26,6 +26,7 @@ import java.lang.reflect.GenericArrayTyp import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; +import java.util.Collection; import java.util.Iterator; import java.util.logging.Logger; @@ -564,7 +565,10 @@ class JAXBSchemaInitializer extends Serv if (cls instanceof Class) { return ((Class)cls).isArray(); } else if (cls instanceof ParameterizedType) { - return true; + ParameterizedType pt = (ParameterizedType)cls; + return pt.getActualTypeArguments().length == 1 + && pt.getRawType() instanceof Class + && Collection.class.isAssignableFrom((Class)pt.getRawType()); } else if (cls instanceof GenericArrayType) { return true; } Modified: cxf/branches/2.3.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java?rev=1170744&r1=1170743&r2=1170744&view=diff ============================================================================== --- cxf/branches/2.3.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java (original) +++ cxf/branches/2.3.x-fixes/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java Wed Sep 14 17:56:31 2011 @@ -26,6 +26,7 @@ import java.io.StringWriter; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.xml.XMLConstants; @@ -79,6 +80,9 @@ public class JAXBEncoderDecoderTest exte RequestWrapper wrapperAnnotation; JAXBContext context; Schema schema; + Map<String, String> mapField; + String arrayField[]; + List<String> listField; @Before public void setUp() throws Exception { @@ -100,6 +104,24 @@ public class JAXBEncoderDecoderTest exte assertNotNull(schema); } + + private Type getFieldType(String name) throws Exception { + return this.getClass() + .getDeclaredField(name) + .getGenericType(); + } + + @Test + public void testCXF3611() throws Exception { + Map<String, String> foo = new HashMap<String, String>(); + + assertTrue(JAXBSchemaInitializer.isArray(getFieldType("arrayField"))); + assertTrue(JAXBSchemaInitializer.isArray(getFieldType("listField"))); + + assertFalse(JAXBSchemaInitializer.isArray(foo.getClass())); + assertFalse(JAXBSchemaInitializer.isArray(getFieldType("mapField"))); + } + @Test public void testMarshallIntoDOM() throws Exception { String str = new String("Hello");
