Xerces 2.8.1: Occasionally a NullPointerException occurs when parsing using the "continue-after-fatal-error" feature (and after fatal errors). I'm attaching the stack trace and the sample test I've used.

I'm giving the main "test1.xml" here inline:

-----"test1.xml"
<?xml version="1.0" ?>
<!DOCTYPE test [
  <!ELEMENT test EMPTY>
  <!ATTLIST test
    decimal-point  (.|,)        "."
    status         (OK|ERR|user-defined)  "OK"
    asdfa          CDATA  #IMPLIED
  >
]>
<test />
-----"test1.xml"--

Using it I get the NPE. Changing the "asdfa" attribute declaration name to "asdfb", for example, doesn't cause a NPE.

Using the "test2.xml" I've attached (which refers to "test2.dtd") causes the parsing to hang - could be related to the NPE issue as the conditions are very similar.

--
Stanimir
java.lang.NullPointerException
        at 
org.apache.xerces.impl.dtd.DTDGrammar.getAttributeDeclIndex(DTDGrammar.java:346)
        at 
org.apache.xerces.impl.dtd.XMLDTDProcessor.attributeDecl(XMLDTDProcessor.java:866)
        at 
org.apache.xerces.impl.XMLDTDScannerImpl.scanAttlistDecl(XMLDTDScannerImpl.java:1177)
        at 
org.apache.xerces.impl.XMLDTDScannerImpl.scanDecls(XMLDTDScannerImpl.java:1925)
        at 
org.apache.xerces.impl.XMLDTDScannerImpl.scanDTDInternalSubset(XMLDTDScannerImpl.java:324)
        at 
org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(XMLDocumentScannerImpl.java:939)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:323)
        at 
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:844)
        at 
org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:767)
        at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:107)
        at 
org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1200)
        at 
org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:553)
        at net.example.ParsingTest.main(ParsingTest.java:57)
//package ;

import java.io.IOException;
import java.net.URL;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;

public class ParsingTest {

    public static void main(String[] args) {
        SAXParserFactory spf = SAXParserFactory.newInstance();
        spf.setValidating(true);
        
        XMLReader xmlReader;
        try {
            spf.setFeature("http://apache.org/xml/features/";
                           + "continue-after-fatal-error", true);
            xmlReader = spf.newSAXParser().getXMLReader();
        } catch (SAXException ex) {
            ex.printStackTrace();
            return;
        } catch (ParserConfigurationException ex) {
            ex.printStackTrace();
            return;
        }
        
        ErrorHandler errorHandler = new ErrorHandler() {
            public void warning(SAXParseException exception) {
                log("warning", exception);
            }
            public void fatalError(SAXParseException exception) {
                log("fatal", exception);
            }
            public void error(SAXParseException exception) {
                log("error", exception);
            }
            private void log(String type,
                             SAXParseException exception) {
                System.err.println("[" + type + "]:"
                                   + exception.getLineNumber()
                                   + ": " + exception);
            }
        };
        xmlReader.setErrorHandler(errorHandler);
        
        URL source = ParsingTest.class.getResource("test1.xml");
        InputSource input = new InputSource(source.toExternalForm());
        
        try {
            xmlReader.parse(input);
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (SAXException ex) {
            ex.printStackTrace();
        }
    }

}
<?xml version="1.0" ?>
<!DOCTYPE test SYSTEM "test2.dtd">
<test />

Attachment: test2.dtd
Description: application/xml-dtd

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to