You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by nt...@apache.org on 2007/03/22 23:18:29 UTC
svn commit: r521500 -
/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/XSDListUtils.java
Author: nthaker
Date: Thu Mar 22 15:18:28 2007
New Revision: 521500
URL: http://svn.apache.org/viewvc?view=rev&rev=521500
Log:
Axis2-2371
Fix for use of primitive data type array in rpc/lit scenario.
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/XSDListUtils.java
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/XSDListUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/XSDListUtils.java?view=diff&rev=521500&r1=521499&r2=521500
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/XSDListUtils.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/XSDListUtils.java Thu Mar 22 15:18:28 2007
@@ -20,10 +20,19 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
import java.util.List;
import java.util.StringTokenizer;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;
@@ -99,7 +108,7 @@
* @throws NoSuchMethodException
* @throws IllegalArgumentException
*/
- public static Object fromXSDListString(String xsdListString, Class type) throws IllegalArgumentException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
+ public static Object fromXSDListString(String xsdListString, Class type) throws IllegalArgumentException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException, ParseException, DatatypeConfigurationException {
// TODO only supports arrays right now. Need to implement this for List
if (type.isArray()) {
Class componentType = type.getComponentType();
@@ -112,7 +121,14 @@
Object componentObject = getFromText(text, componentType);
list.add(componentObject);
}
- Object array = Array.newInstance(componentType, list.size());
+ Class arrayType = componentType;
+ if(componentType.isPrimitive()){
+ Class boxedType = getBoxedType(componentType);
+ if(boxedType!=null){
+ arrayType = boxedType;
+ }
+ }
+ Object array = Array.newInstance(arrayType, list.size());
return list.toArray((Object[]) array);
} else {
throw new IllegalArgumentException(type.toString());
@@ -149,7 +165,7 @@
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
- private static Object getFromText(String value, Class componentType) throws NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
+ private static Object getFromText(String value, Class componentType) throws NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, ParseException, DatatypeConfigurationException {
// TODO This needs to be upgraded to handle more complicated objects (enum, calendar, primitive, etc.)
if (componentType == String.class) {
return value;
@@ -163,8 +179,36 @@
Object obj = method.invoke(null, new Object[] {value} );
return obj;
}
+
+ if(componentType == byte.class){
+ componentType = Byte.class;
+ }
+ if(componentType == short.class){
+ componentType = Short.class;
+ }
+ if(componentType == int.class){
+ componentType = Integer.class;
+ }
+ if(componentType == float.class){
+ componentType = Float.class;
+ }
+ if(componentType == double.class){
+ componentType = Double.class;
+ }
+ if(componentType == char.class){
+ Character ch = null;
+ if(value!=null && value.length()>0){
+ ch = new Character(value.charAt(0));
+ }
+ return ch;
+ }
+ if(componentType == boolean.class){
+ componentType = Boolean.class;
+ }
+
if (componentType.equals(QName.class)) {
// TODO Missing Support
+
throw new IllegalArgumentException(Messages.getMessage("XSDListNotSupported", componentType.getName()));
} else if (componentType.equals(XMLGregorianCalendar.class)) {
// TODO Missing Support
@@ -178,4 +222,37 @@
return obj;
}
+ private static Class getBoxedType(Class primitiveType){
+ if(primitiveType == byte.class){
+ return Byte.class;
+ }
+ if(primitiveType == short.class){
+ return Short.class;
+ }
+ if(primitiveType == int.class){
+ return Integer.class;
+ }
+ if(primitiveType == long.class){
+ return Long.class;
+ }
+ if(primitiveType == float.class){
+ return Float.class;
+ }
+ if(primitiveType == double.class){
+ return Double.class;
+ }
+ if(primitiveType == char.class){
+ return Character.class;
+ }
+ if(primitiveType == boolean.class){
+ return Boolean.class;
+ }
+ return null;
+ }
+ private static GregorianCalendar toGregorianCalendar(String value) throws ParseException{
+ Date d = new SimpleDateFormat().parse(value);
+ GregorianCalendar gc = new GregorianCalendar();
+ gc.setTime(d);
+ return gc;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org