Author: jason.greene(a)jboss.com
Date: 2006-10-18 14:25:05 -0400 (Wed, 18 Oct 2006)
New Revision: 1255
Modified:
trunk/src/main/java/org/jboss/ws/binding/EndpointInvocation.java
trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java
trunk/src/main/java/org/jboss/ws/jaxrpc/CallProxy.java
trunk/src/main/java/org/jboss/ws/jaxrpc/ParameterWrapping.java
trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Serializer.java
trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/HexSerializer.java
trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArrayDeserializer.java
trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java
trunk/src/main/java/org/jboss/ws/jaxws/client/ClientProxy.java
trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java
trunk/src/main/java/org/jboss/ws/metadata/ParameterMetaData.java
trunk/src/main/java/org/jboss/ws/utils/HolderUtils.java
trunk/src/main/java/org/jboss/ws/utils/JavaUtils.java
trunk/src/test/java/org/jboss/test/ws/common/utils/JavaUtilsTestCase.java
trunk/src/test/java/org/jboss/test/ws/jaxrpc/encoded/marshalltest/JavaBean.java
trunk/src/test/java/org/jboss/test/ws/jaxrpc/encoded/marshalltest/ValueType.java
trunk/src/test/java/org/jboss/test/ws/jaxrpc/marshall/MarshallTest.java
trunk/src/test/resources/jaxrpc/encoded/marshalltest/WEB-INF/wsdl/MarshallTestService.wsdl
Log:
Remove dead primitive conversion code in JavaUtils
Fix soap encoding tests
Improved JAX-WS / JAX-RPC holder integration
Modified: trunk/src/main/java/org/jboss/ws/binding/EndpointInvocation.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/binding/EndpointInvocation.java 2006-10-18 15:39:22
UTC (rev 1254)
+++ trunk/src/main/java/org/jboss/ws/binding/EndpointInvocation.java 2006-10-18 18:25:05
UTC (rev 1255)
@@ -156,7 +156,6 @@
Class valueType = paramValue.getClass();
if (HolderUtils.isHolderType(valueType))
{
- valueType = HolderUtils.getValueType(valueType);
paramValue = HolderUtils.getHolderValue(paramValue);
}
}
@@ -263,8 +262,10 @@
if (HolderUtils.isHolderType(inputType))
{
- inputType = HolderUtils.getValueType(inputType);
+ // At runtime we lose the generic info for JAX-WS types,
+ // So we use the actual instance type if possible
value = HolderUtils.getHolderValue(value);
+ inputType = (value == null) ? HolderUtils.getValueType(inputType) :
value.getClass();
}
// Verify that the java type matches a registered xmlType
@@ -303,7 +304,7 @@
if (paramMetaData.getMode() == ParameterMode.INOUT || paramMetaData.getMode() ==
ParameterMode.OUT)
{
- retValue = HolderUtils.getHolderInstance(paramValue, targetParameterType);
+ retValue = HolderUtils.createHolderInstance(paramValue,
targetParameterType);
QName xmlName = paramMetaData.getXmlName();
setResponseParamValue(xmlName, retValue);
@@ -314,6 +315,9 @@
Class valueType = retValue.getClass();
if (JavaUtils.isAssignableFrom(targetParameterType, valueType) == false)
throw new WSException("Parameter " +
targetParameterType.getName() + " is not assignable from: " +
getTypeName(retValue));
+
+ if (valueType.isArray())
+ retValue = JavaUtils.syncArray(retValue, targetParameterType);
}
log.debug("syncEndpointInputParam: " + getTypeName(paramValue) +
" -> " + getTypeName(retValue) + "(" + index + ")");
Modified: trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java 2006-10-18
15:39:22 UTC (rev 1254)
+++ trunk/src/main/java/org/jboss/ws/deployment/JSR181MetaDataBuilder.java 2006-10-18
18:25:05 UTC (rev 1255)
@@ -425,7 +425,6 @@
throw new IllegalArgumentException("A one-way operation can not have
output parameters [" + "method = "
+ method.getName() + ", parameter = " + i + "]");
- // FIXME - Improve JAX-RPC and JAX-WS Holder unification
if (HolderUtils.isHolderType(javaType))
{
genericType = HolderUtils.getGenericValueType(genericType);
@@ -444,7 +443,10 @@
if (mode != ParameterMode.OUT)
wrappedParameters.add(wrappedParameter);
if (mode != ParameterMode.IN)
+ {
wrappedOutputParameters.add(wrappedParameter);
+ wrappedParameter.holder = true;
+ }
}
else
{
Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/CallProxy.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/CallProxy.java 2006-10-18 15:39:22 UTC (rev
1254)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/CallProxy.java 2006-10-18 18:25:05 UTC (rev
1255)
@@ -154,7 +154,7 @@
throw new WSException("Return value not supported by: " +
opMetaData);
if (JavaUtils.isPrimitive(retType))
- retObj = JavaUtils.getPrimitiveValue(retObj);
+ retObj = JavaUtils.getPrimitiveValueArray(retObj);
}
return retObj;
}
Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/ParameterWrapping.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/ParameterWrapping.java 2006-10-18 15:39:22 UTC
(rev 1254)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/ParameterWrapping.java 2006-10-18 18:25:05 UTC
(rev 1255)
@@ -157,7 +157,7 @@
// INOUT Parameter
if (HolderUtils.isHolderType(targetType))
{
- value = HolderUtils.getHolderInstance(value, targetType);
+ value = HolderUtils.createHolderInstance(value, targetType);
outParameters.put(param.index, value);
}
@@ -236,9 +236,16 @@
Object value = method.invoke(resStruct, new Object[] {});
log.debug(" " + method.getName() + ": " + (value !=
null ? value.getClass().getName() : null));
if (param.index < 0)
+ {
retValue = value;
+ }
else
- methodParams[param.index] = HolderUtils.getHolderInstance(value,
targetTypes[param.index]);
+ {
+ Class targetType = targetTypes[param.index];
+ if (HolderUtils.isHolderType(targetType))
+ value = HolderUtils.createHolderInstance(value, targetType);
+ methodParams[param.index] = value;
+ }
}
}
catch (RuntimeException rte)
Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Serializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Serializer.java 2006-10-18
15:39:22 UTC (rev 1254)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/Base64Serializer.java 2006-10-18
18:25:05 UTC (rev 1255)
@@ -67,7 +67,7 @@
}
else
{
- value = JavaUtils.getPrimitiveValue(value);
+ value = JavaUtils.getPrimitiveValueArray(value);
String valueStr = SimpleTypeBindings.marshalBase64((byte[])value);
xmlFragment = wrapValueStr(xmlName, valueStr, nsRegistry, attributes, true);
}
Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/HexSerializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/HexSerializer.java 2006-10-18
15:39:22 UTC (rev 1254)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/HexSerializer.java 2006-10-18
18:25:05 UTC (rev 1255)
@@ -50,7 +50,7 @@
{
log.debug("serialize: [xmlName=" + xmlName + ",xmlType=" +
xmlType + "]");
- value = JavaUtils.getPrimitiveValue(value);
+ value = JavaUtils.getPrimitiveValueArray(value);
String valueStr = SimpleTypeBindings.marshalHexBinary((byte[])value);
NamespaceRegistry nsRegistry = serContext.getNamespaceRegistry();
Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArrayDeserializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArrayDeserializer.java 2006-10-18
15:39:22 UTC (rev 1254)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArrayDeserializer.java 2006-10-18
18:25:05 UTC (rev 1255)
@@ -142,7 +142,7 @@
Element childElement = (Element)it.next();
String compXMLFragment = DOMWriter.printNode(childElement, false);
compValue = compDeserializer.deserialize(compXmlName, compXmlType,
compXMLFragment, serContext);
- compValue = JavaUtils.getWrapperValue(compValue);
+ compValue = JavaUtils.getWrapperValueArray(compValue);
}
subArr[i] = compValue;
}
Modified: trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java 2006-10-18
15:39:22 UTC (rev 1254)
+++ trunk/src/main/java/org/jboss/ws/jaxrpc/encoding/SOAPArraySerializer.java 2006-10-18
18:25:05 UTC (rev 1255)
@@ -104,7 +104,7 @@
// Get the corresponding wrapper type
if (JavaUtils.isPrimitive(value.getClass()))
- value = JavaUtils.getWrapperValue(value);
+ value = JavaUtils.getWrapperValueArray(value);
xmlFragment = new StringBuilder("<" + Constants.PREFIX_SOAP11_ENC +
":Array ");
if (value instanceof Object[])
Modified: trunk/src/main/java/org/jboss/ws/jaxws/client/ClientProxy.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/jaxws/client/ClientProxy.java 2006-10-18 15:39:22 UTC
(rev 1254)
+++ trunk/src/main/java/org/jboss/ws/jaxws/client/ClientProxy.java 2006-10-18 18:25:05 UTC
(rev 1255)
@@ -160,7 +160,7 @@
throw new WSException("Return value not supported by: " + opName);
if (JavaUtils.isPrimitive(retType))
- retObj = JavaUtils.getPrimitiveValue(retObj);
+ retObj = JavaUtils.getPrimitiveValueArray(retObj);
}
return retObj;
}
Modified: trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java 2006-10-18 15:39:22
UTC (rev 1254)
+++ trunk/src/main/java/org/jboss/ws/metadata/OperationMetaData.java 2006-10-18 18:25:05
UTC (rev 1255)
@@ -196,7 +196,7 @@
{
log.debug("Found possible matching java method: " +
method);
javaMethod = method;
- break;
+ // continue on, in case there is a better matching method
}
}
}
@@ -233,81 +233,6 @@
return isMessageEndpoint;
}
- private boolean compareMethodParams(Class[] methodParams, boolean matchByTypeName)
- {
- log.trace("Compare method params by type name: " + matchByTypeName);
-
- boolean pass = (parameters.size() == methodParams.length);
- if (pass == false)
- log.trace("Unmatched parameter count: " + parameters.size() +
"!=" + methodParams.length);
-
- for (int i = 0; pass && i < methodParams.length; i++)
- {
- ParameterMetaData paramMetaData = parameters.get(i);
- pass = matchParameter(paramMetaData, methodParams[i], matchByTypeName);
- }
- return pass;
- }
-
- private boolean matchParameter(ParameterMetaData paramMetaData, Class methodParam,
boolean matchByTypeName)
- {
- QName xmlType = paramMetaData.getXmlType();
- String javaType = paramMetaData.getJavaTypeName();
-
- boolean pass = true;
- if (paramMetaData != returnParam && paramMetaData.getMode() !=
ParameterMode.IN)
- {
- if (HolderUtils.isHolderType(methodParam))
- {
- methodParam = HolderUtils.getValueType(methodParam);
- }
- else
- {
- pass = false;
- }
- }
-
- if (pass == true)
- {
- // In case the parameter java type has not been initialized
- // This happens when the UMDM is build from WSDL only (i.e. JAXWS Service)
- TypeMappingImpl typeMapping = epMetaData.getServiceMetaData().getTypeMapping();
- if (javaType == null)
- {
- javaType = methodParam.getName();
- paramMetaData.setJavaTypeName(javaType);
- log.debug("Set parameter java type from method param: " +
javaType);
-
- if (epMetaData.getType() == Type.JAXWS)
- {
- typeMapping.register(methodParam, xmlType, new JAXBSerializerFactory(),
new JAXBDeserializerFactory());
- }
- }
-
- if (matchByTypeName)
- {
- pass = methodParam.getName().equals(javaType);
- }
- else
- {
- String paramTypeName = methodParam.getName();
- Class paramType = paramMetaData.getJavaType();
- pass = JavaUtils.isAssignableFrom(methodParam, paramType);
-
- if (typeMapping.isRegistered(methodParam, xmlType))
- {
- log.debug("Adjust parameter type from " + paramType.getName() +
" to " + paramTypeName);
- paramMetaData.setJavaTypeName(paramTypeName);
- pass = true;
- }
- }
- }
-
- String name = (matchByTypeName) ? paramMetaData.getJavaTypeName() :
paramMetaData.getJavaType().getName();
- log.trace((pass ? "Matched" : "Unmatched") + " parameter:
" + name + " == " + methodParam.getName());
- return pass;
- }
-
public boolean isOneWay()
{
return oneWay;
Modified: trunk/src/main/java/org/jboss/ws/metadata/ParameterMetaData.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/metadata/ParameterMetaData.java 2006-10-18 15:39:22
UTC (rev 1254)
+++ trunk/src/main/java/org/jboss/ws/metadata/ParameterMetaData.java 2006-10-18 18:25:05
UTC (rev 1255)
@@ -24,6 +24,7 @@
// $Id$
import java.lang.reflect.Method;
+import java.lang.reflect.Type;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -101,6 +102,7 @@
public String type;
public String[] typeArguments;
public String variable;
+ public boolean holder = false;
public int index = -2;
public WrappedParameter()
@@ -121,15 +123,15 @@
}
}
- private static boolean matchParameter(Method method, int index, Class expectedType,
Set<Integer> matches, boolean exact)
+ private static boolean matchParameter(Method method, int index, Class expectedType,
Set<Integer> matches, boolean exact, boolean holder)
{
Class returnType = method.getReturnType();
- Class[] parameters = method.getParameterTypes();
+ Type[] parameters = method.getGenericParameterTypes();
- if (index == -1 && matchTypes(returnType, expectedType, exact))
+ if (index == -1 && matchTypes(returnType, expectedType, exact, false))
return true;
- if (index < parameters.length && matchTypes(parameters[index],
expectedType, exact))
+ if (index < parameters.length && matchTypes(parameters[index],
expectedType, exact, holder))
{
matches.add(index);
return true;
@@ -138,17 +140,17 @@
return false;
}
- private static boolean matchTypes(Class actualType, Class expectedType, boolean
exact)
+ private static boolean matchTypes(Type actualType, Class expectedType, boolean exact,
boolean holder)
{
- Class valueType = holderValueClass(actualType);
+ Type valueType = (holder) ? holderValueType(actualType) : actualType;
+ Class valueClass = JavaUtils.erasure(valueType);
+ boolean matched = (exact) ? valueClass.getName().equals(expectedType.getName())
+ : JavaUtils.isAssignableFrom(valueClass, expectedType);
- boolean matched = (exact) ? valueType.getName().equals(expectedType.getName())
- : JavaUtils.isAssignableFrom(valueType, expectedType);
-
return matched;
}
- private static Class holderValueClass(Class holder)
+ private static Type holderValueType(Type holder)
{
if (! HolderUtils.isHolderType(holder))
return holder;
@@ -382,7 +384,7 @@
// Standard type
if (wrappedParameters == null)
- return matchParameter(method, getIndex(), getJavaType(), matches, exact);
+ return matchParameter(method, getIndex(), getJavaType(), matches, exact, mode !=
ParameterMode.IN);
// Wrapped type
for (WrappedParameter wrapped : wrappedParameters)
@@ -395,7 +397,7 @@
: ParameterWrapping.getWrappedType(wrapped.variable, wrapperType);
if (type == null)
return false;
- if (! matchParameter(method, wrapped.index, type, matches, exact))
+ if (! matchParameter(method, wrapped.index, type, matches, exact,
wrapped.holder))
return false;
}
catch (Exception ex)
Modified: trunk/src/main/java/org/jboss/ws/utils/HolderUtils.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/utils/HolderUtils.java 2006-10-18 15:39:22 UTC (rev
1254)
+++ trunk/src/main/java/org/jboss/ws/utils/HolderUtils.java 2006-10-18 18:25:05 UTC (rev
1255)
@@ -88,32 +88,37 @@
import org.jboss.logging.Logger;
-/** JAXRPC Holder utilities
+/**
+ * HolderUtils provides static utility functions for both JAX-RPC
+ * and JAX-WS holders.
*
* @author Thomas.Diesler(a)jboss.org
+ * @author <a href="jason.greene(a)jboss.com">Jason T. Greene</a>
* @since 22-Dec-2004
*/
public class HolderUtils
{
- /*
- * FIXME Need to have smoother holder unifaction between JAX-RPC and JAX-WS
- */
-
- // provide logging
private static final Logger log = Logger.getLogger(HolderUtils.class);
/** True if the given type is a holder. */
public static boolean isHolderType(Class javaType)
{
- if (javaType == null)
- throw new IllegalArgumentException("Illegal null parameter");
-
return Holder.class.isAssignableFrom(javaType) ||
javax.xml.ws.Holder.class.isAssignableFrom(javaType);
}
- /** Get the Holder for a given valueType.
+ /** True if the given type is a holder. */
+ public static boolean isHolderType(Type javaType)
+ {
+ return isHolderType(JavaUtils.erasure(javaType));
+ }
+
+ /**
+ * Gets the JAX-RPC holder for a specific value type.
+ *
+ * @param valueType the value
+ * @return the holder, or null if there is no match
*/
- public static Class getHolderType(Class valueType)
+ public static Class getJAXRPCHolderType(Class valueType)
{
if (valueType == null)
throw new IllegalArgumentException("Illegal null parameter");
@@ -169,31 +174,42 @@
return null;
}
- /** Get the value type for a given holder.
+ /**
+ * Gets the value type of a JAX-WS or JAX-RPC holder.
+ *
+ * @param holderType the generic type for JAX-WS, a standard class for JAX-RPC
+ * @return the value type
*/
- public static Class getValueType(Class holderType)
+ public static Class getValueType(Type holderType)
{
- if (holderType == null)
- throw new IllegalArgumentException("Illegal null parameter");
+ Class holderClass = JavaUtils.erasure(holderType);
- if (!Holder.class.isAssignableFrom(holderType) &&
!javax.xml.ws.Holder.class.isAssignableFrom(holderType))
- throw new IllegalArgumentException("Is not a holder: " +
holderType.getName());
+ boolean jaxwsHolder = javax.xml.ws.Holder.class.isAssignableFrom(holderClass);
+ if (!Holder.class.isAssignableFrom(holderClass) && !jaxwsHolder)
+ throw new IllegalArgumentException("Is not a holder: " +
holderClass.getName());
+ if (jaxwsHolder)
+ return JavaUtils.erasure(getGenericValueType(holderType));
+
// Holder is supposed to have a public value field.
Field field;
try
{
- field = holderType.getField("value");
+ field = holderClass.getField("value");
}
catch (NoSuchFieldException e)
{
- throw new IllegalArgumentException("Cannot find public value field: "
+ holderType);
+ throw new IllegalArgumentException("Cannot find public value field: "
+ holderClass);
}
return field.getType();
}
- /** Gets the Holder value.
+ /**
+ * Gets the value object of a JAX-WS or JAX-RPC holder instance.
+ *
+ * @param holder the holder object instance
+ * @return the value object instance
*/
public static Object getHolderValue(Object holder)
{
@@ -219,12 +235,18 @@
}
}
- /** Gets the Holder value.
+ /**
+ * Sets the value object of a JAX-WS or JAX-RPC holder instance. This method
+ * will also dynamically convert primitive and wrapper arrays to match the
+ * target array type.
+ *
+ * @param holder the holder instance
+ * @param value the value, can be null
*/
public static void setHolderValue(Object holder, Object value)
{
if (holder == null)
- throw new IllegalArgumentException("Illegal null parameter");
+ throw new IllegalArgumentException("Holder instance was null");
if (!Holder.class.isInstance(holder) &&
!javax.xml.ws.Holder.class.isInstance(holder))
throw new IllegalArgumentException("Is not a holder: " + holder);
@@ -234,6 +256,9 @@
if (value != null && JavaUtils.isAssignableFrom(valueType,
value.getClass()) == false)
throw new IllegalArgumentException("Holder [" +
holder.getClass().getName() + "] value not assignable: " + value);
+ if (valueType.isArray())
+ value = JavaUtils.syncArray(value, valueType);
+
try
{
Field valueField = holder.getClass().getField("value");
@@ -250,21 +275,36 @@
}
}
+ /**
+ * Gets the generic value type of a JAX-WS Holder.
+ * If there is no generic information, Object.class will be returned
+ *
+ * @param holder JAX-WS holder type
+ * @return generic value type
+ */
public static Type getGenericValueType(Type holder)
{
- return (holder instanceof ParameterizedType) ?
((ParameterizedType)holder).getActualTypeArguments()[0] : holder;
+ return (holder instanceof ParameterizedType) ?
((ParameterizedType)holder).getActualTypeArguments()[0] : Object.class;
}
- public static Object getHolderInstance(Object value, Class<?> target)
+
+ /**
+ * Creates a JAX-WS or JAX-RPC holder instance.
+ *
+ * @param value the value instance
+ * @param holderType the holder type
+ * @return a new holder
+ */
+ public static Object createHolderInstance(Object value, Class<?> holderType)
{
- if (! isHolderType(target))
- return value;
+ if (! isHolderType(holderType))
+ throw new IllegalArgumentException("Not a holder type:" +
holderType.getName());
Object holder;
try
{
- holder = target.newInstance();
+ holder = holderType.newInstance();
}
catch (RuntimeException rte)
{
@@ -272,11 +312,11 @@
}
catch (Exception e)
{
- throw new IllegalArgumentException("Cannot instanciate holder: " +
target);
+ throw new IllegalArgumentException("Cannot instanciate holder: " +
holderType);
}
setHolderValue(holder, value);
return holder;
}
-}
+}
\ No newline at end of file
Modified: trunk/src/main/java/org/jboss/ws/utils/JavaUtils.java
===================================================================
--- trunk/src/main/java/org/jboss/ws/utils/JavaUtils.java 2006-10-18 15:39:22 UTC (rev
1254)
+++ trunk/src/main/java/org/jboss/ws/utils/JavaUtils.java 2006-10-18 18:25:05 UTC (rev
1255)
@@ -294,30 +294,14 @@
}
/**
- * Get the corresponding primitive value for a give wrapper value.
- * Also handles arrays of which.
+ * Converts an n-dimensional array of wrapper types to primitive types
*/
- public static Object getPrimitiveValue(Object value)
+ public static Object getPrimitiveValueArray(Object value)
{
if (value == null)
return null;
Class javaType = value.getClass();
- if (javaType == Integer.class)
- return ((Integer)value).intValue();
- if (javaType == Short.class)
- return ((Short)value).shortValue();
- if (javaType == Boolean.class)
- return ((Boolean)value).booleanValue();
- if (javaType == Byte.class)
- return ((Byte)value).byteValue();
- if (javaType == Long.class)
- return ((Long)value).longValue();
- if (javaType == Double.class)
- return ((Double)value).doubleValue();
- if (javaType == Float.class)
- return ((Float)value).floatValue();
-
if (javaType.isArray())
{
int length = Array.getLength(value);
@@ -325,8 +309,7 @@
for (int i = 0; i < length; i++)
{
Object srcObj = Array.get(value, i);
- Object destObj = getPrimitiveValue(srcObj);
- Array.set(destArr, i, destObj);
+ Array.set(destArr, i, getPrimitiveValueArray(srcObj));
}
return destArr;
}
@@ -384,30 +367,14 @@
}
/**
- * Get the corresponding wrapper value for a give primitive value.
- * Also handles arrays of which.
+ * Converts an n-dimensional array of primitive types to wrapper types
*/
- public static Object getWrapperValue(Object value)
+ public static Object getWrapperValueArray(Object value)
{
if (value == null)
return null;
Class javaType = value.getClass();
- if (javaType == int.class)
- return Integer.valueOf("" + value);
- if (javaType == short.class)
- return Short.valueOf("" + value);
- if (javaType == boolean.class)
- return Boolean.valueOf("" + value);
- if (javaType == byte.class)
- return Byte.valueOf("" + value);
- if (javaType == long.class)
- return Long.valueOf("" + value);
- if (javaType == double.class)
- return Double.valueOf("" + value);
- if (javaType == float.class)
- return Float.valueOf("" + value);
-
if (javaType.isArray())
{
int length = Array.getLength(value);
@@ -415,8 +382,7 @@
for (int i = 0; i < length; i++)
{
Object srcObj = Array.get(value, i);
- Object destObj = getWrapperValue(srcObj);
- Array.set(destArr, i, destObj);
+ Array.set(destArr, i, getWrapperValueArray(srcObj));
}
return destArr;
}
@@ -424,6 +390,11 @@
return value;
}
+ public static Object syncArray(Object array, Class target)
+ {
+ return (JavaUtils.isPrimitive(target)) ? JavaUtils.getPrimitiveValueArray(array) :
JavaUtils.getWrapperValueArray(array);
+ }
+
/**
* Return true if the dest class is assignable from the src.
* Also handles arrays and primitives.
Modified: trunk/src/test/java/org/jboss/test/ws/common/utils/JavaUtilsTestCase.java
===================================================================
--- trunk/src/test/java/org/jboss/test/ws/common/utils/JavaUtilsTestCase.java 2006-10-18
15:39:22 UTC (rev 1254)
+++ trunk/src/test/java/org/jboss/test/ws/common/utils/JavaUtilsTestCase.java 2006-10-18
18:25:05 UTC (rev 1255)
@@ -44,22 +44,22 @@
public void testGetMultipleArrayWrapperValue() throws Exception
{
int[][] primParams = new int[][] { { 0, 1, 2 }, { 1, 2, 3 }, { 2, 3, 4 } };
- Integer[][] params = (Integer[][])JavaUtils.getWrapperValue(primParams);
+ Integer[][] params = (Integer[][])JavaUtils.getWrapperValueArray(primParams);
assertNotNull("Unexpected null", params);
- assertEquals(primParams[0], (int[])JavaUtils.getPrimitiveValue(params[0]));
- assertEquals(primParams[1], (int[])JavaUtils.getPrimitiveValue(params[1]));
- assertEquals(primParams[2], (int[])JavaUtils.getPrimitiveValue(params[2]));
+ assertEquals(primParams[0], (int[])JavaUtils.getPrimitiveValueArray(params[0]));
+ assertEquals(primParams[1], (int[])JavaUtils.getPrimitiveValueArray(params[1]));
+ assertEquals(primParams[2], (int[])JavaUtils.getPrimitiveValueArray(params[2]));
}
public void testGetMultipleArrayPrimitiveValue() throws Exception
{
Integer[][] wrapParams = new Integer[][] { { new Integer(0), new Integer(1), new
Integer(2) }, { new Integer(1), new Integer(2), new Integer(3) },
{ new Integer(2), new Integer(3), new Integer(4) } };
- int[][] params = (int[][])JavaUtils.getPrimitiveValue(wrapParams);
+ int[][] params = (int[][])JavaUtils.getPrimitiveValueArray(wrapParams);
assertNotNull("Unexpected null", params);
- assertEquals(wrapParams[0], (Integer[])JavaUtils.getWrapperValue(params[0]));
- assertEquals(wrapParams[1], (Integer[])JavaUtils.getWrapperValue(params[1]));
- assertEquals(wrapParams[2], (Integer[])JavaUtils.getWrapperValue(params[2]));
+ assertEquals(wrapParams[0], (Integer[])JavaUtils.getWrapperValueArray(params[0]));
+ assertEquals(wrapParams[1], (Integer[])JavaUtils.getWrapperValueArray(params[1]));
+ assertEquals(wrapParams[2], (Integer[])JavaUtils.getWrapperValueArray(params[2]));
}
public void testGetPrimitiveType() throws Exception
Modified: trunk/src/test/java/org/jboss/test/ws/jaxrpc/encoded/marshalltest/JavaBean.java
===================================================================
---
trunk/src/test/java/org/jboss/test/ws/jaxrpc/encoded/marshalltest/JavaBean.java 2006-10-18
15:39:22 UTC (rev 1254)
+++
trunk/src/test/java/org/jboss/test/ws/jaxrpc/encoded/marshalltest/JavaBean.java 2006-10-18
18:25:05 UTC (rev 1255)
@@ -462,32 +462,32 @@
buf.append(",myBoolean=" + myBoolean);
buf.append(",myBoolean1=" + myBoolean1);
buf.append(",myBoolean1Array=" + (myBoolean1Array != null ?
Arrays.asList(myBoolean1Array) : null));
- buf.append(",myBooleanArray=" + (myBooleanArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myBooleanArray)) : null));
+ buf.append(",myBooleanArray=" + (myBooleanArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myBooleanArray)) : null));
buf.append(",myByte=" + myByte);
buf.append(",myByte1=" + myByte1);
- buf.append(",myByteArray=" + (myByteArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myByteArray)) : null));
+ buf.append(",myByteArray=" + (myByteArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myByteArray)) : null));
buf.append(",myCalendar=" + myCalendar);
buf.append(",myCalendarArray=" + (myCalendarArray != null ?
Arrays.asList(myCalendarArray) : null));
buf.append(",myDouble=" + myDouble);
buf.append(",myDouble1=" + myDouble1);
buf.append(",myDouble1Array=" + (myDouble1Array != null ?
Arrays.asList(myDouble1Array) : null));
- buf.append(",myDoubleArray=" + (myDoubleArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myDoubleArray)) : null));
+ buf.append(",myDoubleArray=" + (myDoubleArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myDoubleArray)) : null));
buf.append(",myFloat=" + myFloat);
buf.append(",myFloat1=" + myFloat1);
buf.append(",myFloat1Array=" + (myFloat1Array != null ?
Arrays.asList(myFloat1Array) : null));
- buf.append(",myFloatArray=" + (myFloatArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myFloatArray)) : null));
+ buf.append(",myFloatArray=" + (myFloatArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myFloatArray)) : null));
buf.append(",myInt=" + myInt);
buf.append(",myInt1=" + myInt1);
buf.append(",myInt1Array=" + (myInt1Array != null ?
Arrays.asList(myInt1Array) : null));
- buf.append(",myIntArray=" + (myIntArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myIntArray)) : null));
+ buf.append(",myIntArray=" + (myIntArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myIntArray)) : null));
buf.append(",myLong=" + myLong);
buf.append(",myLong1=" + myLong1);
buf.append(",myLong1Array=" + (myLong1Array != null ?
Arrays.asList(myLong1Array) : null));
- buf.append(",myLongArray=" + (myLongArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myLongArray)) : null));
+ buf.append(",myLongArray=" + (myLongArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myLongArray)) : null));
buf.append(",myShort=" + myShort);
buf.append(",myShort1=" + myShort1);
buf.append(",myShort1Array=" + (myShort1Array != null ?
Arrays.asList(myShort1Array) : null));
- buf.append(",myShortArray=" + (myShortArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myShortArray)) : null));
+ buf.append(",myShortArray=" + (myShortArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myShortArray)) : null));
buf.append(",myString=" + myString);
buf.append(",myStringArray=" + (myStringArray != null ?
Arrays.asList(myStringArray) : null));
buf.append("]");
Modified:
trunk/src/test/java/org/jboss/test/ws/jaxrpc/encoded/marshalltest/ValueType.java
===================================================================
---
trunk/src/test/java/org/jboss/test/ws/jaxrpc/encoded/marshalltest/ValueType.java 2006-10-18
15:39:22 UTC (rev 1254)
+++
trunk/src/test/java/org/jboss/test/ws/jaxrpc/encoded/marshalltest/ValueType.java 2006-10-18
18:25:05 UTC (rev 1255)
@@ -463,32 +463,32 @@
buf.append(",myBoolean=" + myBoolean);
buf.append(",myBoolean1=" + myBoolean1);
buf.append(",myBoolean1Array=" + (myBoolean1Array != null ?
Arrays.asList(myBoolean1Array) : null));
- buf.append(",myBooleanArray=" + (myBooleanArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myBooleanArray)) : null));
+ buf.append(",myBooleanArray=" + (myBooleanArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myBooleanArray)) : null));
buf.append(",myByte=" + myByte);
buf.append(",myByte1=" + myByte1);
- buf.append(",myByteArray=" + (myByteArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myByteArray)) : null));
+ buf.append(",myByteArray=" + (myByteArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myByteArray)) : null));
buf.append(",myCalendar=" + myCalendar);
buf.append(",myCalendarArray=" + (myCalendarArray != null ?
Arrays.asList(myCalendarArray) : null));
buf.append(",myDouble=" + myDouble);
buf.append(",myDouble1=" + myDouble1);
buf.append(",myDouble1Array=" + (myDouble1Array != null ?
Arrays.asList(myDouble1Array) : null));
- buf.append(",myDoubleArray=" + (myDoubleArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myDoubleArray)) : null));
+ buf.append(",myDoubleArray=" + (myDoubleArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myDoubleArray)) : null));
buf.append(",myFloat=" + myFloat);
buf.append(",myFloat1=" + myFloat1);
buf.append(",myFloat1Array=" + (myFloat1Array != null ?
Arrays.asList(myFloat1Array) : null));
- buf.append(",myFloatArray=" + (myFloatArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myFloatArray)) : null));
+ buf.append(",myFloatArray=" + (myFloatArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myFloatArray)) : null));
buf.append(",myInt=" + myInt);
buf.append(",myInt1=" + myInt1);
buf.append(",myInt1Array=" + (myInt1Array != null ?
Arrays.asList(myInt1Array) : null));
- buf.append(",myIntArray=" + (myIntArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myIntArray)) : null));
+ buf.append(",myIntArray=" + (myIntArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myIntArray)) : null));
buf.append(",myLong=" + myLong);
buf.append(",myLong1=" + myLong1);
buf.append(",myLong1Array=" + (myLong1Array != null ?
Arrays.asList(myLong1Array) : null));
- buf.append(",myLongArray=" + (myLongArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myLongArray)) : null));
+ buf.append(",myLongArray=" + (myLongArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myLongArray)) : null));
buf.append(",myShort=" + myShort);
buf.append(",myShort1=" + myShort1);
buf.append(",myShort1Array=" + (myShort1Array != null ?
Arrays.asList(myShort1Array) : null));
- buf.append(",myShortArray=" + (myShortArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValue(myShortArray)) : null));
+ buf.append(",myShortArray=" + (myShortArray != null ?
Arrays.asList((Object[])JavaUtils.getWrapperValueArray(myShortArray)) : null));
buf.append(",myString=" + myString);
buf.append(",myStringArray=" + (myStringArray != null ?
Arrays.asList(myStringArray) : null));
buf.append("]");
Modified: trunk/src/test/java/org/jboss/test/ws/jaxrpc/marshall/MarshallTest.java
===================================================================
--- trunk/src/test/java/org/jboss/test/ws/jaxrpc/marshall/MarshallTest.java 2006-10-18
15:39:22 UTC (rev 1254)
+++ trunk/src/test/java/org/jboss/test/ws/jaxrpc/marshall/MarshallTest.java 2006-10-18
18:25:05 UTC (rev 1255)
@@ -166,15 +166,15 @@
public void testByteWrapperArray() throws Exception
{
- Byte[] in = (Byte[])JavaUtils.getWrapperValue("ByteArray".getBytes());
+ Byte[] in =
(Byte[])JavaUtils.getWrapperValueArray("ByteArray".getBytes());
Byte[] out = byteWrapperArrayTest(in);
assertEquals(in, out);
}
public void testByteWrapperMultiArray() throws Exception
{
- Byte[] ar1 = (Byte[])JavaUtils.getWrapperValue("ByteArray".getBytes());
- Byte[] ar2 = (Byte[])JavaUtils.getWrapperValue("ArrayByte".getBytes());
+ Byte[] ar1 =
(Byte[])JavaUtils.getWrapperValueArray("ByteArray".getBytes());
+ Byte[] ar2 =
(Byte[])JavaUtils.getWrapperValueArray("ArrayByte".getBytes());
Byte[][] in = new Byte[][] { ar1, ar2 };
Byte[][] out = byteWrapperMultiArrayTest(in);
assertEquals(in, out);
Modified:
trunk/src/test/resources/jaxrpc/encoded/marshalltest/WEB-INF/wsdl/MarshallTestService.wsdl
===================================================================
---
trunk/src/test/resources/jaxrpc/encoded/marshalltest/WEB-INF/wsdl/MarshallTestService.wsdl 2006-10-18
15:39:22 UTC (rev 1254)
+++
trunk/src/test/resources/jaxrpc/encoded/marshalltest/WEB-INF/wsdl/MarshallTestService.wsdl 2006-10-18
18:25:05 UTC (rev 1255)
@@ -307,6 +307,7 @@
</restriction>
</complexContent>
</complexType>
+ <element name="MyServiceException"
type="tns:MyServiceException"/>
</schema>
</types>
<message name="MarshallTest_bigDecimalArrayTest">
@@ -492,7 +493,7 @@
<message name="MarshallTest_myServiceExceptionTest"/>
<message name="MarshallTest_myServiceExceptionTestResponse"/>
<message name="MyServiceException">
- <part name="MyServiceException"
type="ns3:MyServiceException"/>
+ <part name="MyServiceException"
element="ns3:MyServiceException"/>
</message>
<message name="MarshallTest_shortArrayTest">
<part name="arrayOfshort_1" type="ns3:ArrayOfshort"/>
@@ -1230,4 +1231,4 @@
<soap:address
location="http://@jbosstest.host.name@:8080/J2WMT/jaxrpc/MarshallTest"/>
</port>
</service>
-</definitions>
\ No newline at end of file
+</definitions>