Author: sagara Date: Fri Sep 23 07:37:31 2011 New Revision: 1174567 URL: http://svn.apache.org/viewvc?rev=1174567&view=rev Log: Fixed AXIS2-5151. Supported to use Date objects with xs:type attributes in Object Arrays , Object Collections and Object Maps.
Modified: axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java Modified: axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java?rev=1174567&r1=1174566&r2=1174567&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java (original) +++ axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java Fri Sep 23 07:37:31 2011 @@ -31,6 +31,7 @@ import org.apache.axis2.description.Axis import org.w3c.dom.Document; import javax.activation.DataHandler; +import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.namespace.QName; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -234,7 +235,7 @@ public class SimpleTypeMapper { return false; } String objClassName = obj.getClass().getName(); - return obj instanceof Calendar || obj instanceof Date || isSimpleType(objClassName); + return obj instanceof Calendar || obj instanceof Date || obj instanceof XMLGregorianCalendar || isSimpleType(objClassName); } public static boolean isSimpleType(Class obj) { Modified: axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java?rev=1174567&r1=1174566&r2=1174567&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java (original) +++ axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java Fri Sep 23 07:37:31 2011 @@ -66,7 +66,6 @@ import org.apache.axis2.databinding.type import org.apache.axis2.databinding.utils.reader.ADBXMLStreamReaderImpl; import org.apache.axis2.deployment.util.BeanExcludeInfo; import org.apache.axis2.description.AxisService; -import org.apache.axis2.description.java2wsdl.Java2WSDLConstants; import org.apache.axis2.description.java2wsdl.TypeTable; import org.apache.axis2.engine.ObjectSupplier; import org.apache.axis2.util.Loader; @@ -1311,10 +1310,6 @@ public class BeanUtil { element.declareNamespace(xsdNS); QName xsdType = typeTable.getSchemaTypeName(resObject.getClass() .getName()); - if (xsdType == null && resObject instanceof XMLGregorianCalendar) { - xsdType = new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "date", - "xs"); - } String attrValue = xsdType.getPrefix() + ":" + xsdType.getLocalPart(); element.addAttribute(Constants.XSI_TYPE_ATTRIBUTE, attrValue, xsiNS); } @@ -1731,10 +1726,6 @@ public class BeanUtil { if (SimpleTypeMapper.isSimpleType(value)) { omValue.addChild(fac.createOMText(SimpleTypeMapper .getStringValue(value))); - } else if (value instanceof XMLGregorianCalendar) { - omValue.addChild(fac - .createOMText(((XMLGregorianCalendar) value) - .toXMLFormat())); } else { QName name; if(elementFormDefault) { Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java?rev=1174567&r1=1174566&r2=1174567&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java (original) +++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java Fri Sep 23 07:37:31 2011 @@ -160,6 +160,8 @@ public class TypeTable { //byteArrat simpleTypetoxsd.put("base64Binary", new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "base64Binary", "xs")); + simpleTypetoxsd.put(XMLGregorianCalendar.class.getName(), + new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "date", "xs")); } private static void populateJavaTypeMap(){ @@ -311,11 +313,45 @@ public class TypeTable { */ public QName getSchemaTypeName(String name) { QName qName = getSimpleSchemaTypeName(name); + if (qName == null) { + qName = getSchemaTypeNameByClass(name); + } if( qName == null){ qName = getComplexSchemaType(name); } return qName; } + + /** + * Gets the schema type name by class name. Sometimes it's required perform class + * name mapping to find correct Schema type. + * + * @param name + * the name + * @return the schema type name by class + */ + private QName getSchemaTypeNameByClass(String name) { + Object dataClass; + try { + dataClass = Class.forName(name).newInstance(); + /* + * XMLGregorianCalendar can be found as following classes. + * 1.)com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl + * 2.)org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl + */ + if (dataClass instanceof XMLGregorianCalendar) { + return (QName) simpleTypetoxsd.get(XMLGregorianCalendar.class + .getName()); + } + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return null; + } }