package jas.util.xml; import jas.util.NestedException; import jas.util.NestedRuntimeException; import java.io.Reader; import org.w3c.dom.Document; import org.xml.sax.EntityResolver; /** * Ideally wouldnt need this interface, except that the DOM specification * only specifies how to extract information from a DOM, not how to create * a DOM from an XML file. The JASDOMParser interface is meant to make up * for that deficiency. */ public abstract class JASDOMParser { /** * Create a DOM document by reading an XML file * @param in A reader set up to read an XML file * @param fileName The name of the file being read (used in error messages) * @return Document The resulting DOM * @exception XMLException thrown if there is an error reading the XML */ public abstract Document parse(Reader in, String fileName) throws JASXMLException; /** * Create a DOM document by reading an XML file with an explicit entity resolver. * An entity resolver is typically used to specify where to find the DTD for the XML * document. * @param in A reader set up to read an XML file * @param fileName The name of the file being read (used in error messages) * @param resolver An entity resolver to use when reading the XML file * @return Document The resulting DOM * @exception XMLException thrown if there is an error reading the XML */ public abstract Document parse(Reader in, String fileName, EntityResolver resolver) throws JASXMLException; /** * An exception that gets thrown if there is an error reading an XML file. */ public static class JASXMLException extends NestedException { public JASXMLException(String message) { super(message,null); } public JASXMLException(String message, Throwable detail) { super(message,detail); } } /** * Creates a default instance of a JASDOMParser * @return A JASDOMParser */ public static JASDOMParser instance() { try { return (JASDOMParser) Class.forName("jas.util.xml.parserwrappers.JAXPDOMParser").newInstance(); } catch (Throwable x) { throw new NestedRuntimeException("Unable to create default JASDomParser",x); } } }