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 2009/12/27 17:19:12 UTC
svn commit: r894074 - in /cxf/trunk/rt/databinding/aegis/src:
main/java/org/apache/cxf/aegis/type/ test/java/org/apache/cxf/aegis/
test/java/org/apache/cxf/aegis/type/java5/
Author: bimargulies
Date: Sun Dec 27 16:19:11 2009
New Revision: 894074
URL: http://svn.apache.org/viewvc?rev=894074&view=rev
Log:
CXF-2593. When you have Collection<double[]>, for some crazy reason the JRE represents this the double[] as a
GenericArrayType and not a Class<double[]>. Add code to concoct and use the later when presented with the former.
Added:
cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionService.java (with props)
cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTestsWithService.java (with props)
Modified:
cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/TypeUtil.java
cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java
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.java
Modified: cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/TypeUtil.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/TypeUtil.java?rev=894074&r1=894073&r2=894074&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/TypeUtil.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/type/TypeUtil.java Sun Dec 27 16:19:11 2009
@@ -18,6 +18,8 @@
*/
package org.apache.cxf.aegis.type;
+import java.lang.reflect.Array;
+import java.lang.reflect.GenericArrayType;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.logging.Logger;
@@ -249,6 +251,16 @@
ParameterizedType pType = (ParameterizedType) type;
return getTypeRelatedClass(pType.getRawType());
}
+
+ if (type instanceof GenericArrayType) {
+ GenericArrayType gat = (GenericArrayType) type;
+ Type compType = gat.getGenericComponentType();
+ Class<?> arrayBaseType = getTypeRelatedClass(compType);
+ // belive it or not, this seems to be the only way to get the
+ // Class object for an array of primitive type.
+ Object instance = Array.newInstance(arrayBaseType, 0);
+ return instance.getClass();
+ }
return null;
}
}
Modified: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java?rev=894074&r1=894073&r2=894074&view=diff
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java (original)
+++ cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java Sun Dec 27 16:19:11 2009
@@ -56,6 +56,7 @@
import org.apache.cxf.frontend.ServerFactoryBean;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.helpers.MapNamespaceContext;
+import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
import org.apache.cxf.service.Service;
Added: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionService.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionService.java?rev=894074&view=auto
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionService.java (added)
+++ cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionService.java Sun Dec 27 16:19:11 2009
@@ -0,0 +1,97 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+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.Map;
+import java.util.SortedSet;
+import java.util.Stack;
+
+public class CollectionService implements CollectionServiceInterface {
+
+ private Map<String, Map<String, BeanWithGregorianDate>> lastComplexMap;
+
+ /** {@inheritDoc}*/
+ public Collection<String> getStrings() {
+ return null;
+ }
+
+ /** {@inheritDoc}*/
+ public void setLongs(Collection<Long> longs) {
+ }
+
+ /** {@inheritDoc}*/
+ public Collection getUnannotatedStrings() {
+ return null;
+ }
+
+ /** {@inheritDoc}*/
+ public Collection<Collection<String>> getStringCollections() {
+ return null;
+ }
+
+ /** {@inheritDoc}*/
+ public void takeDoubleList(List<Double> doublesList) {
+ }
+
+ /** {@inheritDoc}*/
+ public String takeSortedStrings(SortedSet<String> strings) {
+ return strings.first();
+ }
+
+ 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 Integer.toString(strings.size());
+ }
+
+ public String takeArrayList(ArrayList<String> strings) {
+ return strings.get(0);
+ }
+ //CHECKSTYLE:ON
+
+ public void mapOfMapWithStringAndPojo(Map<String, Map<String, BeanWithGregorianDate>> bigParam) {
+ lastComplexMap = bigParam;
+ }
+
+ protected Map<String, Map<String, BeanWithGregorianDate>> getLastComplexMap() {
+ return lastComplexMap;
+ }
+
+ public Collection<double[]> returnCollectionOfPrimitiveArrays() {
+ List<double[]> data = new ArrayList<double[]>();
+ double[] dataArray = new double[] {3.14, 2.0, -666.6 };
+ data.add(dataArray);
+ dataArray = new double[] {-666.6, 3.14, 2.0, 0 };
+ data.add(dataArray);
+ return data;
+ }
+
+}
\ No newline at end of file
Propchange: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionService.java
------------------------------------------------------------------------------
svn:eol-style = native
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=894074&r1=894073&r2=894074&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 Sun Dec 27 16:19:11 2009
@@ -49,4 +49,6 @@
void method1(List<String> headers1);
void mapOfMapWithStringAndPojo(Map<String, Map<String, BeanWithGregorianDate>> bigParam);
+
+ Collection<double[]> returnCollectionOfPrimitiveArrays();
}
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=894074&r1=894073&r2=894074&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 Sun Dec 27 16:19:11 2009
@@ -21,24 +21,14 @@
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.SortedSet;
-import java.util.Stack;
-import java.util.TreeSet;
import javax.xml.namespace.QName;
import org.w3c.dom.Document;
import org.apache.cxf.aegis.AbstractAegisTest;
-import org.apache.cxf.aegis.databinding.AegisDatabinding;
-import org.apache.cxf.aegis.databinding.XFireCompatibilityServiceConfiguration;
import org.apache.cxf.aegis.type.AegisType;
import org.apache.cxf.aegis.type.DefaultTypeMapping;
import org.apache.cxf.aegis.type.TypeCreationOptions;
@@ -48,7 +38,6 @@
import org.apache.cxf.aegis.type.java5.dto.DTOService;
import org.apache.cxf.aegis.type.java5.dto.ObjectDTO;
import org.apache.cxf.common.util.SOAPConstants;
-import org.apache.cxf.frontend.ClientProxyFactoryBean;
import org.junit.Before;
import org.junit.Test;
@@ -232,32 +221,7 @@
doc);
}
- @Test
- public void testListTypes() throws Exception {
- createService(CollectionServiceInterface.class, new CollectionService(), null);
-
- ClientProxyFactoryBean proxyFac = new ClientProxyFactoryBean();
- proxyFac.getServiceFactory().getServiceConfigurations().add(0,
- new XFireCompatibilityServiceConfiguration());
- proxyFac.setServiceClass(CollectionServiceInterface.class);
- proxyFac.setDataBinding(new AegisDatabinding());
- proxyFac.setAddress("local://CollectionServiceInterface");
- proxyFac.setBus(getBus());
-
- CollectionServiceInterface csi = (CollectionServiceInterface)proxyFac.create();
- SortedSet<String> strings = new TreeSet<String>();
- strings.add("Able");
- 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
- }
+
@Test
public void testNestedMapType() throws Exception {
@@ -270,101 +234,4 @@
AegisType valueType = mapType.getValueType();
assertFalse(valueType.getSchemaType().getLocalPart().contains("any"));
}
-
- /**
- * CXF-2017
- * @throws Exception
- */
- @Test
- public void testNestedMap() throws Exception {
- CollectionService impl = new CollectionService();
- createService(CollectionServiceInterface.class, impl, null);
-
- ClientProxyFactoryBean proxyFac = new ClientProxyFactoryBean();
- proxyFac.getServiceFactory().getServiceConfigurations().add(0,
- new XFireCompatibilityServiceConfiguration());
- proxyFac.setServiceClass(CollectionServiceInterface.class);
- proxyFac.setDataBinding(new AegisDatabinding());
- proxyFac.setAddress("local://CollectionServiceInterface");
- proxyFac.setBus(getBus());
-
- CollectionServiceInterface csi = (CollectionServiceInterface)proxyFac.create();
-
- Map<String, Map<String, BeanWithGregorianDate>> complexMap;
- complexMap = new HashMap<String, Map<String, BeanWithGregorianDate>>();
- Map<String, BeanWithGregorianDate> innerMap = new HashMap<String, BeanWithGregorianDate>();
- BeanWithGregorianDate bean = new BeanWithGregorianDate();
- bean.setName("shem bean");
- bean.setId(42);
- innerMap.put("firstBean", bean);
- complexMap.put("firstKey", innerMap);
- csi.mapOfMapWithStringAndPojo(complexMap);
-
- Map<String, Map<String, BeanWithGregorianDate>> gotMap = impl.getLastComplexMap();
- assertTrue(gotMap.containsKey("firstKey"));
- Map<String, BeanWithGregorianDate> v = gotMap.get("firstKey");
- BeanWithGregorianDate b = v.get("firstBean");
- assertNotNull(b);
-
- }
-
- public class CollectionService implements CollectionServiceInterface {
-
- private Map<String, Map<String, BeanWithGregorianDate>> lastComplexMap;
-
- /** {@inheritDoc}*/
- public Collection<String> getStrings() {
- return null;
- }
-
- /** {@inheritDoc}*/
- public void setLongs(Collection<Long> longs) {
- }
-
- /** {@inheritDoc}*/
- public Collection getUnannotatedStrings() {
- return null;
- }
-
- /** {@inheritDoc}*/
- public Collection<Collection<String>> getStringCollections() {
- return null;
- }
-
- /** {@inheritDoc}*/
- public void takeDoubleList(List<Double> doublesList) {
- }
-
- /** {@inheritDoc}*/
- public String takeSortedStrings(SortedSet<String> strings) {
- return strings.first();
- }
-
- 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 Integer.toString(strings.size());
- }
-
- public String takeArrayList(ArrayList<String> strings) {
- return strings.get(0);
- }
- //CHECKSTYLE:ON
-
- public void mapOfMapWithStringAndPojo(Map<String, Map<String, BeanWithGregorianDate>> bigParam) {
- lastComplexMap = bigParam;
- }
-
- protected Map<String, Map<String, BeanWithGregorianDate>> getLastComplexMap() {
- return lastComplexMap;
- }
-
- }
}
Added: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTestsWithService.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTestsWithService.java?rev=894074&view=auto
==============================================================================
--- cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTestsWithService.java (added)
+++ cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTestsWithService.java Sun Dec 27 16:19:11 2009
@@ -0,0 +1,125 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.aegis.type.java5;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.apache.cxf.aegis.AbstractAegisTest;
+import org.apache.cxf.aegis.databinding.AegisDatabinding;
+import org.apache.cxf.aegis.databinding.XFireCompatibilityServiceConfiguration;
+import org.apache.cxf.frontend.ClientProxyFactoryBean;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ *
+ */
+public class CollectionTestsWithService extends AbstractAegisTest {
+
+ private CollectionServiceInterface csi;
+ private CollectionService impl;
+
+ @Before
+ public void before() {
+ impl = new CollectionService();
+ createService(CollectionServiceInterface.class, impl, null);
+
+ ClientProxyFactoryBean proxyFac = new ClientProxyFactoryBean();
+ proxyFac.getServiceFactory().getServiceConfigurations().add(0,
+ new XFireCompatibilityServiceConfiguration());
+ proxyFac.setServiceClass(CollectionServiceInterface.class);
+ proxyFac.setDataBinding(new AegisDatabinding());
+ proxyFac.setAddress("local://CollectionServiceInterface");
+ proxyFac.setBus(getBus());
+
+ csi = (CollectionServiceInterface)proxyFac.create();
+ }
+
+ /**
+ * CXF-2017
+ * @throws Exception
+ */
+ @Test
+ public void testNestedMap() throws Exception {
+ Map<String, Map<String, BeanWithGregorianDate>> complexMap;
+ complexMap = new HashMap<String, Map<String, BeanWithGregorianDate>>();
+ Map<String, BeanWithGregorianDate> innerMap = new HashMap<String, BeanWithGregorianDate>();
+ BeanWithGregorianDate bean = new BeanWithGregorianDate();
+ bean.setName("shem bean");
+ bean.setId(42);
+ innerMap.put("firstBean", bean);
+ complexMap.put("firstKey", innerMap);
+ csi.mapOfMapWithStringAndPojo(complexMap);
+
+ Map<String, Map<String, BeanWithGregorianDate>> gotMap = impl.getLastComplexMap();
+ assertTrue(gotMap.containsKey("firstKey"));
+ Map<String, BeanWithGregorianDate> v = gotMap.get("firstKey");
+ BeanWithGregorianDate b = v.get("firstBean");
+ assertNotNull(b);
+
+ }
+
+ @Test
+ public void testListTypes() throws Exception {
+ SortedSet<String> strings = new TreeSet<String>();
+ strings.add("Able");
+ 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
+
+ }
+
+ @Test
+ public void returnValueIsCollectionOfArrays() {
+ Collection<double[]> doubleDouble = csi.returnCollectionOfPrimitiveArrays();
+ assertEquals(2, doubleDouble.size());
+ double[][] data = new double[2][];
+
+ for (double[] array : doubleDouble) {
+ if (array.length == 3) {
+ data[0] = array;
+ } else {
+ data[1] = array;
+ }
+ }
+ assertNotNull(data[0]);
+ assertNotNull(data[1]);
+ assertEquals(3.14, data[0][0], .0001);
+ assertEquals(2, data[0][1], .0001);
+ assertEquals(-666.6, data[0][2], .0001);
+ assertEquals(-666.6, data[1][0], .0001);
+ assertEquals(3.14, data[1][1], .0001);
+ assertEquals(2.0, data[1][2], .0001);
+ }
+
+}
Propchange: cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/type/java5/CollectionTestsWithService.java
------------------------------------------------------------------------------
svn:eol-style = native