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