Re: question(bug) about setNodeValue

Jacob Kjome <[email protected]> Thu, 18 Sep 2003 16:57:47 -0500
Newsgroups gmane.comp.java.enhydra.xmlc
Message-ID <[email protected]>
At 02:25 PM 9/18/2003 +0800, you wrote:
>hi,
>
>I find that when call setNodeValue with "null", xmlc will report errors 
>like below:
>
>java.lang.NullPointerException
>    at 
> org.enhydra.xml.io.BaseDOMFormatter.writeText(BaseDOMFormatter.java:535)

[snip]

The reason why the null pointer is happening is that the writeText() method 
doesn't do a null check on the text string being passed in.....

protected final void writeText(String text) throws IOException {
         int len = text.length();
         char ch;

         // FIXME: here we make a nasty assumption about all characters
         // less than fMaxCharacterValue && MAX_ENTITY_QUICK_CHECK_CHAR
         // are valid. This is probably ok.  The fMaxCharacterValue check
         // is needed for 7-bit encodings.
         for (int idx = 0; idx < len; idx++) {
             ch = text.charAt(idx);
             if ((ch <= fMaxCharacterValue)
                 && (ch <= MAX_ENTITY_QUICK_CHECK_CHAR)
                 && (!fEntityQuickCheck[ch])) {
                 fOut.write(ch);  // Fast path.
             } else {
                 writeCharacter(ch);
             }
         }
     }

>My codes like this:
>....
>HTMLElement ipAddr = (HTMLElement) page.getElementById(LIST_IPADDR_TAG);
>ipAddr.getFirstChild().setNodeValue(current.getIpAddr()); // <-- here, 
>getIpAddr() may return null
>....
>context.writeDOM(req, resp, page);
>
>Accroding to api doc, setNodeVaule can accept null parameter:
>
>The value of this node, depending on its type; see the table above. When it
>is defined to be null, setting it has no effect.

Hmm......  So, does this mean that the initial value shouldn't have been 
modified?  In the DOM, what is the initial value of a Text node?  Can it be 
null or would that, by definition, mean that there wouldn't be a text node 
in the first place?  It it couldn't be null as an initial value and passing 
null to setNodeValue() is supposed to leave the initial value alone rather 
than set it to null, then how could a Text node value of null be passed to 
BaseDOMFormatter#writeText()?  We could certainly do the null check in the 
writeText() method, but should we have to do that?  Would that even be the 
correct thing to do?  Seems like the bug here might lay somewhere in the 
Xerces1 DOM implemementation.  Thoughts anyone?


>So, what happened with setNodeValue?

Your guess is as good as mine.  I'll look into it a bit and hopefully 
others will to.

Jake

>Thanks!
>
>linuxman
>
>_______________________________________________
>XMLC mailing list
>[email protected]
>http://www.enhydra.org/mailman/listinfo.cgi/xmlc