annotate artifacts-common/src/main/java/de/intevation/artifacts/common/utils/XMLUtils.java @ 350:ab743e750ac6

Changed namespace awareness in XML parsing to use no auto-boxing. Fixed a stranged compilation bug with OpenJDK. artifacts/trunk@3311 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 23 Nov 2011 17:17:39 +0000
parents b3eb029e07dd
children 6431b7efe240
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
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
11 import java.util.Map;
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
12 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
13 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
14
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
15 import java.io.ByteArrayInputStream;
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
16 import java.io.FileInputStream;
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
17 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
18 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
19 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
20 import java.io.IOException;
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
21 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
22 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
23 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
24
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 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
26 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
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.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
29 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
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.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
32 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
33 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
34 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
35 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
36
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.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
38
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39 import javax.xml.transform.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
40
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 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
42 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
43 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
44 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
45 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
46
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 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
48
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
49 import 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
50 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
51 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
52 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
53
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.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
55
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 * 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
58 * 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
59 * @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
60 */
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 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
62 {
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
63 /** 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
64 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
65
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
66 /** 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
67 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
68
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
69 /** 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
70 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
71
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
72 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
73 }
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 /**
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 * 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
77 * 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
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 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
80 {
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
81 /** 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
82 protected Document document;
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
83
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
84 /** 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
85 protected String ns;
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 /** 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
88 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
89
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
90 /**
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 * 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
92 * 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
93 * 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
94 * @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
95 * @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
96 * @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
97 */
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 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
99 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
100 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
101 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
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
103
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 /**
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 * 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
106 * 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
107 * @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
108 * @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
109 */
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 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
111 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
112 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
113 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
114 }
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
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 /**
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 * 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
118 * 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
119 * @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
120 * @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
121 * @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
122 */
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 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
124 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
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
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 /**
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 * 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
129 * 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
130 * @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
131 * @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
132 * @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
133 * @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
134 * 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
135 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
136 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
137 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
138 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
139 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
140 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
141 ) {
202
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
142 if (addPrefix) {
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
143 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
144 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
145 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
146
202
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
147 element.setAttributeNode(attr);
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
148 }
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
149 else {
c03d3a872cd2 Fixed a bug in the ElementCreator of the XMLUtils.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 147
diff changeset
150 element.setAttribute(name, value);
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
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
153 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
154 } // 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
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 /**
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 * 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
158 * @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
159 * 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
160 */
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 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
162 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
163 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
164
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 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
166 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
167 }
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 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
169 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
170 }
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 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
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
335
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
174
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
175 /**
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
176 * 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
177 * document).
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
178 * @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
179 * @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
180 */
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
181 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
182 Document doc = newDocument();
338
ec5c7e54cae1 Cosmetics (and fix for XMLUtils.toString(Element)).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 336
diff changeset
183 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
184 return toString(doc);
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
185 }
e7d3f74854fb Added XMLUtils functions helping to debug parts of xml documents.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 323
diff changeset
186
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 /**
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
189 * 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
190 * @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
191 * @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
192 * 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
193 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
194 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
195 InputStream inputStream = null;
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
196 try {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
197 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
198 return parseDocument(inputStream);
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
199 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
200 catch (IOException ioe) {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
201 logger.error(ioe.getLocalizedMessage(), ioe);
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
202 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
203 finally {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
204 if (inputStream != null) {
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
205 try { inputStream.close(); }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
206 catch (IOException ioe) {}
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
207 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
208 }
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
209 return null;
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
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
212
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
213 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
214 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
215 }
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
216
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
217 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
218 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
219 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
220 ) {
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
221 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
222
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
223 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
224 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
225 }
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
226
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
227 try {
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
228 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
229 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
230 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
231 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
232 }
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 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
234 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
235 }
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 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
237 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
238 }
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 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
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
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 * 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
244 * @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
245 */
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 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
247 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
248 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
249
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 * 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
252 * @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
253 * 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
254 * @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
255 */
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
256 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
257 NamespaceContext namespaceContext,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
258 XPathVariableResolver resolver)
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
259 {
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
260 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
261 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
262 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
263 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
264 }
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
265
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
266 if (resolver != null) {
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
267 xpath.setXPathVariableResolver(resolver);
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
268 }
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
269 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
270 }
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
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 * 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
274 * 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
275 * @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
276 * 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
277 * @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
278 * @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
279 * @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
280 * 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
281 */
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 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
283 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
284 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
285 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
286 ) {
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 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
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
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 * 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
292 * 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
293 * @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
294 * 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
295 * @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
296 * @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
297 * 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
298 * @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
299 * 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
300 */
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 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
302 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
303 ) {
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 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
305 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
306 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
307
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
308 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
309 * 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
310 * 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
311 * @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
312 * 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
313 * @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
314 * @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
315 * @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
316 * 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
317 * @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
318 * 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
319 */
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 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
321 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
322 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
323 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
324 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
325 ) {
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
326 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
327 }
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
328
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
329 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
330 Object root,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
331 String query,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
332 QName returnType,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
333 NamespaceContext namespaceContext,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
334 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
335 {
102
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
336 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
337 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
338 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
339
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
340 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
341 ? new MapXPathVariableResolver(variables)
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
342 : null;
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
343
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
344 try {
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
345 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
346 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
347 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
348 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
349 }
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 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
351 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
352 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
353
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
354 return null;
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
355 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
356
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
357 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
358 * 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
359 * @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
360 * @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
361 * @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
362 */
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 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
364 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
365 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
366 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
367 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
368 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
369 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
370 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
371 }
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 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
373 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
374 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
375 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
376 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
377 }
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 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
379 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
380 }
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
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 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
383 }
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
384
286
715bdf990739 Made XMLUtils.toString(Document) static.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 276
diff changeset
385 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
386 try {
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
387 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
388 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
389 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
390 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
391 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
392 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
393 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
394 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
395 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
396 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
397 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
398 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
399 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
400 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
401 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
402 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
403 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
404 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
405
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
406 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
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
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
409 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
410 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
411 }
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
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
413 /**
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
414 * 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
415 * @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
416 * @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
417 * @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
418 * 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
419 */
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
420 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
421 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
422 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
423 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
424 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
425 ? 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
426 : 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
427 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
428 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
429 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
430 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
431 ? 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
432 : 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
433 }
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 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
435 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
436 }
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
437 }
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
438 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
439 }
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
440
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
441 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
442 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
443 }
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
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 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
446 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
447 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
448 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
449 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
450 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
451 }
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 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
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 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
455 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
456 }
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 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
458 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
459 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
460 }
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 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
462 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
463 }
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 }
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
465 }
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
466 return null;
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
467 }
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
468 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
469 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org