annotate artifacts-common/src/main/java/org/dive4elements/artifacts/common/utils/XMLUtils.java @ 570:584591f8203c 3.2.x

Upgrade to Log4j 2
author Tom Gottfried <tom@intevation.de>
date Mon, 28 Feb 2022 17:41:14 +0100
parents e781b847fdca
children
rev   line source
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 /*
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2 * Copyright (c) 2010 by Intevation GmbH
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
3 *
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
4 * This program is free software under the LGPL (>=v2.1)
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
5 * Read the file LGPL.txt coming with the software for details
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
6 * or visit http://www.gnu.org/licenses/ if it does not exist.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
7 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
8
475
415df0fc4fa1 Fixed maven group ids
Sascha L. Teichmann <teichmann@intevation.de>
parents: 472
diff changeset
9 package org.dive4elements.artifacts.common.utils;
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10
381
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
11 import java.util.List;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
12 import java.util.ArrayList;
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
13 import java.util.Map;
381
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
14 import java.util.LinkedHashMap;
234
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
15 import java.util.zip.GZIPInputStream;
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
16 import java.util.zip.GZIPOutputStream;
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
17
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
18 import java.io.ByteArrayInputStream;
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
19 import java.io.FileInputStream;
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
20 import java.io.BufferedInputStream;
135
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
21 import java.io.ByteArrayOutputStream;
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
22 import java.io.File;
546
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
23 import java.io.FileReader;
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24 import java.io.IOException;
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
25 import java.io.InputStream;
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26 import java.io.OutputStream;
276
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
27 import java.io.StringWriter;
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29 import javax.xml.namespace.NamespaceContext;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 import javax.xml.namespace.QName;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32 import javax.xml.parsers.DocumentBuilderFactory;
546
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
33 import javax.xml.parsers.DocumentBuilder;
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34 import javax.xml.parsers.ParserConfigurationException;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
35
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
36 import javax.xml.transform.Transformer;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
37 import javax.xml.transform.TransformerConfigurationException;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
38 import javax.xml.transform.TransformerException;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39 import javax.xml.transform.TransformerFactory;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40 import javax.xml.transform.TransformerFactoryConfigurationError;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42 import javax.xml.transform.dom.DOMSource;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44 import javax.xml.transform.stream.StreamResult;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46 import javax.xml.xpath.XPath;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47 import javax.xml.xpath.XPathConstants;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48 import javax.xml.xpath.XPathExpressionException;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
49 import javax.xml.xpath.XPathFactory;
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
50 import javax.xml.xpath.XPathVariableResolver;
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
51
570
584591f8203c Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 549
diff changeset
52 import org.apache.logging.log4j.Logger;
584591f8203c Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 549
diff changeset
53 import org.apache.logging.log4j.LogManager;
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
54
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
55 import org.w3c.dom.Attr;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
56 import org.w3c.dom.Document;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
57 import org.w3c.dom.Element;
335
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
58 import org.w3c.dom.Node;
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
59
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
60 import org.xml.sax.SAXException;
546
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
61 import org.xml.sax.EntityResolver;
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
62 import org.xml.sax.InputSource;
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
63
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
64
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
66 * Some helper functions to ease work with XML concering namespaces, XPATH
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
67 * and so on.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
68 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a>
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
69 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
70 public final class XMLUtils
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
71 {
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
72 /** W3C URL of XForms. */
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
73 public static final String XFORM_URL = "http://www.w3.org/2002/xforms";
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
74
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
75 /** W3C prefix of XForms. */
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
76 public static final String XFORM_PREFIX = "xform";
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
77
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
78 /** Logger for this class. */
570
584591f8203c Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 549
diff changeset
79 private static Logger logger = LogManager.getLogger(XMLUtils.class);
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
80
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
81 private XMLUtils() {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
82 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
83
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
84 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
85 * Helper class to generate elements and attributes with
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
86 * namespaces.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
87 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
88 public static class ElementCreator
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
89 {
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
90 /** Owner document of the elements to be created. */
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
91 protected Document document;
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
92
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
93 /** Namespace to be used. */
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
94 protected String ns;
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
95
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
96 /** Prefix to be used. */
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
97 protected String prefix;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
98
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
99 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
100 * Constructor to create an element/attribute creator
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
101 * with a given namespace and namespace prefix using a
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
102 * given owner document.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
103 * @param document The owning document
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
104 * @param ns The namespace
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
105 * @param prefix The namespace prefix
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
106 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
107 public ElementCreator(Document document, String ns, String prefix) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
108 this.document = document;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
109 this.ns = ns;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
110 this.prefix = prefix;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
111 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
112
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
113 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
114 * Creates a new element using the owning document with
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
115 * the this creators namespace and namespace prefix.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
116 * @param name The name of the element
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
117 * @return The new element
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
118 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
119 public Element create(String name) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
120 Element element = document.createElementNS(ns, name);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
121 element.setPrefix(prefix);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
122 return element;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
123 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
124
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
125 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
126 * Adds a new attribute and its value to a given element.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
127 * It does not set the namespace prefix.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
128 * @param element The element to add the attribute to
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
129 * @param name The name of the attribute
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
130 * @param value The value of the attribute
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
131 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
132 public void addAttr(Element element, String name, String value) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
133 addAttr(element, name, value, false);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
134 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
135
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
136 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
137 * Adds a new attribute and its value to a given element.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
138 * If the namespace prefix is used is decided by the 'addPrefix' flag.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
139 * @param element The element to add the attribute to
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
140 * @param name The name of the attribute
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
141 * @param value The value of the attribute
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
142 * @param addPrefix If true the creators namespace prefix is
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
143 * set on the attribute.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
144 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
145 public void addAttr(
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
146 Element element,
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
147 String name,
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
148 String value,
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
149 boolean addPrefix
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
150 ) {
202
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
151 if (addPrefix) {
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
152 Attr attr = document.createAttributeNS(ns, name);
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
153 attr.setValue(value);
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
154 attr.setPrefix(prefix);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
155
202
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
156 element.setAttributeNode(attr);
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
157 }
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
158 else {
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
159 element.setAttribute(name, value);
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
160 }
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
161 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
162 } // class ElementCreator
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
163
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
164 /**
546
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
165 * Resolver for entities in artifacts configuration.
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
166 */
549
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
167 public static final EntityResolver CONF_RESOLVER = new EntityResolver() {
546
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
168 @Override
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
169 public InputSource resolveEntity(
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
170 String publicId,
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
171 String systemId
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
172 ) throws SAXException, IOException {
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
173 return new InputSource(
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
174 new FileReader(Config.replaceConfigDir(systemId)));
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
175 }
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
176 };
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
177
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
178
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
179 /**
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
180 * Creates a new XML document
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
181 * @return the new XML document ot null if something went wrong during
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
182 * creation.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
183 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
184 public static final Document newDocument() {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
185 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
186 factory.setNamespaceAware(true);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
187
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
188 try {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
189 return factory.newDocumentBuilder().newDocument();
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
190 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
191 catch (ParserConfigurationException pce) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
192 logger.error(pce.getLocalizedMessage(), pce);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
193 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
194 return null;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
195 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
196
335
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
197
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
198 /**
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
199 * Create xml/string representation of element (nested in otherwise empty
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
200 * document).
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
201 * @param element element to inspect in string.
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
202 * @return string with xml representation of element.
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
203 */
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
204 public final static String toString(Node node) {
335
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
205 Document doc = newDocument();
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
206 doc.appendChild(doc.importNode(node,true));
335
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
207 return toString(doc);
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
208 }
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
209
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
210
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
211 /**
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
212 * Loads a XML document namespace aware from a file
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
213 * @param file The file to load.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
214 * @return the XML document or null if something went wrong
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
215 * during loading.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
216 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
217 public static final Document parseDocument(File file) {
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
218 InputStream inputStream = null;
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
219 try {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
220 inputStream = new BufferedInputStream(new FileInputStream(file));
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
221 return parseDocument(inputStream);
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
222 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
223 catch (IOException ioe) {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
224 logger.error(ioe.getLocalizedMessage(), ioe);
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
225 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
226 finally {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
227 if (inputStream != null) {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
228 try { inputStream.close(); }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
229 catch (IOException ioe) {}
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
230 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
231 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
232 return null;
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
233 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
234
387
111d4e28c45e Added method to create a document from string to XMLUtils.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 384
diff changeset
235 /**
111d4e28c45e Added method to create a document from string to XMLUtils.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 384
diff changeset
236 * Parses a String to a xml document.
111d4e28c45e Added method to create a document from string to XMLUtils.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 384
diff changeset
237 *
111d4e28c45e Added method to create a document from string to XMLUtils.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 384
diff changeset
238 * @param string The xml string
111d4e28c45e Added method to create a document from string to XMLUtils.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 384
diff changeset
239 * @return the XML document or null if something went wrong.
111d4e28c45e Added method to create a document from string to XMLUtils.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 384
diff changeset
240 */
111d4e28c45e Added method to create a document from string to XMLUtils.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 384
diff changeset
241 public static final Document parseDocument(String string) {
111d4e28c45e Added method to create a document from string to XMLUtils.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 384
diff changeset
242 InputStream inputStream = new ByteArrayInputStream(string.getBytes());
111d4e28c45e Added method to create a document from string to XMLUtils.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 384
diff changeset
243 return parseDocument(inputStream);
111d4e28c45e Added method to create a document from string to XMLUtils.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 384
diff changeset
244 }
111d4e28c45e Added method to create a document from string to XMLUtils.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 384
diff changeset
245
349
b3eb029e07dd Added a method that allows to specify if a document needs to be namespace aware while parsing from InputStream.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 338
diff changeset
246
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
247 public static final Document parseDocument(InputStream inputStream) {
350
ab743e750ac6 Changed namespace awareness in XML parsing to use no auto-boxing. Fixed a stranged compilation bug with OpenJDK.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 349
diff changeset
248 return parseDocument(inputStream, Boolean.TRUE);
349
b3eb029e07dd Added a method that allows to specify if a document needs to be namespace aware while parsing from InputStream.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 338
diff changeset
249 }
b3eb029e07dd Added a method that allows to specify if a document needs to be namespace aware while parsing from InputStream.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 338
diff changeset
250
350
ab743e750ac6 Changed namespace awareness in XML parsing to use no auto-boxing. Fixed a stranged compilation bug with OpenJDK.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 349
diff changeset
251 public static final Document parseDocument(
ab743e750ac6 Changed namespace awareness in XML parsing to use no auto-boxing. Fixed a stranged compilation bug with OpenJDK.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 349
diff changeset
252 InputStream inputStream,
ab743e750ac6 Changed namespace awareness in XML parsing to use no auto-boxing. Fixed a stranged compilation bug with OpenJDK.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 349
diff changeset
253 Boolean namespaceAware
ab743e750ac6 Changed namespace awareness in XML parsing to use no auto-boxing. Fixed a stranged compilation bug with OpenJDK.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 349
diff changeset
254 ) {
546
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
255 return parseDocument(
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
256 inputStream, namespaceAware, CONF_RESOLVER);
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
257 }
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
258
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
259 public static final Document parseDocument(
549
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
260 File file,
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
261 Boolean namespaceAware,
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
262 EntityResolver entityResolver
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
263 ) {
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
264 InputStream inputStream = null;
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
265 try {
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
266 inputStream = new BufferedInputStream(new FileInputStream(file));
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
267 return parseDocument(inputStream, namespaceAware, entityResolver);
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
268 }
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
269 catch (IOException ioe) {
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
270 logger.error(ioe.getLocalizedMessage(), ioe);
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
271 }
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
272 finally {
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
273 if (inputStream != null) {
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
274 try { inputStream.close(); }
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
275 catch (IOException ioe) {}
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
276 }
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
277 }
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
278 return null;
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
279 }
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
280
e781b847fdca Added new File/NS-aware/Entity-Resolver signature for XMLUtils.parseDocument.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 546
diff changeset
281 public static final Document parseDocument(
546
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
282 InputStream inputStream,
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
283 Boolean namespaceAware,
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
284 EntityResolver entityResolver
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
285 ) {
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
286 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
349
b3eb029e07dd Added a method that allows to specify if a document needs to be namespace aware while parsing from InputStream.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 338
diff changeset
287
b3eb029e07dd Added a method that allows to specify if a document needs to be namespace aware while parsing from InputStream.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 338
diff changeset
288 if (namespaceAware != null) {
350
ab743e750ac6 Changed namespace awareness in XML parsing to use no auto-boxing. Fixed a stranged compilation bug with OpenJDK.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 349
diff changeset
289 factory.setNamespaceAware(namespaceAware.booleanValue());
349
b3eb029e07dd Added a method that allows to specify if a document needs to be namespace aware while parsing from InputStream.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 338
diff changeset
290 }
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
291
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
292 try {
546
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
293 DocumentBuilder builder = factory.newDocumentBuilder();
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
294 builder.setEntityResolver(entityResolver);
f099f0b22e62 Resolve entities in artifacts configuration.
Tom Gottfried <tom@intevation.de>
parents: 475
diff changeset
295 return builder.parse(inputStream);
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
296 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
297 catch (ParserConfigurationException pce) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
298 logger.error(pce.getLocalizedMessage(), pce);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
299 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
300 catch (SAXException se) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
301 logger.error(se.getLocalizedMessage(), se);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
302 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
303 catch (IOException ioe) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
304 logger.error(ioe.getLocalizedMessage(), ioe);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
305 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
306 return null;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
307 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
308
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
309 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
310 * Creates a new XPath without a namespace context.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
311 * @return the new XPath.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
312 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
313 public static final XPath newXPath() {
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
314 return newXPath(null, null);
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
315 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
316
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
317 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
318 * Creates a new XPath with a given namespace context.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
319 * @param namespaceContext The namespace context to be used or null
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
320 * if none should be used.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
321 * @return The new XPath
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
322 */
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
323 public static final XPath newXPath(
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
324 NamespaceContext namespaceContext,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
325 XPathVariableResolver resolver)
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
326 {
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
327 XPathFactory factory = XPathFactory.newInstance();
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
328 XPath xpath = factory.newXPath();
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
329 if (namespaceContext != null) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
330 xpath.setNamespaceContext(namespaceContext);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
331 }
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
332
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
333 if (resolver != null) {
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
334 xpath.setXPathVariableResolver(resolver);
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
335 }
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
336 return xpath;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
337 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
338
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
339 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
340 * Evaluates an XPath query on a given object and returns the result
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
341 * as a given type. No namespace context is used.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
342 * @param root The object which is used as the root of the tree to
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
343 * be searched in.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
344 * @param query The XPath query
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
345 * @param returnTyp The type of the result.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
346 * @return The result of type 'returnTyp' or null if something
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
347 * went wrong during XPath evaluation.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
348 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
349 public static final Object xpath(
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
350 Object root,
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
351 String query,
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
352 QName returnTyp
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
353 ) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
354 return xpath(root, query, returnTyp, null);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
355 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
356
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
357 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
358 * Evaluates an XPath query on a given object and returns the result
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
359 * as a string. A given namespace context is used.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
360 * @param root The object which is used as the root of the tree to
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
361 * be searched in.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
362 * @param query The XPath query
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
363 * @param namespaceContext The namespace context to be used or null
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
364 * if none should be used.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
365 * @return The result of the query or null if something went wrong
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
366 * during XPath evaluation.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
367 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
368 public static final String xpathString(
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
369 Object root, String query, NamespaceContext namespaceContext
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
370 ) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
371 return (String)xpath(
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
372 root, query, XPathConstants.STRING, namespaceContext);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
373 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
374
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
375 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
376 * Evaluates an XPath query on a given object and returns the result
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
377 * as a given type. Optionally a namespace context is used.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
378 * @param root The object which is used as the root of the tree to
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
379 * be searched in.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
380 * @param query The XPath query
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
381 * @param returnType The type of the result.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
382 * @param namespaceContext The namespace context to be used or null
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
383 * if none should be used.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
384 * @return The result of type 'returnTyp' or null if something
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
385 * went wrong during XPath evaluation.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
386 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
387 public static final Object xpath(
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
388 Object root,
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
389 String query,
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
390 QName returnType,
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
391 NamespaceContext namespaceContext
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
392 ) {
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
393 return xpath(root, query, returnType, namespaceContext, null);
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
394 }
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
395
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
396 public static final Object xpath(
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
397 Object root,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
398 String query,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
399 QName returnType,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
400 NamespaceContext namespaceContext,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
401 Map<String, String> variables)
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
402 {
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
403 if (root == null) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
404 return null;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
405 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
406
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
407 XPathVariableResolver resolver = variables != null
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
408 ? new MapXPathVariableResolver(variables)
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
409 : null;
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
410
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
411 try {
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
412 XPath xpath = newXPath(namespaceContext, resolver);
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
413 if (xpath != null) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
414 return xpath.evaluate(query, root, returnType);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
415 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
416 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
417 catch (XPathExpressionException xpee) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
418 logger.error(xpee.getLocalizedMessage(), xpee);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
419 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
420
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
421 return null;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
422 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
423
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
424 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
425 * Streams out an XML document to a given output stream.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
426 * @param document The document to be streamed out.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
427 * @param out The output stream to be used.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
428 * @return true if operation succeeded else false.
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
429 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
430 public static boolean toStream(Document document, OutputStream out) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
431 try {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
432 Transformer transformer =
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
433 TransformerFactory.newInstance().newTransformer();
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
434 DOMSource source = new DOMSource(document);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
435 StreamResult result = new StreamResult(out);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
436 transformer.transform(source, result);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
437 return true;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
438 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
439 catch (TransformerConfigurationException tce) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
440 logger.error(tce.getLocalizedMessage(), tce);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
441 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
442 catch (TransformerFactoryConfigurationError tfce) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
443 logger.error(tfce.getLocalizedMessage(), tfce);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
444 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
445 catch (TransformerException te) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
446 logger.error(te.getLocalizedMessage(), te);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
447 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
448
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
449 return false;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
450 }
135
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
451
286
715bdf990739 Made XMLUtils.toString(Document) static.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 276
diff changeset
452 public static String toString(Document document) {
276
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
453 try {
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
454 Transformer transformer =
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
455 TransformerFactory.newInstance().newTransformer();
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
456 DOMSource source = new DOMSource(document);
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
457 StringWriter out = new StringWriter();
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
458 StreamResult result = new StreamResult(out);
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
459 transformer.transform(source, result);
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
460 out.flush();
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
461 return out.toString();
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
462 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
463 catch (TransformerConfigurationException tce) {
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
464 logger.error(tce.getLocalizedMessage(), tce);
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
465 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
466 catch (TransformerFactoryConfigurationError tfce) {
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
467 logger.error(tfce.getLocalizedMessage(), tfce);
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
468 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
469 catch (TransformerException te) {
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
470 logger.error(te.getLocalizedMessage(), te);
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
471 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
472
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
473 return null;
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
474 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
475
234
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
476 public static byte [] toByteArray(Document document) {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
477 return toByteArray(document, false);
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
478 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
479
135
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
480 /**
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
481 * Transforms an XML document into a byte array.
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
482 * @param document The document to be streamed out.
234
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
483 * @param compress The document should be compressed, too.
135
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
484 * @return the byte array or null if operation failed or
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
485 * document is null.
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
486 */
234
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
487 public static byte [] toByteArray(Document document, boolean compress) {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
488 if (document != null) {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
489 try {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
490 ByteArrayOutputStream baos = new ByteArrayOutputStream();
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
491 OutputStream out = compress
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
492 ? new GZIPOutputStream(baos)
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
493 : baos;
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
494 boolean success = toStream(document, out);
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
495 out.flush();
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
496 out.close();
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
497 return success
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
498 ? baos.toByteArray()
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
499 : null;
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
500 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
501 catch (IOException ioe) {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
502 logger.error(ioe);
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
503 }
135
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
504 }
234
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
505 return null;
135
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
506 }
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
507
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
508 public static Document fromByteArray(byte [] data) {
234
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
509 return fromByteArray(data, false);
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
510 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
511
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
512 public static Document fromByteArray(byte [] data, boolean decompress) {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
513 if (data != null) {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
514 InputStream in = new ByteArrayInputStream(data);
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
515 try {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
516 if (decompress) {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
517 in = new GZIPInputStream(in);
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
518 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
519 return parseDocument(in);
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
520 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
521 catch (IOException ioe) {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
522 logger.error(ioe);
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
523 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
524 finally {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
525 try {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
526 in.close();
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
527 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
528 catch (IOException ioe) {
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
529 logger.error(ioe);
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
530 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
531 }
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
532 }
234
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
533 return null;
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
534 }
381
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
535
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
536 private static class BuildResult {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
537 List<Node> children;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
538 Map<String, String> attributes;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
539 BuildResult() {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
540 children = new ArrayList<Node>();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
541 attributes = new LinkedHashMap<String, String>();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
542 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
543
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
544 void setAttributes(Element element) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
545 for (Map.Entry<String, String> entry: attributes.entrySet()) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
546 element.setAttribute(entry.getKey(), entry.getValue());
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
547 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
548 }
384
823752e3d392 Fixed building XML documents from JSON strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 381
diff changeset
549
823752e3d392 Fixed building XML documents from JSON strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 381
diff changeset
550 void finish(Element element) {
823752e3d392 Fixed building XML documents from JSON strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 381
diff changeset
551 setAttributes(element);
823752e3d392 Fixed building XML documents from JSON strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 381
diff changeset
552 for (Node child: children) {
823752e3d392 Fixed building XML documents from JSON strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 381
diff changeset
553 element.appendChild(child);
823752e3d392 Fixed building XML documents from JSON strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 381
diff changeset
554 }
823752e3d392 Fixed building XML documents from JSON strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 381
diff changeset
555 }
823752e3d392 Fixed building XML documents from JSON strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 381
diff changeset
556
381
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
557 void add(Node node) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
558 children.add(node);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
559 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
560
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
561 void add(String key, Object value) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
562 attributes.put(key, value != null ? value.toString() : "null");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
563 }
392
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
564
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
565 int numChildren() {
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
566 return children.size();
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
567 }
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
568
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
569 Node firstChild() {
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
570 return children.get(0);
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
571 }
381
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
572 } // class BuildResult
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
573
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
574 private static BuildResult recursiveBuild(
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
575 List list,
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
576 Document document
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
577 ) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
578 BuildResult result = new BuildResult();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
579 for (Object entry: list) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
580 if (entry instanceof Map) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
581 BuildResult subResult = recursiveBuild(
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
582 (Map<String, Object>)entry, document);
392
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
583 if (subResult.numChildren() == 1) {
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
584 result.add(subResult.firstChild());
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
585 }
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
586 else {
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
587 Element element = document.createElement("map");
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
588 subResult.finish(element);
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
589 result.add(element);
cdc8b7c64856 JSON2XML: Remove extra <map></map> from the XML generated by JSON lists containing only
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 387
diff changeset
590 }
381
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
591 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
592 else if (entry instanceof List) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
593 Element element = document.createElement("list");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
594 BuildResult subResult = recursiveBuild((List)entry, document);
384
823752e3d392 Fixed building XML documents from JSON strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 381
diff changeset
595 subResult.finish(element);
381
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
596 result.add(element);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
597 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
598 else {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
599 Element element = document.createElement("entry");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
600 element.setAttribute(
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
601 "value",
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
602 entry != null ? entry.toString() : "null");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
603 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
604 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
605 return result;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
606 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
607
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
608 private static BuildResult recursiveBuild(
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
609 Map<String, Object> map,
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
610 Document document
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
611 ) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
612 BuildResult result = new BuildResult();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
613
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
614 List<Node> nodes = new ArrayList<Node>();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
615 for (Map.Entry<String, Object> entry: map.entrySet()) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
616 Object value = entry.getValue();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
617 if (value instanceof Map) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
618 Element element = document.createElement(entry.getKey());
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
619 BuildResult subResult = recursiveBuild(
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
620 (Map<String, Object>)value, document);
384
823752e3d392 Fixed building XML documents from JSON strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 381
diff changeset
621 subResult.finish(element);
381
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
622 result.add(element);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
623 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
624 else if (value instanceof List) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
625 Element element = document.createElement(entry.getKey());
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
626 BuildResult subResult = recursiveBuild((List)value, document);
384
823752e3d392 Fixed building XML documents from JSON strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 381
diff changeset
627 subResult.finish(element);
381
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
628 result.add(element);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
629 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
630 else {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
631 result.add(entry.getKey(), value);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
632 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
633 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
634 return result;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
635 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
636
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
637 public static Document jsonToXML(String input) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
638 Document document = newDocument();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
639
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
640 if (document == null) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
641 return null;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
642 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
643
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
644 Map<String, Object> map;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
645 try {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
646 map = JSON.parse(input);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
647 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
648 catch (IOException ioe) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
649 logger.error(ioe);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
650 return null;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
651 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
652
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
653 BuildResult roots = recursiveBuild(map, document);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
654
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
655 int N = roots.children.size();
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
656
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
657 if (N == 1) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
658 document.appendChild(roots.children.get(0));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
659 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
660 else if (N > 1) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
661 Node root = document.createElement("root");
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
662 for (int i = 0; i < N; ++i) {
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
663 root.appendChild(roots.children.get(i));
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
664 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
665 document.appendChild(root);
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
666 }
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
667
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
668 return document;
bed51de8ae58 Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 367
diff changeset
669 }
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
670 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
671 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org