You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by sa...@apache.org on 2011/09/23 09:37:32 UTC

svn commit: r1174567 - in /axis/axis2/java/core/trunk/modules: adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java adb/src/org/apache/axis2/databinding/utils/BeanUtil.java kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java

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;
+    }
 }