You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by cs...@apache.org on 2005/12/15 18:20:17 UTC
svn commit: r357046 - in /beehive/trunk/system-controls:
src/webservice/control/org/apache/beehive/controls/system/webservice/utils/
test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/
Author: cschoett
Date: Thu Dec 15 09:20:07 2005
New Revision: 357046
URL: http://svn.apache.org/viewcvs?rev=357046&view=rev
Log:
Removed axis dependency from HolderUtils. Also updated and added to HolderUtils junit tests.
Modified:
beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java
beehive/trunk/system-controls/test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/HolderUtilsTest.java
Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java?rev=357046&r1=357045&r2=357046&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/utils/HolderUtils.java Thu Dec 15 09:20:07 2005
@@ -17,61 +17,152 @@
*/
package org.apache.beehive.controls.system.webservice.utils;
-import java.lang.reflect.Field;
import javax.xml.rpc.holders.Holder;
-
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * Utilities for moving values into and out of jaxrpc Holders.
+ */
public class HolderUtils {
+
+ /**
+ * Stuff a value into a holder class.
+ *
+ * @param holder The holder.
+ * @param value The value.
+ * @throws NoSuchFieldException
+ * @throws IllegalAccessException
+ */
public static void stuffHolderValue(Holder holder, Object value)
- throws NoSuchFieldException, IllegalAccessException {
+ throws NoSuchFieldException, IllegalAccessException {
+
Field valueField = holder.getClass().getField("value");
Object curValueInHolder = valueField.get(holder);
Class classOfValueFieldInHolder;
- if(curValueInHolder == null) {
+
+ if (curValueInHolder == null) {
classOfValueFieldInHolder = valueField.getType();
}
else {
classOfValueFieldInHolder = curValueInHolder.getClass();
}
- if(null == value) {
+ if (value == null) {
setFieldInObject(valueField, holder, null);
return;
}
- if(classOfValueFieldInHolder.isAssignableFrom(value.getClass())) {
- setFieldInObject(valueField, holder, value);
-
- }
- else { // we need to convert the class to the holder type
-
- try {
- Object convertedValue = org.apache.axis.utils.JavaUtils
- .convert(value, classOfValueFieldInHolder);
- setFieldInObject(valueField, holder, convertedValue);
- }
- catch(IllegalArgumentException e) {
-
- e.printStackTrace();
- }
- catch(IllegalAccessException e) {
-
- e.printStackTrace();
- }
- }
+ Object convertedValue = convertToHolderType(value, classOfValueFieldInHolder);
+ setFieldInObject(valueField, holder, convertedValue);
}
+ /**
+ * Set the field value in the specified object.
+ *
+ * @param valueField Field to set.
+ * @param destObject Object.
+ * @param value Field value.
+ * @throws IllegalArgumentException
+ * @throws IllegalAccessException
+ */
private static void setFieldInObject(Field valueField, Object destObject, Object value)
- throws IllegalArgumentException,
- IllegalAccessException {
- if(valueField.getType().isPrimitive()) {
- if(value == null)
+ throws IllegalArgumentException, IllegalAccessException {
+
+ if (valueField.getType().isPrimitive()) {
+ if (value == null) {
; // Don't need to set anything
- else
+ }
+ else {
valueField.set(destObject, value);
+ }
}
else {
valueField.set(destObject, value);
}
}
+ /**
+ * Convert value to the class of the holder field value.
+ *
+ * @param value
+ * @param classOfValueFieldInHolder
+ * @return The converted value, null if value cannot be converted.
+ */
+ private static Object convertToHolderType(Object value, Class classOfValueFieldInHolder) {
+
+ if (classOfValueFieldInHolder == null || value == null) {
+ return value;
+ }
+
+ // simple transformation
+ if (classOfValueFieldInHolder.isAssignableFrom(value.getClass())) {
+ return value;
+ }
+
+ // Calendar -> Date
+ if (value instanceof Calendar && classOfValueFieldInHolder == Date.class) {
+ return ((Calendar) value).getTime();
+ }
+ if (value instanceof Date && classOfValueFieldInHolder == Calendar.class) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime((Date) value);
+ return calendar;
+ }
+
+ // Calendar -> java.sql.Date
+ if (value instanceof Calendar && classOfValueFieldInHolder == java.sql.Date.class) {
+ return new java.sql.Date(((Calendar) value).getTime().getTime());
+ }
+
+ // HashMap -> Hashtable
+ if (value instanceof HashMap && classOfValueFieldInHolder == Hashtable.class) {
+ return new Hashtable((HashMap) value);
+ }
+
+ // value -> array transformation
+ if (classOfValueFieldInHolder.isArray() &&
+ !classOfValueFieldInHolder.getComponentType().equals(Object.class) &&
+ classOfValueFieldInHolder.getComponentType().isAssignableFrom(value.getClass())) {
+ Object array = Array.newInstance(classOfValueFieldInHolder.getComponentType(), 1);
+ Array.set(array, 0, value);
+ return array;
+ }
+
+ // list -> array transformation
+ if (classOfValueFieldInHolder.isArray() && value instanceof List) {
+ return convertListToArray((List) value, classOfValueFieldInHolder);
+ }
+
+ // can't convert - return null
+ return null;
+ }
+
+ /**
+ * Convert a java.util.List implementation to an array.
+ *
+ * @param list List to convert.
+ * @param arrayType Array type to convert to.
+ * @return Array of arrayTYpe, null if can't convert.
+ */
+ private static Object convertListToArray(List list, Class arrayType) {
+ if (list.isEmpty()) {
+ return Array.newInstance(arrayType, 0);
+ }
+
+ Class listComponentClazz = list.get(0).getClass();
+ if (listComponentClazz.isAssignableFrom(arrayType.getComponentType())) {
+ Object[] newArray = (Object[]) Array.newInstance(arrayType.getComponentType(), 1);
+ return list.toArray(newArray);
+ }
+
+ return null;
+ }
}
Modified: beehive/trunk/system-controls/test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/HolderUtilsTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/HolderUtilsTest.java?rev=357046&r1=357045&r2=357046&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/HolderUtilsTest.java (original)
+++ beehive/trunk/system-controls/test/webservice/jcxgen-tests/tests/org/apache/beehive/controls/system/webservice/units/holders/HolderUtilsTest.java Thu Dec 15 09:20:07 2005
@@ -17,66 +17,126 @@
*/
package org.apache.beehive.controls.system.webservice.units.holders;
-import java.util.ArrayList;
-
-import javax.xml.rpc.holders.Holder;
-import javax.xml.rpc.holders.IntHolder;
-
-import org.apache.beehive.wsm.databinding.GenericHolder;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
import org.apache.beehive.controls.system.webservice.utils.HolderUtils;
+import org.apache.beehive.wsm.databinding.GenericHolder;
-import junit.framework.TestCase;
+import javax.xml.rpc.holders.IntHolder;
+import javax.xml.rpc.holders.BigDecimalHolder;
+import javax.xml.rpc.holders.IntegerWrapperHolder;
+import javax.xml.rpc.holders.CalendarHolder;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.math.BigDecimal;
public class HolderUtilsTest extends TestCase {
- public void testStuffingHolders() throws NoSuchFieldException, IllegalAccessException {
- GenericHolder<MyClass> myHolder = new GenericHolder<MyClass>(new MyClass());
- Holder aHolder = myHolder;
-
- MyClass theValue = new MyClass("AAA");
- Object anObject = theValue;
-
-
- HolderUtils.stuffHolderValue(myHolder, anObject);
- assertTrue("AAA".equals(myHolder.value.name));
-
- // // stuff null
- HolderUtils.stuffHolderValue(myHolder, null);
- System.out.println("After stuffing null to straight holder my name is: " + myHolder.value);
-
- // stuff object to holder of static array
- MyClassArrayHolder myStaticArrayHolder = new MyClassArrayHolder();
- Holder anStaticArrayHolder = myStaticArrayHolder;
- HolderUtils.stuffHolderValue(anStaticArrayHolder, anObject);
- MyClass[] myStaticArrayValueResult = myStaticArrayHolder.value;
- assertTrue("AAA".equals(myStaticArrayValueResult[0].name));
-
- // holder of array stuff object
- GenericHolder<MyClass[]> myArrayHolder = new GenericHolder<MyClass[]>(new MyClass[0]);
- Holder anArrayHolder = myArrayHolder;
- HolderUtils.stuffHolderValue(anArrayHolder, anObject);
- MyClass[] myArrayValueResult = myArrayHolder.value;
- assertTrue("AAA".equals(myArrayValueResult[0].name));
-
- // holder of array stuff array list of objects.
- myArrayHolder = new GenericHolder<MyClass[]>(new MyClass[0]);
- anArrayHolder = myArrayHolder;
- ArrayList myClassList = new ArrayList();
- myClassList.add(new MyClass("aaaa"));
- myClassList.add(new MyClass("bbbb"));
- HolderUtils.stuffHolderValue(anArrayHolder, myClassList);
- myArrayValueResult = myArrayHolder.value;
- assertTrue("aaaa".equals(myArrayValueResult[0].name));
- assertTrue("bbbb".equals( myArrayValueResult[1].name));
-
-
- // stuff null to my holder of primitive type
- IntHolder ih = new IntHolder();
- HolderUtils.stuffHolderValue(ih, null);
- assertTrue(0 == ih.value);
-
-
- }
+ public void testStuffIntHolder() throws Exception {
+ IntHolder ih = new IntHolder();
+ HolderUtils.stuffHolderValue(ih, null);
+ assertEquals(0, ih.value);
+
+ HolderUtils.stuffHolderValue(ih, new Integer(8));
+ assertEquals(8, ih.value);
+
+ HolderUtils.stuffHolderValue(ih, 9);
+ assertEquals(9, ih.value);
+ }
+
+ public void testStuffIntegerWrapperHolder() throws Exception {
+ IntegerWrapperHolder ih = new IntegerWrapperHolder();
+ HolderUtils.stuffHolderValue(ih, null);
+ assertNull(ih.value);
+
+ HolderUtils.stuffHolderValue(ih, new Integer(5));
+ assertEquals(5, ih.value.intValue());
+
+ HolderUtils.stuffHolderValue(ih, 4);
+ assertEquals(4, ih.value.intValue());
+ }
+
+ public void testStuffBigDecimalHolder() throws Exception {
+ BigDecimalHolder bdh = new BigDecimalHolder();
+ HolderUtils.stuffHolderValue(bdh, null);
+ assertNull(bdh.value);
+
+ HolderUtils.stuffHolderValue(bdh, BigDecimal.TEN);
+ assertEquals(BigDecimal.TEN, bdh.value);
+ }
+
+ public void testStuffCalendarHolder() throws Exception {
+ CalendarHolder ch = new CalendarHolder();
+ Calendar c = new GregorianCalendar();
+ c.setTimeInMillis(123456789);
+ HolderUtils.stuffHolderValue(ch, c);
+ assertEquals(0, c.compareTo(ch.value));
+ }
+
+ public void testGenericHolderComplexValue() throws Exception {
+ GenericHolder<MyClass> myHolder = new GenericHolder<MyClass>(new MyClass());
+ MyClass theValue = new MyClass("AAA");
+ HolderUtils.stuffHolderValue(myHolder, theValue);
+ assertEquals("AAA", myHolder.value.name);
+ }
+
+ public void testGenericHolderNullValue() throws Exception {
+ GenericHolder<MyClass> myHolder = new GenericHolder<MyClass>(new MyClass());
+ HolderUtils.stuffHolderValue(myHolder, null);
+ assertNull(myHolder.value);
+ }
+
+ public void testMyClassArrayHolderArrayStuffObject() throws Exception {
+
+ // stuff object to holder of static array
+ MyClassArrayHolder myStaticArrayHolder = new MyClassArrayHolder();
+ MyClass theValue = new MyClass("BBB");
+ HolderUtils.stuffHolderValue(myStaticArrayHolder, theValue);
+ MyClass[] myStaticArrayValueResult = myStaticArrayHolder.value;
+ assertEquals("BBB", myStaticArrayValueResult[0].name);
+ }
+
+ public void testGenericHolderStuffObject() throws Exception {
+ // holder of array stuff object
+ GenericHolder<MyClass[]> myArrayHolder = new GenericHolder<MyClass[]>(new MyClass[0]);
+ MyClass theValue = new MyClass("CCC");
+ HolderUtils.stuffHolderValue(myArrayHolder, theValue);
+ MyClass[] myArrayValueResult = myArrayHolder.value;
+ assertEquals("CCC", myArrayValueResult[0].name);
+ }
+
+ public void testGenericHolderArrayStuffArray() throws Exception {
+ // holder of array stuff array list of objects.
+ GenericHolder<MyClass[]> myArrayHolder = new GenericHolder<MyClass[]>(new MyClass[0]);
+ ArrayList<MyClass> myClassList = new ArrayList<MyClass>();
+ myClassList.add(new MyClass("aaaa"));
+ myClassList.add(new MyClass("bbbb"));
+ HolderUtils.stuffHolderValue(myArrayHolder, myClassList);
+ MyClass[] myArrayValueResult = myArrayHolder.value;
+ assertEquals("aaaa", myArrayValueResult[0].name);
+ assertEquals("bbbb", myArrayValueResult[1].name);
+
+ }
+
+ public void testMyClassListHolderStuffList() throws Exception {
+ MyClassListHolder myHolder = new MyClassListHolder();
+ ArrayList<MyClass> myClassList = new ArrayList<MyClass>();
+ myClassList.add(new MyClass("cccc"));
+ myClassList.add(new MyClass("dddd"));
+ HolderUtils.stuffHolderValue(myHolder, myClassList);
+ assertEquals("cccc", ((MyClass)myHolder.value.get(0)).name);
+ assertEquals("dddd", ((MyClass)myHolder.value.get(1)).name);
+ }
+
+ public static Test suite() {
+ return new TestSuite(org.apache.beehive.controls.system.webservice.units.holders.HolderUtilsTest.class);
+ }
+
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(suite());
+ }
}