package org.iso_relax.jaxp; import java.io.File; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import org.iso_relax.verifier.Verifier; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.xml.sax.EntityResolver; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** * Wrapper DocumentBuilder with validation through JARV API. * * @author Daisuke OKAJIMA */ class ValidatingDocumentBuilder extends DocumentBuilder { protected DocumentBuilder _WrappedBuilder; protected Verifier _Verifier; /** * creates a new instance with an internal DocumentBuilder and Schema. * @param wrapped internal DOM parser * @param schema compiled schema. */ public ValidatingDocumentBuilder(DocumentBuilder wrapped, Verifier verifier) { _WrappedBuilder = wrapped; _Verifier = verifier; } /** * Parses the given InputSource and validates the resulting DOM. */ public Document parse(InputSource inputsource) throws SAXException, IOException { return verify(_WrappedBuilder.parse(inputsource)); } /** * Parses the given File and validates the resulting DOM. */ public Document parse(File file) throws SAXException, IOException { return verify(_WrappedBuilder.parse(file)); } /** * Parses the given InputStream and validates the resulting DOM. */ public Document parse(InputStream strm) throws SAXException, IOException { return verify(_WrappedBuilder.parse(strm)); } /** * Parses the given InputStream using the specified systemId and validates the resulting DOM. */ public Document parse(InputStream strm, String systemId) throws SAXException, IOException { return verify(_WrappedBuilder.parse(strm, systemId)); } /** * Parses the given url and validates the resulting DOM. */ public Document parse(String url) throws SAXException, IOException { return verify(_WrappedBuilder.parse(url)); } /** * @see DocumentBuilder#isNamespaceAware() */ public boolean isNamespaceAware() { return _WrappedBuilder.isNamespaceAware(); } /** * returns true always. */ public boolean isValidating() { return true; } /** * @see DocumentBuilder#setEntityResolver(EntityResolver) */ public void setEntityResolver(EntityResolver entityresolver) { _WrappedBuilder.setEntityResolver(entityresolver); _Verifier.setEntityResolver(entityresolver); } /** * @see DocumentBuilder#setErrorHandler(ErrorHandler) */ public void setErrorHandler(ErrorHandler errorhandler) { _WrappedBuilder.setErrorHandler(errorhandler); _Verifier.setErrorHandler(errorhandler); } /** * @see DocumentBuilder#newDocument() */ public Document newDocument() { return _WrappedBuilder.newDocument(); } /** * @see DocumentBuilder#getDOMImplementation() */ public DOMImplementation getDOMImplementation() { return _WrappedBuilder.getDOMImplementation(); } private Document verify(Document dom) throws SAXException, IOException { if(_Verifier.verify(dom)) return dom; else throw new SAXException("the document is invalid, but the ErrorHandler does not throw any Exception."); } }