[Home] [By Thread] [By Date] [Recent Entries]


Elliotte Rusty Harold wrote:

> Then your code will break when used with some of today's parsers which 
> do call endDocument() after a fatal error.. :-(

See the example program below, which demonstrates my statement with
Crimson, Xerces, ...


> It's a question of where you have that information. It's often 
> convenient to know the document has ended inside the ContentHandler. Not 
> that you can't have the method that calls parse() then call 
> endDocument() inside the ContentHandler, but it's ugly, hard to explain, 
> and error prone.

I'd support your opinion 100% if it wouldn't break existing
applications.


Jochen


import java.io.StringReader;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class Main {
     public static void main(String[] args) throws Exception {
         String doc = "<foo/>";
         XMLReader xr = 
SAXParserFactory.newInstance().newSAXParser().getXMLReader();
         xr.setContentHandler(new DefaultHandler(){
             public void startDocument() throws SAXException {
                 System.out.println("startDocument");
                 throw new SAXException("startDocument fails");
             }
             public void endDocument() throws SAXException {
                 System.out.println("endDocument");
             }
         });
         xr.parse(new InputSource(new StringReader(doc)));
     }
}

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member