1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.xml;
16
17 import static java.nio.charset.StandardCharsets.UTF_8;
18
19 import java.io.IOException;
20 import java.nio.charset.Charset;
21 import java.util.HashMap;
22
23 import javax.xml.parsers.ParserConfigurationException;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27 import org.htmlunit.SgmlPage;
28 import org.htmlunit.WebResponse;
29 import org.htmlunit.WebWindow;
30 import org.htmlunit.html.DomElement;
31 import org.htmlunit.html.DomProcessingInstruction;
32 import org.htmlunit.util.MimeType;
33 import org.htmlunit.util.XmlUtils;
34 import org.w3c.dom.Attr;
35 import org.w3c.dom.DOMConfiguration;
36 import org.w3c.dom.DOMImplementation;
37 import org.w3c.dom.Document;
38 import org.w3c.dom.DocumentType;
39 import org.w3c.dom.Element;
40 import org.w3c.dom.EntityReference;
41 import org.w3c.dom.Node;
42 import org.xml.sax.SAXException;
43
44
45
46
47
48
49
50
51
52
53 public class XmlPage extends SgmlPage {
54
55 private static final Log LOG = LogFactory.getLog(XmlPage.class);
56
57 private Node node_;
58
59
60
61
62
63
64
65
66
67
68 public XmlPage(final WebResponse webResponse, final WebWindow enclosingWindow) throws IOException {
69 this(webResponse, enclosingWindow, true);
70 }
71
72
73
74
75
76
77
78
79
80 public XmlPage(final Node node, final WebWindow enclosingWindow) {
81 super(null, enclosingWindow);
82 node_ = node;
83 if (node_ != null) {
84 XmlUtils.appendChild(this, this, node_, true);
85 }
86 }
87
88
89
90
91
92
93
94
95
96
97
98 public XmlPage(final WebResponse webResponse, final WebWindow enclosingWindow, final boolean ignoreSAXException)
99 throws IOException {
100 this(webResponse, enclosingWindow, ignoreSAXException, true);
101 }
102
103
104
105
106
107
108
109
110
111
112
113
114
115 public XmlPage(final WebResponse webResponse, final WebWindow enclosingWindow, final boolean ignoreSAXException,
116 final boolean handleXHTMLAsHTML) throws IOException {
117 super(webResponse, enclosingWindow);
118
119 try {
120 try {
121 final Document document = XmlUtils.buildDocument(webResponse);
122 node_ = document.getFirstChild();
123 }
124 catch (final SAXException e) {
125 if (LOG.isWarnEnabled()) {
126 LOG.warn("Failed parsing XML document '" + webResponse.getWebRequest().getUrl() + "'", e);
127 }
128 if (!ignoreSAXException) {
129 throw new IOException(
130 "Failed parsing XML document '" + webResponse.getWebRequest().getUrl() + "'", e);
131 }
132 }
133 }
134 catch (final ParserConfigurationException e) {
135 if (LOG.isWarnEnabled()) {
136 if (null == webResponse) {
137 LOG.warn("Failed parsing XML empty document: " + e.getMessage(), e);
138 }
139 else {
140 LOG.warn("Failed parsing XML empty document '" + webResponse.getWebRequest().getUrl() + "'", e);
141 }
142 }
143 }
144
145 for (Node node = node_; node != null; node = node.getNextSibling()) {
146 XmlUtils.appendChild(this, this, node, handleXHTMLAsHTML);
147 }
148 }
149
150
151
152
153 @Override
154 public void initialize() throws IOException {
155
156 }
157
158
159
160
161 @Override
162 public boolean hasCaseSensitiveTagNames() {
163 return true;
164 }
165
166
167
168
169
170 public Document getXmlDocument() {
171 if (node_ != null) {
172 return node_.getOwnerDocument();
173 }
174 return null;
175 }
176
177
178
179
180
181 @Override
182 public Node adoptNode(final Node source) {
183 throw new UnsupportedOperationException("XmlPage.adoptNode is not yet implemented.");
184 }
185
186
187
188
189
190 @Override
191 public Attr createAttributeNS(final String namespaceURI, final String qualifiedName) {
192 throw new UnsupportedOperationException("XmlPage.createAttributeNS is not yet implemented.");
193 }
194
195
196
197
198 @Override
199 public DomElement createElement(final String tagName) {
200 return createElementNS(null, tagName);
201 }
202
203
204
205
206 @Override
207 public DomElement createElementNS(final String namespaceURI, final String qualifiedName) {
208 return new DomElement(namespaceURI, qualifiedName, this, new HashMap<>());
209 }
210
211
212
213
214
215 @Override
216 public EntityReference createEntityReference(final String name) {
217 throw new UnsupportedOperationException("XmlPage.createEntityReference is not yet implemented.");
218 }
219
220
221
222
223 @Override
224 public DomProcessingInstruction createProcessingInstruction(final String target, final String data) {
225 return new DomProcessingInstruction(this, target, data);
226 }
227
228
229
230
231
232 @Override
233 public String getDocumentURI() {
234 throw new UnsupportedOperationException("XmlPage.getDocumentURI is not yet implemented.");
235 }
236
237
238
239
240
241 @Override
242 public DOMConfiguration getDomConfig() {
243 throw new UnsupportedOperationException("XmlPage.getDomConfig is not yet implemented.");
244 }
245
246
247
248
249
250 @Override
251 public Element getElementById(final String elementId) {
252 throw new UnsupportedOperationException("XmlPage.getElementById is not yet implemented.");
253 }
254
255
256
257
258
259 @Override
260 public DOMImplementation getImplementation() {
261 throw new UnsupportedOperationException("XmlPage.getImplementation is not yet implemented.");
262 }
263
264
265
266
267
268 @Override
269 public String getInputEncoding() {
270 throw new UnsupportedOperationException("XmlPage.getInputEncoding is not yet implemented.");
271 }
272
273
274
275
276
277 @Override
278 public boolean getStrictErrorChecking() {
279 throw new UnsupportedOperationException("XmlPage.getStrictErrorChecking is not yet implemented.");
280 }
281
282
283
284
285 @Override
286 public String getXmlEncoding() {
287 return null;
288 }
289
290
291
292
293 @Override
294 public boolean getXmlStandalone() {
295 return false;
296 }
297
298
299
300
301 @Override
302 public String getXmlVersion() {
303 return "1.0";
304 }
305
306
307
308
309
310 @Override
311 public Node importNode(final Node importedNode, final boolean deep) {
312 throw new UnsupportedOperationException("XmlPage.importNode is not yet implemented.");
313 }
314
315
316
317
318
319 @Override
320 public Node renameNode(final Node n, final String namespaceURI, final String qualifiedName) {
321 throw new UnsupportedOperationException("XmlPage.renameNode is not yet implemented.");
322 }
323
324
325
326
327
328 @Override
329 public void setDocumentURI(final String documentURI) {
330 throw new UnsupportedOperationException("XmlPage.setDocumentURI is not yet implemented.");
331 }
332
333
334
335
336
337 @Override
338 public void setStrictErrorChecking(final boolean strictErrorChecking) {
339 throw new UnsupportedOperationException("XmlPage.setStrictErrorChecking is not yet implemented.");
340 }
341
342
343
344
345
346 @Override
347 public void setXmlStandalone(final boolean xmlStandalone) {
348 throw new UnsupportedOperationException("XmlPage.setXmlStandalone is not yet implemented.");
349 }
350
351
352
353
354
355 @Override
356 public void setXmlVersion(final String xmlVersion) {
357 throw new UnsupportedOperationException("XmlPage.setXmlVersion is not yet implemented.");
358 }
359
360
361
362
363 @Override
364 public Charset getCharset() {
365 return UTF_8;
366 }
367
368
369
370
371 @Override
372 public String getContentType() {
373 return MimeType.APPLICATION_XML;
374 }
375
376
377
378
379 @Override
380 public void setDocumentType(final DocumentType type) {
381 super.setDocumentType(type);
382 }
383
384
385
386
387 @Override
388 public void setNodeValue(final String value) {
389
390 }
391
392
393
394
395 @Override
396 public void setPrefix(final String prefix) {
397
398 }
399 }