1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package org.apache.commons.jxpath.xml;
19
20 import java.io.InputStream;
21
22 /**
23 * The abstract superclass of XML parsers that produce DOM Documents. The features have the same defaults as {@link javax.xml.parsers.DocumentBuilderFactory}.
24 */
25 public abstract class XMLParser2 implements XMLParser {
26
27 private boolean validating;
28 private boolean namespaceAware = true;
29 private boolean whitespace;
30 private boolean expandEntityRef = true;
31 private boolean ignoreComments;
32 private boolean coalescing;
33
34
35 /**
36 * Constructs a new instance for subclasses.
37 */
38 public XMLParser2() {
39 // empty
40 }
41
42 /**
43 * Tests whether the underlying parser is coalescing.
44 *
45 * @return boolean
46 * @see javax.xml.parsers.DocumentBuilderFactory#isCoalescing()
47 */
48 public boolean isCoalescing() {
49 return coalescing;
50 }
51
52 /**
53 * Tests whether the underlying parser expands entity references.
54 *
55 * @return boolean
56 * @see javax.xml.parsers.DocumentBuilderFactory#isExpandEntityReferences()
57 */
58 public boolean isExpandEntityReferences() {
59 return expandEntityRef;
60 }
61
62 /**
63 * Tests whether the underlying parser ignores comments.
64 *
65 * @return boolean
66 * @see javax.xml.parsers.DocumentBuilderFactory#isIgnoringComments()
67 */
68 public boolean isIgnoringComments() {
69 return ignoreComments;
70 }
71
72 /**
73 * Tests whether the underlying parser is ignoring whitespace.
74 *
75 * @return boolean
76 * @see javax.xml.parsers.DocumentBuilderFactory#isIgnoringElementContentWhitespace()
77 */
78 public boolean isIgnoringElementContentWhitespace() {
79 return whitespace;
80 }
81
82 /**
83 * Tests whether the underlying parser is ns-aware.
84 *
85 * @return boolean
86 * @see javax.xml.parsers.DocumentBuilderFactory#isNamespaceAware()
87 */
88 public boolean isNamespaceAware() {
89 return namespaceAware;
90 }
91
92 /**
93 * Tests whether the underlying parser is validating.
94 *
95 * @return boolean
96 * @see javax.xml.parsers.DocumentBuilderFactory#isValidating()
97 */
98 public boolean isValidating() {
99 return validating;
100 }
101
102 @Override
103 public abstract Object parseXML(InputStream stream);
104
105 /**
106 * Sets whether the underlying parser is coalescing.
107 *
108 * @param coalescing flag
109 * @see javax.xml.parsers.DocumentBuilderFactory#setCoalescing(boolean)
110 */
111 public void setCoalescing(final boolean coalescing) {
112 this.coalescing = coalescing;
113 }
114
115 /**
116 * Sets whether the underlying parser expands entity references.
117 *
118 * @param expandEntityRef flag
119 * @see javax.xml.parsers.DocumentBuilderFactory#setExpandEntityReferences(boolean)
120 */
121 public void setExpandEntityReferences(final boolean expandEntityRef) {
122 this.expandEntityRef = expandEntityRef;
123 }
124
125 /**
126 * Sets whether the underlying parser ignores comments.
127 *
128 * @param ignoreComments flag
129 * @see javax.xml.parsers.DocumentBuilderFactory#setIgnoringComments(boolean)
130 */
131 public void setIgnoringComments(final boolean ignoreComments) {
132 this.ignoreComments = ignoreComments;
133 }
134
135 /**
136 * Sets whether the underlying parser is ignoring whitespace.
137 *
138 * @param whitespace flag
139 * @see javax.xml.parsers.DocumentBuilderFactory#setIgnoringElementContentWhitespace(boolean)
140 */
141 public void setIgnoringElementContentWhitespace(final boolean whitespace) {
142 this.whitespace = whitespace;
143 }
144
145 /**
146 * Sets whether the underlying parser is ns-aware.
147 *
148 * @param namespaceAware flag
149 * @see javax.xml.parsers.DocumentBuilderFactory#setNamespaceAware(boolean)
150 */
151 public void setNamespaceAware(final boolean namespaceAware) {
152 this.namespaceAware = namespaceAware;
153 }
154
155 /**
156 * Sets whether the underlying parser should be validating.
157 *
158 * @param validating flag
159 * @see javax.xml.parsers.DocumentBuilderFactory#setValidating(boolean)
160 */
161 public void setValidating(final boolean validating) {
162 this.validating = validating;
163 }
164 }