001: //$Id: XMLHelper.java 8563 2005-11-10 15:58:59Z steveebersole $
002: package org.hibernate.util;
003:
004: import java.util.List;
005:
006: import org.apache.commons.logging.Log;
007: import org.apache.commons.logging.LogFactory;
008: import org.dom4j.io.DOMReader;
009: import org.dom4j.io.SAXReader;
010: import org.dom4j.io.OutputFormat;
011: import org.dom4j.io.XMLWriter;
012: import org.dom4j.Element;
013: import org.dom4j.DocumentFactory;
014: import org.xml.sax.EntityResolver;
015: import org.xml.sax.ErrorHandler;
016: import org.xml.sax.SAXParseException;
017:
018: /**
019: * Small helper class that lazy loads DOM and SAX reader and keep them for fast use afterwards.
020: *
021: *
022: *
023: */
024: public final class XMLHelper {
025:
026: private static final Log log = LogFactory.getLog(XMLHelper.class);
027: public static final EntityResolver DEFAULT_DTD_RESOLVER = new DTDEntityResolver();
028:
029: private DOMReader domReader;
030: private SAXReader saxReader;
031:
032: /**
033: * Create a dom4j SAXReader which will append all validation errors
034: * to errorList
035: */
036: public SAXReader createSAXReader(String file, List errorsList,
037: EntityResolver entityResolver) {
038: if (saxReader == null)
039: saxReader = new SAXReader();
040: saxReader.setEntityResolver(entityResolver);
041: saxReader.setErrorHandler(new ErrorLogger(file, errorsList));
042: saxReader.setMergeAdjacentText(true);
043: saxReader.setValidation(true);
044: return saxReader;
045: }
046:
047: /**
048: * Create a dom4j DOMReader
049: */
050: public DOMReader createDOMReader() {
051: if (domReader == null)
052: domReader = new DOMReader();
053: return domReader;
054: }
055:
056: public static class ErrorLogger implements ErrorHandler {
057: private String file;
058: private List errors;
059:
060: ErrorLogger(String file, List errors) {
061: this .file = file;
062: this .errors = errors;
063: }
064:
065: public void error(SAXParseException error) {
066: log
067: .error("Error parsing XML: " + file + '('
068: + error.getLineNumber() + ") "
069: + error.getMessage());
070: errors.add(error);
071: }
072:
073: public void fatalError(SAXParseException error) {
074: error(error);
075: }
076:
077: public void warning(SAXParseException warn) {
078: log.warn("Warning parsing XML: " + file + '('
079: + warn.getLineNumber() + ") " + warn.getMessage());
080: }
081: }
082:
083: public static Element generateDom4jElement(String elementName) {
084: return DocumentFactory.getInstance().createElement(elementName);
085: }
086:
087: public static void dump(Element element) {
088: try {
089: // try to "pretty print" it
090: OutputFormat outformat = OutputFormat.createPrettyPrint();
091: XMLWriter writer = new XMLWriter(System.out, outformat);
092: writer.write(element);
093: writer.flush();
094: System.out.println("");
095: } catch (Throwable t) {
096: // otherwise, just dump it
097: System.out.println(element.asXML());
098: }
099:
100: }
101: }
|