001: /*
002: ItsNat Java Web Application Framework
003: Copyright (C) 2007 Innowhere Software Services S.L., Spanish Company
004: Author: Jose Maria Arranz Santamaria
005:
006: This program is free software: you can redistribute it and/or modify
007: it under the terms of the GNU Affero General Public License as published by
008: the Free Software Foundation, either version 3 of the License, or
009: (at your option) any later version. See the GNU Affero General Public
010: License for more details. See the copy of the GNU Affero General Public License
011: included in this program. If not, see <http://www.gnu.org/licenses/>.
012: */
013:
014: package org.itsnat.impl.core.dom.parse;
015:
016: import org.apache.xerces.parsers.DOMParser;
017: import org.itsnat.core.ItsNatException;
018: import org.xml.sax.ErrorHandler;
019: import org.xml.sax.*;
020: import org.w3c.dom.*;
021:
022: public abstract class ItsNatDOMParser implements ErrorHandler {
023: /** Namespaces feature id (http://xml.org/sax/features/namespaces). */
024: protected static final String NAMESPACES_FEATURE_ID = "http://xml.org/sax/features/namespaces";
025:
026: /** Validation feature id (http://xml.org/sax/features/validation). */
027: protected static final String VALIDATION_FEATURE_ID = "http://xml.org/sax/features/validation";
028:
029: /** Schema validation feature id (http://apache.org/xml/features/validation/schema). */
030: protected static final String SCHEMA_VALIDATION_FEATURE_ID = "http://apache.org/xml/features/validation/schema";
031:
032: /** Schema full checking feature id (http://apache.org/xml/features/validation/schema-full-checking). */
033: protected static final String SCHEMA_FULL_CHECKING_FEATURE_ID = "http://apache.org/xml/features/validation/schema-full-checking";
034:
035: /** Dynamic validation feature id (http://apache.org/xml/features/validation/dynamic). */
036: protected static final String DYNAMIC_VALIDATION_FEATURE_ID = "http://apache.org/xml/features/validation/dynamic";
037:
038: /** Default parser name (dom.wrappers.Xerces). */
039: protected static final String DEFAULT_PARSER_NAME = "dom.wrappers.Xerces";
040:
041: protected static final String DEFAULT_LOAD_DTD_GRAMMAR_ID = "http://apache.org/xml/features/nonvalidating/load-dtd-grammar";
042:
043: protected static final String DEFAULT_LOAD_EXTERNAL_DTD_ID = "http://apache.org/xml/features/nonvalidating/load-external-dtd";
044:
045: /** Default repetition (1). */
046: protected static final int DEFAULT_REPETITION = 1;
047:
048: /** Default namespaces support (true). */
049: protected static final boolean DEFAULT_NAMESPACES = true;
050:
051: /** Default validation support (false). */
052: protected static final boolean DEFAULT_VALIDATION = false;
053:
054: /** Default Schema validation support (false). */
055: protected static final boolean DEFAULT_SCHEMA_VALIDATION = false;
056:
057: /** Default Schema full checking support (false). */
058: protected static final boolean DEFAULT_SCHEMA_FULL_CHECKING = false;
059:
060: /** Default dynamic validation support (false). */
061: protected static final boolean DEFAULT_DYNAMIC_VALIDATION = false;
062:
063: protected static final boolean DEFAULT_LOAD_DTD_GRAMMAR = false; // Esta la he añadido yo, por defecto es true, pero quizás ralentiza si se conecta al DTD (COMPROBAR)
064:
065: protected static final boolean DEFAULT_LOAD_EXTERNAL_DTD = false; // Idem
066:
067: protected DOMParser parser;
068:
069: /**
070: * Creates a new instance of ItsNatDOMParser
071: */
072: public ItsNatDOMParser() {
073: this .parser = createParser();
074:
075: parser.setErrorHandler(this );
076:
077: try {
078: parser
079: .setFeature(VALIDATION_FEATURE_ID,
080: DEFAULT_VALIDATION);
081:
082: } catch (SAXNotRecognizedException ex) {
083: throw new ItsNatException(ex);
084: } catch (SAXNotSupportedException ex) {
085: throw new ItsNatException(ex);
086: }
087: }
088:
089: public abstract DOMParser createParser();
090:
091: public Document parse(InputSource input) {
092: try {
093: parser.parse(input);
094: } catch (Exception ex) {
095: throw new ItsNatException(ex);
096: }
097:
098: return parser.getDocument();
099: }
100:
101: public void error(org.xml.sax.SAXParseException ex)
102: throws org.xml.sax.SAXException {
103: printError("Error", ex);
104: }
105:
106: public void fatalError(org.xml.sax.SAXParseException ex)
107: throws org.xml.sax.SAXException {
108: printError("Fatal Error", ex);
109: throw ex;
110: }
111:
112: public void warning(org.xml.sax.SAXParseException ex)
113: throws org.xml.sax.SAXException {
114: printError("Warning", ex);
115: }
116:
117: protected void printError(String type, SAXParseException ex)
118: throws org.xml.sax.SAXException {
119: //String errMsg =
120: System.err.print("[");
121: System.err.print(type);
122: System.err.print("] ");
123: String systemId = ex.getSystemId();
124: if (systemId != null) {
125: int index = systemId.lastIndexOf('/');
126: if (index != -1)
127: systemId = systemId.substring(index + 1);
128: System.err.print(systemId);
129: }
130: System.err.print(':');
131: System.err.print(ex.getLineNumber());
132: System.err.print(':');
133: System.err.print(ex.getColumnNumber());
134: System.err.print(": ");
135: System.err.print(ex.getMessage());
136: System.err.println();
137: System.err.flush();
138:
139: } // printError(String,SAXParseException)
140: }
|