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