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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.