Author: sagara
Date: Thu Sep 29 11:19:01 2011
New Revision: 1177265

URL: http://svn.apache.org/viewvc?rev=1177265&view=rev
Log:
Changed getSchemaTypeNameByClass(String name) method to use Class as the 
comparison basis instead of String comparison.  

Modified:
    
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java
    
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/description/java2wsdl/TypeTableTest.java

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=1177265&r1=1177264&r2=1177265&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
 Thu Sep 29 11:19:01 2011
@@ -28,6 +28,7 @@ import javax.xml.datatype.Duration;
 import javax.xml.datatype.XMLGregorianCalendar;
 import javax.xml.namespace.QName;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -114,9 +115,7 @@ public class TypeTable {
         simpleTypetoxsd.put("java.util.Date",
                 new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "date", 
"xs"));
         simpleTypetoxsd.put("java.util.Calendar",
-                new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "dateTime", 
"xs"));
-        simpleTypetoxsd.put("java.util.GregorianCalendar",
-                new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "dateTime", 
"xs"));
+                new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "dateTime", 
"xs"));        
 
         // SQL date time
          simpleTypetoxsd.put("java.sql.Date",
@@ -334,19 +333,52 @@ public class TypeTable {
      */
     private QName getSchemaTypeNameByClass(String name) {
         /*
+         * e.g 
          * 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 
("com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl"
-                .equals(name)
-                || "org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl"
-                        .equals(name)) {
-            return (QName) simpleTypetoxsd.get(XMLGregorianCalendar.class
-                    .getName());
+        try {
+            Class thisClass = Class.forName(name);
+            if(isSuperClass(thisClass, XMLGregorianCalendar.class)) {
+                return (QName) simpleTypetoxsd.get(XMLGregorianCalendar.class
+                        .getName());   
+                
+            } else if(isSuperClass(thisClass, Calendar.class)) {
+                return (QName) simpleTypetoxsd.get(Calendar.class
+                        .getName());                 
+            }
+        } catch (ClassNotFoundException e) {           
+            e.printStackTrace();
         }
+        
         return null;
     }
+    
+    /**
+     * This method check whether given child class in a extended class of given
+     * parent class. 
+     * TODO - may be need to come up with a better name for this method .
+     * 
+     * @param child
+     *            the child
+     * @param parent
+     *            the parent
+     * @return true, if is super class
+     */
+    public static boolean isSuperClass(Class child, Class parent) {
+        if (child == null || parent == null) {
+            return false;
+        }
+        Class superclass = child.getSuperclass();
+        while (superclass != null) {
+            if (superclass.getName().equals(parent.getName())) {
+                return true;
+            }
+            superclass = superclass.getSuperclass();
+        }
+        return false;
+    }
 }
 
 

Modified: 
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/description/java2wsdl/TypeTableTest.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/description/java2wsdl/TypeTableTest.java?rev=1177265&r1=1177264&r2=1177265&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/description/java2wsdl/TypeTableTest.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/description/java2wsdl/TypeTableTest.java
 Thu Sep 29 11:19:01 2011
@@ -19,15 +19,23 @@
 
 package org.apache.axis2.description.java2wsdl;
 
+import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.TimeZone;
 
 import javax.activation.DataHandler;
+import javax.xml.datatype.Duration;
+import javax.xml.datatype.XMLGregorianCalendar;
 import javax.xml.namespace.QName;
 
 import junit.framework.TestCase;
 
 import org.apache.ws.commons.schema.constants.Constants;
 
+
+
 /**
  * The Class TypeTableTest is used to test
  * {@link org.apache.axis2.description.java2wsdl.TypeTable TypeTable} class.
@@ -80,5 +88,217 @@ public class TypeTableTest extends TestC
                assertNull("NULl value expected",
                                
typeTable.getClassNameForQName(Constants.XSD_LANGUAGE));
        }
+       
+       
+    public void testGetSchemaTypeName() {
+        String className = null;    
+        QName dateType = new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD,
+                "date", "xs");
+        TypeTable typeTable = new TypeTable();
+        
+        className = 
"com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl";
+        assertEquals("Not the expected value", dateType,
+                typeTable.getSchemaTypeName(className));
+        
+        className = TestXMLGregorianCalendarImpl.class.getName();
+        assertEquals("Not the expected value", dateType,
+                typeTable.getSchemaTypeName(className));
+        
+        className = GregorianCalendar.class.getName();
+        dateType = new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD,
+                "dateTime", "xs");
+        System.out.println( typeTable.getSchemaTypeName(className));
+        assertEquals("Not the expected value", dateType,
+                typeTable.getSchemaTypeName(className));
+        
+        className = TestCalendarImpl.class.getName();
+        assertNull("Not the expected value",
+                typeTable.getSchemaTypeName(className));
+    }
+
+    class TestXMLGregorianCalendarImpl extends XMLGregorianCalendar {
+        @Override
+        public void clear() {
+        }
+
+        @Override
+        public void reset() {
+
+        }
+
+        @Override
+        public void setYear(BigInteger year) {
+
+        }
+
+        @Override
+        public void setYear(int year) {
+
+        }
+
+        @Override
+        public void setMonth(int month) {
+
+        }
+
+        @Override
+        public void setDay(int day) {
+
+        }
+
+        @Override
+        public void setTimezone(int offset) {
+
+        }
+
+        @Override
+        public void setHour(int hour) {
+
+        }
+
+        @Override
+        public void setMinute(int minute) {
+
+        }
+
+        @Override
+        public void setSecond(int second) {
+
+        }
+
+        @Override
+        public void setMillisecond(int millisecond) {
+
+        }
+
+        @Override
+        public void setFractionalSecond(BigDecimal fractional) {
+
+        }
+
+        @Override
+        public BigInteger getEon() {
+
+            return null;
+        }
+
+        @Override
+        public int getYear() {
+
+            return 0;
+        }
+
+        @Override
+        public BigInteger getEonAndYear() {
+
+            return null;
+        }
+
+        @Override
+        public int getMonth() {
+
+            return 0;
+        }
+
+        @Override
+        public int getDay() {
+
+            return 0;
+        }
+
+        @Override
+        public int getTimezone() {
+
+            return 0;
+        }
+
+        @Override
+        public int getHour() {
+
+            return 0;
+        }
+
+        @Override
+        public int getMinute() {
+
+            return 0;
+        }
+
+        @Override
+        public int getSecond() {
+
+            return 0;
+        }
+
+        @Override
+        public BigDecimal getFractionalSecond() {
+
+            return null;
+        }
+
+        @Override
+        public int compare(XMLGregorianCalendar xmlGregorianCalendar) {
+
+            return 0;
+        }
+
+        @Override
+        public XMLGregorianCalendar normalize() {
+
+            return null;
+        }
+
+        @Override
+        public String toXMLFormat() {
+
+            return null;
+        }
+
+        @Override
+        public QName getXMLSchemaType() {
+
+            return null;
+        }
+
+        @Override
+        public boolean isValid() {
+            return false;
+        }
+
+        @Override
+        public void add(Duration duration) {
+
+        }
+
+        @Override
+        public GregorianCalendar toGregorianCalendar() {
+
+            return null;
+        }
+
+        @Override
+        public GregorianCalendar toGregorianCalendar(TimeZone timezone,
+                Locale aLocale, XMLGregorianCalendar defaults) {
+
+            return null;
+        }
+
+        @Override
+        public TimeZone getTimeZone(int defaultZoneoffset) {
+
+            return null;
+        }
+
+        @Override
+        public Object clone() {
+
+            return null;
+        }
+
+    }
+
+    class TestCalendarImpl {
+
+    }
 
 }


Reply via email to