DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15466>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15466 XNodeSet.getStringFromNode() gives NullPointerException Summary: XNodeSet.getStringFromNode() gives NullPointerException Product: XalanJ2 Version: 2.4 Platform: All OS/Version: All Status: NEW Severity: Normal Priority: Other Component: org.apache.xpath AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] In XNodeSet.getStringFromNode() there is the following code: public XMLString getStringFromNode(int n) { // %OPT% // I guess we'll have to get a static instance of the DTM manager... if(DTM.NULL != n) { return m_dtmMgr.getDTM(n).getStringValue(n); } else { return org.apache.xpath.objects.XString.EMPTYSTRING; } } The comment indicates awareness that if m_dtmMgr is null there will be a problem. Some other methods also contain similar code. Some XNodeSet instantiations will result in the m_dtmMgr not being set. My initial thought was to use getDTMManager() on the iterator in the constructor to set the m_dtmMgr, this fixed some cases, but broke others (I was not able to figure out why). I then implemented a change in getStringFromNode(), getNumberFromNode(), and dispatchCharactersEvents() that seems to work in all cases that I tested. This change is similar to the following example with getStringFromNode(): public XMLString getStringFromNode(int n) { // %OPT% // I guess we'll have to get a static instance of the DTM manager... if(DTM.NULL != n) { if ( m_dtmMgr != null ) return m_dtmMgr.getDTM(n).getStringValue(n); else return m_iter.getDTMManager().getDTM(n).getStringValue(n); } else { return org.apache.xpath.objects.XString.EMPTYSTRING; } } Basically if m_dtmMgr is not set then use m_iter.getDTMManager() to get the DTM manager. As I said, in my testing this works. My only concerns are that the comment indicates an awareness of the issue - but this simple change had not been made, and that perhaps a better solution is/was in the works.
