From b45ddbd9b965d35bca5c6974c7ab2cceda794fb2 Mon Sep 17 00:00:00 2001 From: nash Date: Fri, 3 Dec 2010 17:07:02 +0000 Subject: TUSCANY-3298: Enable JAXB wrappers for WSDL generation git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1041912 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/databinding/sdo/SDODataBinding.java | 30 +++++++++++++++++++--- .../tuscany/sca/databinding/sdo/SDOTypeHelper.java | 8 +++--- 2 files changed, 31 insertions(+), 7 deletions(-) (limited to 'sca-java-1.x/trunk/modules/databinding-sdo') diff --git a/sca-java-1.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java b/sca-java-1.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java index 39e9ffc161..8e00a20c5f 100644 --- a/sca-java-1.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java +++ b/sca-java-1.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java @@ -19,8 +19,10 @@ package org.apache.tuscany.sca.databinding.sdo; +import java.lang.reflect.ParameterizedType; import java.security.AccessController; import java.security.PrivilegedAction; +import java.util.Collection; import javax.xml.namespace.QName; @@ -60,7 +62,7 @@ public class SDODataBinding extends BaseDataBinding { @Override public boolean introspect(DataType dataType, final Operation operation) { - final Class javaType = dataType.getPhysical(); + Class javaType = dataType.getPhysical(); // Allow privileged access to read system properties. Requires PropertyPermission // java.specification.version read in security policy. final HelperContext context = AccessController.doPrivileged(new PrivilegedAction() { @@ -72,11 +74,33 @@ public class SDODataBinding extends BaseDataBinding { final Type type = context.getTypeHelper().getType(javaType); if (type == null) { // FIXME: Need a better to test dynamic SDO + // TUSCANY-3298: get underlying element type for collections + boolean isMany = false; + if (Collection.class.isAssignableFrom(javaType)) { + java.lang.reflect.Type genericType = dataType.getGenericType(); + if (genericType instanceof ParameterizedType) { + java.lang.reflect.Type actualType = ((ParameterizedType)genericType).getActualTypeArguments()[0]; + if (actualType instanceof Class) { + javaType = (Class)actualType; + isMany = true; + } + } + } if (DataObject.class.isAssignableFrom(javaType)) { // Dynamic SDO dataType.setDataBinding(getName()); - if (dataType.getLogical() == null) { - dataType.setLogical(XMLType.UNKNOWN); + // TUSCANY-3298: use XMLType many value to indicate a collection + Object logical = dataType.getLogical(); + if (logical == null) { + if (!isMany) { + dataType.setLogical(XMLType.UNKNOWN); + } else { + XMLType xmlType = new XMLType(null, null); + xmlType.setMany(true); + dataType.setLogical(xmlType); + } + } else if (logical instanceof XMLType && isMany) { + ((XMLType)logical).setMany(true); } return true; } diff --git a/sca-java-1.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java b/sca-java-1.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java index e3ec6dc6b7..6f5443fe0c 100644 --- a/sca-java-1.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java +++ b/sca-java-1.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java @@ -70,16 +70,16 @@ public class SDOTypeHelper implements XMLTypeHelper { QName xmlType = JavaXMLMapper.getXMLType(javaType); if (xmlType != null) { return new TypeInfo(xmlType, true, null); - } else if (javaType == commonj.sdo.DataObject.class) { - return new TypeInfo(SimpleTypeMapperImpl.XSD_ANYTYPE, true, null); } else { // introspect(javaType, xsdTypesMap, typesMap); if (logical instanceof XMLType) { xmlType = ((XMLType)logical).getTypeName(); } if (xmlType == null) { - xmlType = - new QName(JavaXMLMapper.getNamespace(javaType), Introspector.decapitalize(javaType.getSimpleName())); + // TUSCANY-3298: dynamic SDO or collection of dynamic SDO + return new TypeInfo(SimpleTypeMapperImpl.XSD_ANYTYPE, true, null); + //xmlType = + // new QName(JavaXMLMapper.getNamespace(javaType), Introspector.decapitalize(javaType.getSimpleName())); } return new TypeInfo(xmlType, false, null); } -- cgit v1.2.3