You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Andreas Veithen <an...@gmail.com> on 2011/10/18 22:48:20 UTC

Re: svn commit: r1177265 - in /axis/axis2/java/core/trunk/modules/kernel: src/org/apache/axis2/description/java2wsdl/TypeTable.java test/org/apache/axis2/description/java2wsdl/TypeTableTest.java

The functionality of the isSuperClass method is actually already
provided by the JRE:

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#isAssignableFrom(java.lang.Class)

Andreas

On Thu, Sep 29, 2011 at 13:19,  <sa...@apache.org> wrote:
> 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 {
> +
> +    }
>
>  }
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org


Re: svn commit: r1177265 - in /axis/axis2/java/core/trunk/modules/kernel: src/org/apache/axis2/description/java2wsdl/TypeTable.java test/org/apache/axis2/description/java2wsdl/TypeTableTest.java

Posted by Sagara Gunathunga <sa...@gmail.com>.
On Wed, Oct 19, 2011 at 2:18 AM, Andreas Veithen
<an...@gmail.com> wrote:
> The functionality of the isSuperClass method is actually already
> provided by the JRE:
>
> http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#isAssignableFrom(java.lang.Class)

I also used above method several places in adb module, I can't recall
exactly how I get this idea to implement isSuperClass method :)
It seems isAssignableFrom method smart enough for TypeTable's
requirement too will change this.

Thanks !

>
> Andreas
>
> On Thu, Sep 29, 2011 at 13:19,  <sa...@apache.org> wrote:
>> 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 {
>> +
>> +    }
>>
>>  }
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
> For additional commands, e-mail: java-dev-help@axis.apache.org
>
>



-- 
Sagara Gunathunga

Blog      - http://ssagara.blogspot.com
Web      - http://people.apache.org/~sagara/
LinkedIn - http://www.linkedin.com/in/ssagara

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org