annotate artifacts-common/src/main/java/de/intevation/artifacts/common/utils/XMLUtils.java @ 338:ec5c7e54cae1

Cosmetics (and fix for XMLUtils.toString(Element)). artifacts/trunk@2913 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Mon, 10 Oct 2011 07:37:06 +0000
parents 2c968defd878
children b3eb029e07dd
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
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
212 public static final Document parseDocument(InputStream 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
213 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
214 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
215
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
216 try {
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
217 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
218 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
219 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
220 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
221 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
222 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
223 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
224 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
225 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
226 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
227 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
228 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
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
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
231 /**
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
232 * 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
233 * @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
234 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
235 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
236 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
237 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
238
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 /**
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 * 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
241 * @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
242 * 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
243 * @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
244 */
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
245 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
246 NamespaceContext namespaceContext,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
247 XPathVariableResolver resolver)
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
248 {
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
249 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
250 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
251 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
252 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
253 }
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
254
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
255 if (resolver != null) {
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
256 xpath.setXPathVariableResolver(resolver);
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
257 }
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
258 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
259 }
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
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 /**
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 * 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
263 * 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
264 * @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
265 * 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
266 * @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
267 * @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
268 * @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
269 * 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
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 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
272 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
273 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
274 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
275 ) {
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 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
277 }
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
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 /**
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 * 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
281 * 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
282 * @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
283 * 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
284 * @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
285 * @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
286 * 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
287 * @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
288 * 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
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 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
291 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
292 ) {
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
293 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
294 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
295 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
296
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
297 /**
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 * 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
299 * 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
300 * @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
301 * 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
302 * @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
303 * @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
304 * @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
305 * 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
306 * @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
307 * 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
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 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
310 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
311 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
312 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
313 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
314 ) {
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
315 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
316 }
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
317
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
318 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
319 Object root,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
320 String query,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
321 QName returnType,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
322 NamespaceContext namespaceContext,
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
323 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
324 {
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
325 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
326 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
327 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
328
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
329 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
330 ? new MapXPathVariableResolver(variables)
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
331 : null;
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
332
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
333 try {
323
1d3607ceb9fa Improved the XMLUtils to support xpath expressions that contain variables.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 286
diff changeset
334 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
335 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
336 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
337 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
338 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
339 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
340 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
341 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
342
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
343 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
344 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
345
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 /**
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 * 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
348 * @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
349 * @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
350 * @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
351 */
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
352 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
353 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
354 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
355 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
356 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
357 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
358 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
359 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
360 }
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 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
362 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
363 }
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 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
365 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
366 }
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 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
368 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
369 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
370
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
371 return 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
372 }
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
373
286
715bdf990739 Made XMLUtils.toString(Document) static.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 276
diff changeset
374 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
375 try {
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
376 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
377 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
378 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
379 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
380 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
381 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
382 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
383 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
384 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
385 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
386 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
387 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
388 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
389 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
390 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
391 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
392 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
393 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
394
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
395 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
396 }
8b58259d3dd3 Added static toString(Document) method which transform XML documents to Strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 234
diff changeset
397
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
398 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
399 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
400 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
401
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
402 /**
a48882c9e096 Added a convinience method to transform an document into a byte array.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 103
diff changeset
403 * 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
404 * @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
405 * @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
406 * @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
407 * 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
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, 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
410 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
411 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
412 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
413 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
414 ? 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
415 : 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
416 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
417 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
418 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
419 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
420 ? 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
421 : 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 }
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 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
424 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
425 }
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
426 }
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
427 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
428 }
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
429
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
430 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
431 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
432 }
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 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
435 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
436 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
437 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
438 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
439 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
440 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
441 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
442 }
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 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
444 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
445 }
23d642319a0b Added a boolean flag to XML byte serialisation to compress/decompress, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 202
diff changeset
446 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
447 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
448 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
449 }
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 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
451 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
452 }
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 }
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
454 }
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
455 return null;
147
9a64e0c1c737 Added code to load user from database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 135
diff changeset
456 }
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
457 }
4122dbc9711b Added a new package artifacts-common for classes and utilities used in several packages.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
458 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org