Re: NPE in parser->getDOMImplementation() with CNI
Andrew Haley <[email protected]>
| Newsgroups | gmane.comp.gcc.java.devel |
|---|---|
| Message-ID | <[email protected]> |
Sam Ruby wrote: > Andrew Haley wrote: >> Mark Wielaard wrote: >>> On Sun, 2009-06-21 at 16:46 +0100, Andrew Haley wrote: >>>> Sam Ruby wrote: >>>>> I'm trying to develop a JAXP implementation using CNI, but I get a >>>>> NullPointerException when I try to get a DOMImplementation. I've >>>>> attached a small script (tested on Ubuntu 9.04) which demonstrates the >>>>> problem. >>>>> >>>>> Any help would be appreciated. >>>> Congratulations on this excellent test case. Next time I want to tell >>>> people how to do it right, I'll point them at your posting. >>>> >>>> However, I get >>>> >>>> $ sh ~/testdomimpl.sh >>>> gnu.xml.dom.DomDocumentBuilderFactory@160ecdad >>>> gnu.xml.dom.DomDocumentBuilder@15ffbc45 >>>> gnu.xml.dom.DomImpl@15ef0ee5 >>>> >>>> gnu.xml.dom.DomDocumentBuilderFactory@2df0bea7 >>>> gnu.xml.dom.DomDocumentBuilder@2de03d5f >>>> gnu.xml.dom.DomImpl@2dd0bfdf >>>> $ gcj --version >>>> gcj (GCC) 4.4.0 20090307 (Red Hat 4.4.0-0.23) >>> I get the same with that version of gcj. >>> But on an older gcj installation: >>> gcj (Debian 4.3.2-2) 4.3.2 >>> >>> gnu.xml.dom.DomDocumentBuilderFactory@6992f029 >>> gnu.xml.dom.DomDocumentBuilder@647a3539 >>> gnu.xml.dom.DomImpl@64826fa9 >>> >>> gnu.xml.dom.DomDocumentBuilderFactory@17d5dffb >>> gnu.xml.dom.DomDocumentBuilder@12bcf52b >>> java.lang.NullPointerException >>> at java.io.PrintStream.println(PrintStream.java:473) >> >> I found the problem. >> >> There is an implementation of jaxp in /usr/share/java/jaxp-1.3.jar and >> another in /usr/lib/libgcj.so.90. They are not the same version, and >> they are not compatible. >> >> If you link against /usr/lib/libgcj.so.90 then you must compile against >> the version of jaxp in that library. >> >> Do this: >> >> gcjh -cp /usr/share/java/libgcj.jar -d headers \ >> org.w3c.dom.DOMImplementation \ >> javax.xml.parsers.DocumentBuilder \ >> javax.xml.parsers.DocumentBuilderFactory > > I still see the problem. Even after I apt-get remove libjaxp1.3-java-gcj. The problem is not libjaxp1.3-java-gcj, it's libjaxp1.3-java >> I don't think it's possible to override the version of jaxp that's in >> /usr/lib/libgcj.so.90. > > I'd be fine using that version... if only it would work. The key is javax/xml/parsers/DocumentBuilder.h. Here's the difference between the bad and the good versiona: aph@classpath:/tmp$ diff -u headers/javax/xml/parsers/DocumentBuilder.h bad/javax/xml/parsers/DocumentBuilder.h --- headers/javax/xml/parsers/DocumentBuilder.h 2009-06-22 11:47:28.000000000 +0000 +++ bad/javax/xml/parsers/DocumentBuilder.h 2009-06-22 11:46:37.000000000 +0000 @@ -51,6 +51,7 @@ public: // actually protected DocumentBuilder(); public: + virtual void reset(); virtual ::org::w3c::dom::Document * parse(::java::io::InputStream *); virtual ::org::w3c::dom::Document * parse(::java::io::InputStream *, ::java::lang::String *); virtual ::org::w3c::dom::Document * parse(::java::lang::String *); @@ -62,9 +63,11 @@ virtual void setErrorHandler(::org::xml::sax::ErrorHandler *) = 0; virtual ::org::w3c::dom::Document * newDocument() = 0; virtual ::org::w3c::dom::DOMImplementation * getDOMImplementation() = 0; - virtual void reset(); virtual ::javax::xml::validation::Schema * getSchema(); virtual jboolean isXIncludeAware(); +private: + static const jboolean DEBUG = 0; +public: static ::java::lang::Class class$; }; ************************************************************************ Please make sure you delete *everything* from the old build. Especially the contents of the headers directory. ************************************************************************ If all that still fails, please send the failing script so we can try it. Andrew.