annotate artifacts-common/src/main/java/de/intevation/artifacts/common/utils/XMLUtils.java @ 381:bed51de8ae58

Added JSON parser from Artefact Server NG to bridge from JSON to XML speaking services. artifacts/trunk@4270 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 18 Apr 2012 17:10:10 +0000
parents 6431b7efe240
children 823752e3d392
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
103
1282cf96d3eb Corrected a package definition in the artifacts-common package.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 102
diff changeset
9 package de.intevation.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;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
23 import java.io.IOException;
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
24 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
25 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
26 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
27
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 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
29 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
30
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 import javax.xml.parsers.DocumentBuilderFactory;
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.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
33
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.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
35 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
36 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
37 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
38 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
39
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.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
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.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
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.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
45 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
46 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
47 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
48 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
49
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
50 import org.apache.log4j.Logger;
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
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
52 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
53 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
54 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
55 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
56
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.xml.sax.SAXException;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
58
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 * 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
61 * 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
62 * @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
63 */
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 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
65 {
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
66 /** 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
67 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
68
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
69 /** 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
70 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
71
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
72 /** Logger for this 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
73 private static Logger logger = Logger.getLogger(XMLUtils.class);
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
74
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
75 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
76 }
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
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
78 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
79 * 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
80 * 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
81 */
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 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
83 {
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
84 /** 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
85 protected Document document;
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
86
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
87 /** 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
88 protected String ns;
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
89
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
90 /** 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
91 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
92
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
93 /**
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 * 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
95 * 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
96 * 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
97 * @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
98 * @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
99 * @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
100 */
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 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
102 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
103 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
104 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
105 }
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 /**
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 * 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
109 * 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
110 * @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
111 * @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
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 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
114 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
115 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
116 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
117 }
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 /**
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 * 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
121 * 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
122 * @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
123 * @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
124 * @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
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 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
127 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
128 }
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
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 /**
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 * 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
132 * 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
133 * @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
134 * @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
135 * @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
136 * @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
137 * 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
138 */
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 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
140 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
141 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
142 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
143 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
144 ) {
202
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
145 if (addPrefix) {
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
146 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
147 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
148 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
149
202
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
150 element.setAttributeNode(attr);
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
151 }
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
152 else {
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
153 element.setAttribute(name, value);
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
154 }
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
155 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
156 } // 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
157
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
158 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
159 * 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
160 * @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
161 * 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
162 */
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 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
164 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
165 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
166
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
167 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
168 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
169 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
170 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
171 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
172 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
173 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
174 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
175
335
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
176
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
177 /**
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
178 * 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
179 * document).
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
180 * @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
181 * @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
182 */
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
183 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
184 Document doc = newDocument();
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
185 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
186 return toString(doc);
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
187 }
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
188
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
189
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
190 /**
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
191 * 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
192 * @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
193 * @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
194 * 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
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 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
197 InputStream inputStream = null;
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
198 try {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
199 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
200 return parseDocument(inputStream);
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
201 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
202 catch (IOException ioe) {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
203 logger.error(ioe.getLocalizedMessage(), ioe);
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
204 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
205 finally {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
206 if (inputStream != null) {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
207 try { inputStream.close(); }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
208 catch (IOException ioe) {}
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
209 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
210 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
211 return null;
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
212 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
213
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
214
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
215 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
216 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
217 }
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
218
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
219 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
220 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
221 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
222 ) {
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
223 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
224
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
225 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
226 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
227 }
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
228
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
229 try {
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
230 return factory.newDocumentBuilder().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
231 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
232 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
233 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
234 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
235 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
236 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
237 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
238 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
239 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
240 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
241 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
242 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
243
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
244 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
245 * 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
246 * @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
247 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
248 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
249 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
250 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
251
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
252 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
253 * 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
254 * @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
255 * 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
256 * @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
257 */
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
258 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
259 NamespaceContext namespaceContext,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
260 XPathVariableResolver resolver)
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
261 {
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
262 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
263 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
264 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
265 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
266 }
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
267
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
268 if (resolver != null) {
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
269 xpath.setXPathVariableResolver(resolver);
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
270 }
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
271 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
272 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
273
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
274 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
275 * 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
276 * 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
277 * @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
278 * 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
279 * @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
280 * @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
281 * @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
282 * 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
283 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
284 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
285 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
286 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
287 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
288 ) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
289 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
290 }
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 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
293 * 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
294 * 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
295 * @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
296 * 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
297 * @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
298 * @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
299 * 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
300 * @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
301 * 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
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 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
304 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
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 (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
307 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
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 /**
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 * 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
312 * 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
313 * @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
314 * 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
315 * @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
316 * @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
317 * @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
318 * 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
319 * @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
320 * 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
321 */
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 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
323 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
324 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
325 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
326 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
327 ) {
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
328 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
329 }
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
330
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
331 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
332 Object root,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
333 String query,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
334 QName returnType,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
335 NamespaceContext namespaceContext,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
336 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
337 {
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
338 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
339 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
340 }
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
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
342 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
343 ? new MapXPathVariableResolver(variables)
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
344 : null;
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
345
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
346 try {
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
347 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
348 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
349 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
350 }
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 }
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 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
353 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
354 }
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 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
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
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 /**
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 * 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
361 * @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
362 * @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
363 * @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
364 */
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 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
366 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
367 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
368 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
369 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
370 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
371 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
372 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
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 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
375 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
376 }
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 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
378 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
379 }
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 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
381 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
382 }
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
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 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
385 }
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
386
286
715bdf990739 Made XMLUtils.toString(Document) static.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 276
diff changeset
387 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
388 try {
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
389 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
390 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
391 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
392 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
393 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
394 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
395 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
396 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
397 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
398 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
399 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
400 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
401 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
402 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
403 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
404 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
405 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
406 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
407
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
408 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
409 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
410
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
411 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
412 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
413 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
414
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
415 /**
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
416 * 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
417 * @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
418 * @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
419 * @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
420 * 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
421 */
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
422 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
423 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
424 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
425 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
426 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
427 ? 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
428 : 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
429 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
430 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
431 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
432 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
433 ? 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
434 : 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
435 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
436 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
437 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
438 }
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
439 }
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
440 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
441 }
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
442
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
443 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
444 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
445 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
446
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
447 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
448 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
449 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
450 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
451 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
452 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
453 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
454 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
455 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
456 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
457 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
458 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
459 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
460 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
461 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
462 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
463 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
464 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
465 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
466 }
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
467 }
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
468 return null;
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
469 }
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
470
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
471 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
472 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
473 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
474 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
475 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
476 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
477 }
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
478
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
479 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
480 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
481 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
482 }
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
483 }
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
484 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
485 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
486 }
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
487
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
488 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
489 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
490 }
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
491 } // 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
492
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
493 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
494 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
495 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
496 ) {
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
497 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
498 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
499 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
500 Element element = document.createElement("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
501 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
502 (Map<String, Object>)entry, 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
503 subResult.setAttributes(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
504 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
505 }
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
506 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
507 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
508 BuildResult subResult = recursiveBuild((List)entry, 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
509 subResult.setAttributes(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
510 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
511 }
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
512 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
513 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
514 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
515 "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
516 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
517 }
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
518 }
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
519 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
520 }
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
521
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
522 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
523 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
524 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
525 ) {
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
526 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
527
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
528 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
529 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
530 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
531 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
532 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
533 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
534 (Map<String, Object>)value, 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
535 subResult.setAttributes(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
536 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
537 }
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 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
539 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
540 BuildResult subResult = recursiveBuild((List)value, 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
541 subResult.setAttributes(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
542 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
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 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
545 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
546 }
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 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
549 }
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
550
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
551 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
552 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
553
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
554 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
555 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
556 }
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
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 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
559 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
560 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
561 }
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 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
563 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
564 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
565 }
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
566
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
567 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
568
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
569 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
570
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
571 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
572 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
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 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
575 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
576 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
577 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
578 }
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 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
580 }
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
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 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
583 }
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
584 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
585 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org