[
Lists Home |
Date Index |
Thread Index
]
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)));
}
}
|