[New] Added XmlHelper
This commit is contained in:
parent
5fcea2bb77
commit
81a76a5fe0
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 2012, Robert von Burg
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* This file is part of the XXX.
|
||||
*
|
||||
* XXX is free software: you can redistribute
|
||||
* it and/or modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the License,
|
||||
* or (at your option) any later version.
|
||||
*
|
||||
* XXX is distributed in the hope that it will
|
||||
* be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with XXX. If not, see
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package ch.eitchnet.utils.exceptions;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
*/
|
||||
public class XmlException extends RuntimeException {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* @param message
|
||||
*/
|
||||
public XmlException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param message
|
||||
* @param cause
|
||||
*/
|
||||
public XmlException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,175 @@
|
|||
/*
|
||||
* Copyright (c) 2010 - 2012
|
||||
*
|
||||
* This file is part of ch.eitchnet.java.utils.
|
||||
*
|
||||
* ch.eitchnet.java.utils is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* ch.eitchnet.java.utils is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with ch.eitchnet.java.utils. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package ch.eitchnet.utils.helper;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import javax.xml.parsers.SAXParser;
|
||||
import javax.xml.parsers.SAXParserFactory;
|
||||
import javax.xml.transform.OutputKeys;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.w3c.dom.DOMException;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.xml.sax.SAXException;
|
||||
import org.xml.sax.helpers.DefaultHandler;
|
||||
|
||||
import ch.eitchnet.utils.exceptions.XmlException;
|
||||
|
||||
/**
|
||||
* Helper class for performing XML based tasks using Dom4J
|
||||
*
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
public class XmlHelper {
|
||||
|
||||
/**
|
||||
* DEFAULT_ENCODING = "UTF-8" : defines the default UTF-8 encoding expected of XML files
|
||||
*/
|
||||
public static final String DEFAULT_ENCODING = "UTF-8";
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(XmlHelper.class);
|
||||
|
||||
/**
|
||||
* Parses an XML file on the file system using dom4j and returns the resulting {@link Document} object
|
||||
*
|
||||
* @param xmlFile
|
||||
* the {@link File} which has the path to the XML file to read
|
||||
*
|
||||
* @return a {@link Document} object containing the dom4j {@link Element}s of the XML file
|
||||
*/
|
||||
public static void parseDocument(File xmlFile, DefaultHandler xmlHandler) {
|
||||
|
||||
try {
|
||||
|
||||
SAXParserFactory spf = SAXParserFactory.newInstance();
|
||||
|
||||
SAXParser sp = spf.newSAXParser();
|
||||
XmlHelper.logger.info("Parsing XML document " + xmlFile.getAbsolutePath());
|
||||
sp.parse(xmlFile, xmlHandler);
|
||||
|
||||
} catch (ParserConfigurationException e) {
|
||||
throw new XmlException("Failed to initialize a SAX Parser: " + e.getLocalizedMessage(), e);
|
||||
} catch (SAXException e) {
|
||||
throw new XmlException("The XML file " + xmlFile.getAbsolutePath() + " is not parseable:", e);
|
||||
} catch (IOException e) {
|
||||
throw new XmlException("The XML could not be read: " + xmlFile.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a dom4j {@link Document} to an XML file on the file system
|
||||
*
|
||||
* @param document
|
||||
* the {@link Document} to write to the file system
|
||||
* @param file
|
||||
* the {@link File} describing the path on the file system where the XML file should be written to
|
||||
*
|
||||
* @throws RuntimeException
|
||||
* if something went wrong while creating the XML configuration, or writing the element
|
||||
*/
|
||||
public static void writeDocument(Document document, File file) throws RuntimeException {
|
||||
|
||||
XmlHelper.logger.info("Exporting document element " + document.getNodeName() + " to " + file.getAbsolutePath());
|
||||
|
||||
try {
|
||||
|
||||
String encoding = document.getInputEncoding();
|
||||
if (encoding == null || encoding.isEmpty()) {
|
||||
encoding = XmlHelper.DEFAULT_ENCODING;
|
||||
}
|
||||
|
||||
// Set up a transformer
|
||||
TransformerFactory transfac = TransformerFactory.newInstance();
|
||||
Transformer transformer = transfac.newTransformer();
|
||||
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
|
||||
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
||||
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
|
||||
transformer.setOutputProperty(OutputKeys.ENCODING, encoding);
|
||||
transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "2");
|
||||
//transformer.setOutputProperty("{http://xml.apache.org/xalan}line-separator", "\t");
|
||||
|
||||
// Transform to file
|
||||
StreamResult result = new StreamResult(file);
|
||||
Source xmlSource = new DOMSource(document);
|
||||
transformer.transform(xmlSource, result);
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
throw new XmlException("Exception while exporting to file: " + e, e);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a dom4j {@link Element} to an XML file on the file system
|
||||
*
|
||||
* @param rootElement
|
||||
* the {@link Element} to write to the file system
|
||||
* @param file
|
||||
* the {@link File} describing the path on the file system where the XML file should be written to
|
||||
* @param encoding
|
||||
* encoding to use to write the file
|
||||
*
|
||||
* @throws RuntimeException
|
||||
* if something went wrong while creating the XML configuration, or writing the element
|
||||
*/
|
||||
public static void writeElement(Element rootElement, File file, String encoding) throws RuntimeException {
|
||||
|
||||
Document document = createDocument();
|
||||
document.appendChild(rootElement);
|
||||
XmlHelper.writeDocument(document, file);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new document instance
|
||||
*
|
||||
* @return a new document instance
|
||||
*
|
||||
* @throws RuntimeException
|
||||
* if something went wrong while creating the XML configuration
|
||||
*/
|
||||
public static Document createDocument() throws RuntimeException {
|
||||
try {
|
||||
|
||||
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
|
||||
Document document = docBuilder.newDocument();
|
||||
|
||||
return document;
|
||||
|
||||
} catch (DOMException e) {
|
||||
throw new XmlException("Failed to create Document: " + e.getLocalizedMessage(), e);
|
||||
} catch (ParserConfigurationException e) {
|
||||
throw new XmlException("Failed to create Document: " + e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue