harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tim Ellison <t.p.elli...@gmail.com>
Subject Re: [general] Interesting discoveries playing around with japitools
Date Mon, 06 Nov 2006 16:01:57 GMT
Thanks for doing this Stefano.  I'll investigate the Sun/IBM findings
and let you know.

Regards,
Tim

Stefano Mazzocchi wrote:
> Being a sucker for statistics and charts, I've decided to look into
> japitools myself and regenerate the graph of API coverage progress of
> harmony.
> 
> In doing so, I started to familiarize myself with the Japitools and I
> found a few interesting discoveries: the latest version of the three
> freely available certified java 5 implementations (Sun's, BEA's and
> IBM's) are *NOT* 100% compatible.
> 
> So, here's what I did:
> 
>  1) download the three JVMs
>  2) download japitools, "tar xzf" it and "cd japitools"
>  3) type:
> 
>   ./bin/japize as $name packages \
>     /path/to/jvms/$name/jre/lib/*.jar \
>     +java +javax +org -org.apache -org.ietf
> 
>  and substitute $name with the JVM name
> 
>   4) you'll obtain three $name.japi.gz files (the binary representation
> of your API footprint)
> 
>   5) then type "japicompat -s $original.japi.gz $test.japi.gz"
> 
> where "original" is the JVM that you consider the reference and $test is
> the one that you want to test.
> 
> Here are the (a little surprising, I must say) results:
> 
> -- sun 1.5 vs. bea1.5 ---------------------------------------
> 
>  99.99% good, 0% missing
> 
> java.awt.peer:
> method java.awt.peer.WindowPeer.updateFocusableWindowState(): missing in
> /home/stefano/data/japi/ibm1.5
> 
> -- sun 1.5 vs. ibm1.5 ---------------------------------------
> 
>  Total: 99.93% good, 0% bad, 0.06% missing
> 
> java.awt.peer:
> Missing
> method java.awt.peer.WindowPeer.updateFocusableWindowState(): missing in
> /home/stefano/data/japi/ibm1.5
> 
> javax.xml.datatype:
> Bad
> field
> javax.xml.datatype.DatatypeFactory.DATATYPEFACTORY_IMPLEMENTATION_CLASS:
> constant
> [com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl]
> in /home/stefano/data/japi/sun1.5, but constant
> [org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl] in
> /home/stefano/data/japi/ibm1.5
> 
> org.omg.stub.javax.management.remote.rmi:
> Missing
> class org.omg.stub.javax.management.remote.rmi._RMIConnectionImpl_Tie:
> missing in /home/stefano/data/japi/ibm1.5
> class org.omg.stub.javax.management.remote.rmi._RMIServerImpl_Tie:
> missing in /home/stefano/data/japi/ibm1.5
> 
> org.w3c.dom.html:
> Missing
> method org.w3c.dom.html.HTMLFrameElement.getContentDocument(): missing
> in /home/stefano/data/japi/ibm1.5
> method org.w3c.dom.html.HTMLIFrameElement.getContentDocument(): missing
> in /home/stefano/data/japi/ibm1.5
> method org.w3c.dom.html.HTMLObjectElement.getContentDocument(): missing
> in /home/stefano/data/japi/ibm1.5
> method org.w3c.dom.html.HTMLOptionElement.setSelected(boolean): missing
> in /home/stefano/data/japi/ibm1.5
> 
>                                   - o -
> 
> There is one method that both Bea and IBM don't implement in
> awt.peer.WindowPeer and apparently, Sun doesn't implement it either..
> it's just a stub! Weird.
> 
> [see more at http://forums.java.net/jive/thread.jspa?messageID=167137]
> 
> the differences in datatype factory is plausible and the fact that a
> stub RMI class is missing is not that big of a deal. It's weird though,
> that the DOM in IBM's is different than the DOM in Sun's... I guess not
> that many people use the HTML DOM in java or they would have got that ;-)
> 
> The really crazy things start to happen if you flip things around and
> you consider the 'clean room rewrites' as the reference implementations:
> 
> -- bea1.5 vs. sun1.5 --------------------------------------------
> 
> Total: 99.98% good, 0.01% missing
> 
> javax.xml.namespace:
> Missing
> class javax.xml.namespace.QName: missing in /home/stefano/data/japi/sun1.5
> 
> Uh? Sun forgot to ship the QName class or this is a japitools bug?
> 
> googling up shows the class in the java1.5 docs so it's more likely it's
> a bug in japitools
> 
> http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/namespace/QName.html
> 
> Gets more interesting with IBM:
> 
> -- ibm1.5 vs. sun1.5 --------------------------------------------
> 
> Total: 99.77% good, 0% bad, 0.22% missing
> 
> java.lang:
> Missing
> method java.lang.StringBuilder.append(java.lang.StringBuilder): missing
> in /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.capacity(): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.charAt(int): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.codePointAt(int): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.codePointBefore(int): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.codePointCount(int, int): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.ensureCapacity(int): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.getChars(int, int, char[], int): missing
> in /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.length(): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.offsetByCodePoints(int, int): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.setCharAt(int, char): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.setLength(int): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.subSequence(int, int): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.substring(int): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.substring(int, int): missing in
> /home/stefano/data/japi/sun1.5
> method java.lang.StringBuilder.trimToSize(): missing in
> /home/stefano/data/japi/sun1.5
> 
> javax.management.remote.rmi:
> Missing
> class javax.management.remote.rmi._RMIConnectionImpl_Tie: missing in
> /home/stefano/data/japi/sun1.5
> class javax.management.remote.rmi._RMIServerImpl_Tie: missing in
> /home/stefano/data/japi/sun1.5
> 
> javax.xml.datatype:
> Bad
> field
> javax.xml.datatype.DatatypeFactory.DATATYPEFACTORY_IMPLEMENTATION_CLASS:
> constant [org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl] in
> /home/stefano/data/japi/ibm1.5, but constant
> [com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl]
> in /home/stefano/data/japi/sun1.5
> 
> org.omg.stub.java.lang:
> Missing
> package org.omg.stub.java.lang: missing in /home/stefano/data/japi/sun1.5
> 
> org.omg.stub.java.security:
> Missing
> package org.omg.stub.java.security: missing in
> /home/stefano/data/japi/sun1.5
> 
> org.omg.stub.java.util:
> Missing
> package org.omg.stub.java.util: missing in /home/stefano/data/japi/sun1.5
> 
> org.w3c.dom.html:
> Missing
> method org.w3c.dom.html.HTMLOptionElement.setIndex(int): missing in
> /home/stefano/data/japi/sun1.5
> method org.w3c.dom.html.HTMLTableCellElement.setCellIndex(int): missing
> in /home/stefano/data/japi/sun1.5
> method
> org.w3c.dom.html.HTMLTableRowElement.setCells(org.w3c.dom.html.HTMLCollection):
> missing in /home/stefano/data/japi/sun1.5
> method org.w3c.dom.html.HTMLTableRowElement.setRowIndex(int): missing in
> /home/stefano/data/japi/sun1.5
> method org.w3c.dom.html.HTMLTableRowElement.setSectionRowIndex(int):
> missing in /home/stefano/data/japi/sun1.5
> 
> org.w3c.dom.xpath:
> Missing
> package org.w3c.dom.xpath: missing in /home/stefano/data/japi/sun1.5
> 
>                                   - o -
> 
> First the not-so-shocking things:
> 
>  1) IBM ships with xpath support with DOM, while Sun does not. Is this
> true of it's a bug?
> 
>  2) IBM has a 'stub' subpackage of org.omg that Sun does not have
> 
> but the real shocker is that japitools reports that IBM has *modified*
> the java.lang.StringBuilder class and added *15* new methods to it!
> 
> If this is true, how is it possible for this JVM to pass the TCK if you
> add methods to a java.lang class? Isn't this the kind of stuff that TCKs
> are supposed to prevent? Can anybody explain to me if this is true or if
> this is a japi bug?
> 
> Also, I found out that Japitools triggers some NullPointerExceptions
> here and there, so it needs some tuning. I'll investigate more.
> 
> Stay tuned.
> 

-- 

Tim Ellison (t.p.ellison@gmail.com)
IBM Java technology centre, UK.

Mime
View raw message