XmlHelper.java
| Index Score | ||
|---|---|---|
![]() |
![]() |
org.pentaho.core.util |
![]() |
![]() |
Pentaho |
View: Reasons, Metrics, Source Code
These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.
/*
* Copyright 2006 Pentaho Corporation. All rights reserved.
* This software was developed by Pentaho Corporation and is provided under the terms
* of the Mozilla Public License, Version 1.1, or any later version. You may not use
* this file except in compliance with the license. If you need a copy of the license,
* please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho
* BI Platform. The Initial Developer is Pentaho Corporation.
*
* Software distributed under the Mozilla Public License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
* the license for the specific language governing your rights and limitations.
*
* @created Jun 17, 2005
* @author James Dixon
* @author Marc Batchelor
*/
package org.pentaho.core.util;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.pentaho.core.session.IPentahoSession;
import org.pentaho.core.system.PentahoSystem;
import org.pentaho.messages.Messages;
import org.pentaho.messages.util.LocaleHelper;
import org.pentaho.repository.PentahoEntityResolver;
import org.pentaho.util.PentahoChainedException;
import org.pentaho.util.logging.Logger;
import org.xml.sax.EntityResolver;
/**
* A set of static methods for performing various operations on DOM Documents
* and XML text (in the form of streams, Strings, and files). The operations include
* creating DOM Documents (dom4j)
* transforming DOM Documents
* creating XML from Objects, Lists and Maps
* creating Lists or Maps from XML
* getting an XML node's text
*
* @author mbatchel/jdixon
*
*/
public class XmlHelper extends CleanXmlHelper {
private static final String DEFAULT_XSL_FOLDER = "system/custom/xsl/"; //$NON-NLS-1$
private static final Log logger = LogFactory.getLog(XmlHelper.class);
private static final EntityResolver entityResolver = new PentahoEntityResolver();
/**
* Should never be called.
*
*/
private XmlHelper() {
}
/**
* Create a <code>Document</code> from <code>str</code>.
*
* @param str String containing the XML that will be used to create the Document
* @return <code>Document</code> initialized with the xml in <code>strXml</code>.
*/
public static Document getDocFromString(String strXml) {
Document doc = null;
try {
doc = CleanXmlHelper.getDocFromString(strXml, entityResolver);
} catch (DocumentException e) {
Logger.error(XmlHelper.class.getName(), Messages.getErrorString(
"XmlHelper.ERROR_0014_FAILED_TO_PARSE_XML_DOCUMENT", //$NON-NLS-1$
strXml), e);
doc = null;
}
return doc;
}
/**
* Create a <code>Document</code> from the contents of the input file
* <code>file</code>.
*
* @param file <code>File</code> usd to create the input stream that will be
* used to create the <code>Document</code>
* @return <code>Document</code> containing the contents of the file f.
*/
public static Document getDocFromFile(File file) {
Document document = null;
try {
document = CleanXmlHelper.getDocFromFile(file, entityResolver);
} catch (IOException e) {
Logger.error(XmlHelper.class.getName(), Messages.getErrorString(
"XmlHelper.ERROR_0013_FAILED_TO_CREATE_FILEINPUTSTREAM", //$NON-NLS-1$
file.getPath()), e);
} catch (DocumentException e) {
Logger.error(XmlHelper.class.getName(), Messages.getErrorString(
"XmlHelper.ERROR_0014_FAILED_TO_PARSE_XML_DOCUMENT", //$NON-NLS-1$
file.getPath()), e);
}
return document;
}
/**
* Use the transform specified by xslName and xslPath, and transform the document specified
* by document, and return the resulting document.
*
* @param xslName String containing the path in the repository of the file containing the xsl transform
* @param document Document containing the document to be transformed
* @param params Map of properties to set on the transform
* @param session IPentahoSession containing a URIResolver instance to resolve URI's in the output document.
*
* @return StringBuffer containing the XML results of the transform. Null if there was an error.
* @throws TransformerException If attempt to transform the document fails.
*/
public static final StringBuffer transformXml(String xslName, String xslPath, Document document, Map params,
IPentahoSession session) throws TransformerException {
InputStream inStrm = null;
try {
String xml = document.asXML();
String encoding = XmlHelper.getEncoding(xml);
inStrm = new ByteArrayInputStream(xml.getBytes(encoding));
} catch (UnsupportedEncodingException e) {
if (logger.isErrorEnabled()) {
logger.error(e);
}
}
StringBuffer result = transformXml(xslName, xslPath, inStrm, params, session);
CleanXmlHelper.closeInputStream(inStrm);
return result;
}
/**
* Not currently used.
*
* Use the transform specified by xslName and transform the document specified
* by document, and return the resulting document.
*
* @param xslName String containing the path in the repository of the file containing the xsl transform
* @param document Document containing the document to be transformed
* @param params Map of properties to set on the transform
* @param session IPentahoSession containing a URIResolver instance to resolve URI's in the output document.
*
* @return StringBuffer containing the XML results of the transform. Null if there was an error.
* @throws TransformerException If attempt to transform the document fails.
*/
public static final StringBuffer transformXml(String xslName, Document document, Map params, IPentahoSession session)
throws TransformerException {
return transformXml(xslName, null, document, params, session);
}
/**
* Not currently used.
*
* Use the transform specified by xslName and xslPath,and transform the document specified
* by uri, and return the resulting document.
*
* @param xslName String containing the name of a file in the repository containing the xsl transform
* @param xslPath String containing the path to the file identifyied by <code>xslName</code>
* @param uri String containing the URI of a resource containing the document to be transformed
* @param params Map of properties to set on the transform
* @param session IPentahoSession containing a URIResolver instance to resolve URI's in the output document.
*
* @return StringBuffer containing the XML results of the transform. Null if there was an error.
* @throws TransformerException If attempt to transform the document fails.
*/
public static final StringBuffer transformXmlUrl(String xslName, String xslPath, String uri, Map params,
IPentahoSession session) throws TransformerException {
URL url = null;
try {
url = new URL(uri);
} catch (MalformedURLException e) {
Logger.error(XmlHelper.class.getName(), Messages.getErrorString(
"XmlHelper.ERROR_0007_TRANSFORM_XML_URL", e.getMessage(), xslName), e); //$NON-NLS-1$
return null;
}
InputStream inStrm = null;
try {
inStrm = url.openStream();
} catch (IOException e) {
Logger.error(XmlHelper.class.getName(), Messages.getErrorString(
"XmlHelper.ERROR_0007_TRANSFORM_XML_URL", e.getMessage(), xslName), e); //$NON-NLS-1$
return null;
}
return transformXml(xslName, xslPath, inStrm, params, session);
}
/**
* Use the transform specified by xslName and transform the document specified
* by docInStrm, and return the resulting document.
*
* @param xslName String containing the name of a file in the repository containing the xsl transform
* @param xslPath String containing the path to the file identifyied by <code>xslName</code>
* @param uri String containing the URI of a resource containing the document to be transformed
* @param params Map of properties to set on the transform
* @param session IPentahoSession containing a URIResolver instance to resolve URI's in the output document.
*
* @return StringBuffer containing the XML results of the transform. Null if there was an error.
* @throws TransformerException If attempt to transform the document fails.
*/
public static final StringBuffer transformXml(String xslName, String xslPath, String strDocument, Map params,
IPentahoSession session) throws TransformerException {
InputStream inStrm = null;
try {
String encoding = XmlHelper.getEncoding(strDocument);
inStrm = new ByteArrayInputStream(strDocument.getBytes(encoding));
} catch (UnsupportedEncodingException e) {
if (logger.isErrorEnabled()) {
logger.error(e);
}
}
StringBuffer result = transformXml(xslName, xslPath, inStrm, params, session);
CleanXmlHelper.closeInputStream(inStrm);
return result;
}
/**
* Use the transform specified by xslPath and xslName and transform the document specified
* by docInStrm, and return the resulting document.
*
* @param xslSrc StreamSrc containing the xsl transform
* @param docSrc StreamSrc containing the document to be transformed
* @param params Map of properties to set on the transform
* @param session IPentahoSession containing a URIResolver instance to resolve URI's in the output document.
*
* @return StringBuffer containing the XML results of the transform. Null if there was an error.
* @throws TransformerException If attempt to transform the document fails.
*/
public static final StringBuffer transformXml(String xslName, String xslPath, InputStream docInStrm, Map params,
IPentahoSession session) throws TransformerException {
StringBuffer result = null;
File localeXsl = getLocalizedXsl(xslPath, xslName);
if (null == localeXsl) {
Logger.error(XmlHelper.class.getName(), Messages.getErrorString("XmlHelper.ERROR_0003_NULL_XSL_SOURCE")); //$NON-NLS-1$
} else if (null == docInStrm) {
Logger.error(XmlHelper.class.getName(), Messages.getErrorString("XmlHelper.ERROR_0004_NULL_DOCUMENT")); //$NON-NLS-1$
} else {
FileInputStream xslInStrm = null;
try {
xslInStrm = new FileInputStream(localeXsl);
} catch (FileNotFoundException e) {
Logger.error(XmlHelper.class.getName(), Messages.getErrorString(
"XmlHelper.ERROR_0013_FAILED_TO_CREATE_FILEINPUTSTREAM", e.getMessage(), xslName), e); //$NON-NLS-1$
}
// at this point, we have both of our InputStreams
// Add encoding for any xsl that may set/use it
if (params == null) {
params = new HashMap();
}
params.put("output-encoding", LocaleHelper.getSystemEncoding()); //$NON-NLS-1$
URIResolver resolver = new SolutionURIResolver(session);
try {
result = CleanXmlHelper.transformXml(xslInStrm, docInStrm, params, resolver);
} catch (TransformerException e) {
Logger.error(XmlHelper.class.getName(), Messages.getErrorString(
"XmlHelper.ERROR_0006_TRANSFORM_XML_ERROR", e.getMessage(), xslName), e); //$NON-NLS-1$
throw e;
} finally {
CleanXmlHelper.closeInputStream(xslInStrm);
}
}
return result;
}
/**
* Find the character encoding specification in the xml String. If it exists, return
* the character encoding. Otherwise, return the system encoding.
*
* @param xml String containing the xml
* @return String containing the character encoding in the xml processing instruction
* if it exists, else the system encoding.
*/
public static String getEncoding(String xml) {
String enc = CleanXmlHelper.getEncoding(xml);
return null != enc ? enc : LocaleHelper.getSystemEncoding();
}
/*
TODO sbarkdull, delete this, these methods exist in the SolutionRepository
public static ResourceBundle getBundle(String baseName, File localeDir, Locale locale) {
try {
URL localeDirUrl = localeDir.getParentFile().toURL();
URLClassLoader loader = new URLClassLoader(new URL[] { localeDirUrl });
ResourceBundle bundle = ResourceBundle.getBundle(baseName, locale, loader);
return bundle;
} catch (Exception e) {
Logger.error("XmlHelper", Messages.getErrorString("XmlHelper.ERROR_0012_COULD_NOT_READ_PROPERTIES", localeDir.getAbsolutePath() + File.separator + baseName), e); //$NON-NLS-1$ //$NON-NLS-2$
}
return null;
}
// TODO sbarkdull, the caller of this method has no way of knowing if it succeeded or failed, needs
// to be fixed, should throw exception when something fails so caller knows of failure
// code is not currently used
public static void localizeDoc(Node document, File file, Locale locale, boolean xmlEncode) {
String fileName = file.getName();
int dotIndex = fileName.indexOf('.');
String baseName = fileName.substring(0, dotIndex);
ResourceBundle bundle = null;
bundle = getBundle(baseName, file, locale);
if (bundle == null) {
return;
}
localizeDoc(document, bundle, locale, file.getAbsolutePath(), xmlEncode);
}
// TODO sbarkdull, this code is duplicated in LocaleHelper
// public static String getXmlEncodedString(String rawValue) {
// return CleanXmlHelper.getXmlEncodedString( rawValue );
// }
public static void localizeDoc(Node document, ResourceBundle bundle, Locale locale, String bundlePath, boolean xmlEncode) {
if (bundle == null) {
return;
}
try {
List nodes = document.selectNodes("descendant::*"); //$NON-NLS-1$
Iterator nodeIterator = nodes.iterator();
while (nodeIterator.hasNext()) {
Node node = (Node) nodeIterator.next();
String name = node.getText();
if (name.startsWith("%") && !node.getPath().endsWith("/text()")) { //$NON-NLS-1$ //$NON-NLS-2$
try {
if (bundle != null) {
String localeText = bundle.getString(name.substring(1));
if (localeText != null) {
if (xmlEncode) {
node.setText(CleanXmlHelper.getXmlEncodedString(localeText));
} else {
node.setText(localeText);
}
}
}
} catch (Exception e) {
Logger.warn("XmlHelper", Messages.getString("XmlHelper.WARN_MISSING_RESOURCE_PROPERTY", name.substring(1), bundlePath, locale.toString())); //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
} catch (Exception e) {
Logger.error("XmlHelper", Messages.getErrorString("XmlHelper.ERROR_0012_COULD_NOT_READ_PROPERTIES", bundlePath), e); //$NON-NLS-1$ //$NON-NLS-2$
}
}
*/
public static File getLocalizedFile(String fullPath, Locale locale) {
String language = locale.getLanguage();
String country = locale.getCountry();
String variant = locale.getVariant();
File file = new File(fullPath);
String fileName = file.getName();
int dotIndex = fileName.indexOf('.');
String baseName = dotIndex == -1 ? fileName : fileName.substring(0, dotIndex); // These two lines fix an index out of bounds
String extension = dotIndex == -1 ? "" : fileName.substring(dotIndex); // Exception that occurs when a filename has no extension //$NON-NLS-1$
File directory = file.getParentFile();
File localeFile = null;
if (!variant.equals("")) { //$NON-NLS-1$
localeFile = new File(directory, baseName + "_" + language + "_" + country + "_" + variant + extension); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
if (localeFile == null || !localeFile.exists()) {
localeFile = new File(directory, baseName + "_" + language + "_" + country + extension); //$NON-NLS-1$//$NON-NLS-2$
}
if (!localeFile.exists()) {
localeFile = new File(directory, baseName + "_" + language + extension); //$NON-NLS-1$
}
if (!localeFile.exists()) {
localeFile = new File(directory, baseName + extension);
}
if (localeFile.exists()) {
return localeFile;
} else {
return null;
}
}
/**
* Get the File object corresponding to the path, filename (xslName), and
* locale. The path is relative to the solution path.
*
* @param path
* @param xslName
* @return
*/
public static final File getLocalizedXsl(String path, String xslName) {
String fullPath = null;
File file = null;
if (null != path) {
// try to find it on the specified path
fullPath = PentahoSystem.getApplicationContext().getSolutionPath(path + File.separator + xslName).replace('\\',
'/');
file = getLocalizedFile(fullPath, LocaleHelper.getLocale());
}
if (null == file) {
// didn't find the file, let's try default path
fullPath = PentahoSystem.getApplicationContext().getSolutionPath(DEFAULT_XSL_FOLDER + xslName).replace('\\', '/');
file = getLocalizedFile(fullPath, LocaleHelper.getLocale());
}
if (null == file) {
// we should not get this far...
Logger.error(XmlHelper.class.getName(), Messages.getErrorString(
"XmlHelper.ERROR_0011_TRANSFORM_XSL_DOES_NOT_EXIST", fullPath)); //$NON-NLS-1$
}
return file;
}
public static Document getDomFromResource(String path) {
String fullPath = PentahoSystem.getApplicationContext().getSolutionPath(path);
File f = new File(fullPath);
return getDocFromFile(f);
}
public static String getContentFromResource(String fullPath) {
Document doc = getDomFromResource(fullPath);
return doc.asXML();
}
public static String getContentFromSolutionResource(String path) {
return getContentFromResource(path);
}
/*
* The following methods converts lists/maps to/from XML. author: mbatchelor
*/
public static String listToXML(List l) throws UnsupportedOperationException {
return listToXML(l, ""); //$NON-NLS-1$
}
public static String listToXML(List l, String indent) throws UnsupportedOperationException {
StringBuffer sb = new StringBuffer();
sb.append(indent).append("<list>\r"); //$NON-NLS-1$
String newIndent = indent + " "; //$NON-NLS-1$
Object obj;
for (int i = 0; i < l.size(); i++) {
obj = l.get(i);
sb.append(newIndent).append("<list-element>\r"); //$NON-NLS-1$
objToXML(obj, sb, newIndent);
sb.append(newIndent).append("</list-element>\r"); //$NON-NLS-1$
}
sb.append(indent).append("</list>\r"); //$NON-NLS-1$
return sb.toString();
}
public static String mapToXML(Map m) throws UnsupportedOperationException {
return mapToXML(m, ""); //$NON-NLS-1$
}
public static String mapToXML(Map mp, String indent) throws UnsupportedOperationException {
StringBuffer sb = new StringBuffer();
sb.append(indent).append("<map>\r"); //$NON-NLS-1$
String newIndent = indent + " "; //$NON-NLS-1$
Iterator it = mp.entrySet().iterator();
Map.Entry ent;
Object obj;
while (it.hasNext()) {
ent = (Map.Entry) it.next();
if (!(ent.getKey() instanceof String)) {
throw new UnsupportedOperationException(Messages.getErrorString("XMLUTL.ERROR_0011_MAP_KEYS")); //$NON-NLS-1$
}
sb.append(newIndent).append("<map-entry>\r"); //$NON-NLS-1$
sb.append(newIndent).append("<key>\r"); //$NON-NLS-1$
sb.append(newIndent).append("<![CDATA[").append(ent.getKey().toString()).append("]]>\r"); //$NON-NLS-1$ //$NON-NLS-2$
sb.append(newIndent).append("</key>\r"); //$NON-NLS-1$
obj = ent.getValue();
objToXML(obj, sb, newIndent);
sb.append(newIndent).append("</map-entry>\r"); //$NON-NLS-1$
}
sb.append(indent).append("</map>\r"); //$NON-NLS-1$
return sb.toString();
}
private static void objToXML(Object obj, StringBuffer sb, String newIndent) {
if (obj instanceof String) {
sb.append(newIndent).append("<string-value>\r"); //$NON-NLS-1$
sb.append(newIndent).append("<![CDATA[").append((String) obj).append("]]>\r"); //$NON-NLS-1$ //$NON-NLS-2$
sb.append(newIndent).append("</string-value>\r"); //$NON-NLS-1$
} else if (obj instanceof StringBuffer) {
sb.append(newIndent).append("<stringbuffer-value>\r"); //$NON-NLS-1$
sb.append(newIndent).append("<![CDATA[").append(obj.toString()).append("]]>\r"); //$NON-NLS-1$ //$NON-NLS-2$
sb.append(newIndent).append("</stringbuffer-value>\r"); //$NON-NLS-1$
} else if (obj instanceof BigDecimal) {
sb.append(newIndent).append("<bigdecimal-value>").append(obj.toString()).append("</bigdecimal-value>\r"); //$NON-NLS-1$ //$NON-NLS-2$
} else if (obj instanceof Date) {
SimpleDateFormat fmt = new SimpleDateFormat();
fmt.setTimeZone(TimeZone.getTimeZone("GMT")); //$NON-NLS-1$
sb.append(newIndent).append("<date-value>"); //$NON-NLS-1$
sb.append(fmt.format((Date) obj)).append("</date-value>\r"); //$NON-NLS-1$
} else if (obj instanceof Long) {
sb.append(newIndent).append("<long-value>"); //$NON-NLS-1$
sb.append(obj.toString()).append("</long-value>\r"); //$NON-NLS-1$
} else if (obj instanceof Map) {
sb.append(newIndent).append("<map-value>\r"); //$NON-NLS-1$
sb.append(mapToXML((Map) obj, newIndent));
sb.append(newIndent).append("</map-value>\r"); //$NON-NLS-1$
} else if (obj instanceof List) {
sb.append(newIndent).append("<list-value>\r"); //$NON-NLS-1$
sb.append(listToXML((List) obj, newIndent));
sb.append(newIndent).append("</list-value>\r"); //$NON-NLS-1$
} else {
throw new UnsupportedOperationException(Messages.getErrorString(
"XMLUTL.ERROR_0012_DATA_TYPE", obj.getClass().getName())); //$NON-NLS-1$
}
}
public static List xmlToList(String s) throws PentahoChainedException {
try {
Document doc = XmlHelper.getDocFromString(s);
Element root = doc.getRootElement();
return processList(root);
} catch (ParseException pex) {
throw new PentahoChainedException(Messages.getErrorString("XMLUTL.ERROR_0013_PARSING"), pex); //$NON-NLS-1$
}
}
public static Map xmlToMap(String s) throws PentahoChainedException {
try {
Document doc = XmlHelper.getDocFromString(s);
Element root = doc.getRootElement();
return processMap(root);
} catch (ParseException pex) {
throw new PentahoChainedException(Messages.getErrorString("XMLUTL.ERROR_0013_PARSING"), pex); //$NON-NLS-1$
}
}
public static List processList(Element ele) throws ParseException {
List rtn = new ArrayList();
Iterator it = ele.elementIterator();
Element anElement;
while (it.hasNext()) {
anElement = (Element) it.next();
processListElement(anElement, rtn);
}
return rtn;
}
public static Map processMap(Element ele) throws ParseException {
Map rtn = new HashMap();
Iterator it = ele.elementIterator();
Element anElement;
while (it.hasNext()) {
anElement = (Element) it.next();
processMapElement(anElement, rtn);
}
return rtn;
}
public static Object elementToObject(Element anElement) throws ParseException {
if (anElement.getName().equals("string-value")) { //$NON-NLS-1$
return anElement.getTextTrim();
} else if (anElement.getName().equals("stringbuffer-value")) { //$NON-NLS-1$
return new StringBuffer(anElement.getTextTrim());
} else if (anElement.getName().equals("bigdecimal-value")) { //$NON-NLS-1$
return new BigDecimal(anElement.getTextTrim());
} else if (anElement.getName().equals("long-value")) { //$NON-NLS-1$
return new Long(anElement.getTextTrim());
} else if (anElement.getName().equals("date-value")) { //$NON-NLS-1$
SimpleDateFormat fmt = new SimpleDateFormat();
fmt.setTimeZone(TimeZone.getTimeZone("GMT")); //$NON-NLS-1$
return fmt.parse(anElement.getTextTrim());
} else if (anElement.getName().equals("list-value")) { //$NON-NLS-1$
return processList(anElement.element("list")); //$NON-NLS-1$
} else if (anElement.getName().equals("map-value")) { //$NON-NLS-1$
return processMap(anElement.element("map")); //$NON-NLS-1$
} else {
throw new ParseException(Messages.getErrorString("XMLUTL.ERROR_0014_UNKNOWN_TYPE", anElement.getName()), 0); //$NON-NLS-1$
}
}
public static void processListElement(Element ele, List rtn) throws ParseException {
Iterator it = ele.elementIterator();
Element anElement;
while (it.hasNext()) {
anElement = (Element) it.next();
Object anObj = elementToObject(anElement);
rtn.add(anObj);
}
}
public static void processMapElement(Element ele, Map rtn) throws ParseException {
Iterator it = ele.elementIterator();
Element keyElement = null;
Element valueElement = null;
Element anElement = null;
while (it.hasNext()) {
anElement = (Element) it.next();
if (anElement.getName().equals("key")) { //$NON-NLS-1$
keyElement = anElement;
} else {
valueElement = anElement;
}
}
// Now, we have our key and our value. Let's figure out what kind of
// processing is required.
Object anObj = elementToObject(valueElement);
rtn.put(keyElement.getTextTrim(), anObj);
}
// TODO sbarkdull begin, these methods could be moved to CleanXmlHelper
public static String getNodeText(String xpath, Node rootNode) {
return (getNodeText(xpath, rootNode, null));
}
public static long getNodeText(String xpath, Node rootNode, long defaultValue) {
String valueStr = getNodeText(xpath, rootNode, Long.toString(defaultValue));
try {
return Long.parseLong(valueStr);
} catch (NumberFormatException e) {
logger.error(e.getLocalizedMessage(), e);
}
return defaultValue;
}
public static double getNodeText(String xpath, Node rootNode, double defaultValue) {
String valueStr = getNodeText(xpath, rootNode, null);
if (valueStr == null) {
return defaultValue;
}
try {
return Double.parseDouble(valueStr);
} catch (NumberFormatException e) {
logger.error(e.getLocalizedMessage(), e);
}
return defaultValue;
}
public static String getNodeText(String xpath, Node rootNode, String defaultValue) {
if (rootNode == null) {
return (defaultValue);
}
Node node = rootNode.selectSingleNode(xpath);
if (node == null) {
return defaultValue;
}
return node.getText();
}
public static void decode(String[] strings) {
if (strings != null) {
for (int i = 0; i < strings.length; ++i) {
strings[i] = decode(strings[i]);
}
}
}
public static String decode(String string) {
// TODO replace this is a more robust encoder
if (string != null) {
string = string.replaceAll("<", "<") //$NON-NLS-1$ //$NON-NLS-2$
.replaceAll(">", ">") //$NON-NLS-1$ //$NON-NLS-2$
.replaceAll("'", "'") //$NON-NLS-1$ //$NON-NLS-2$
.replaceAll(""", "\"") //$NON-NLS-1$ //$NON-NLS-2$
.replaceAll("&", "&"); //$NON-NLS-1$ //$NON-NLS-2$ // DO THE & LAST!!!!
}
return string;
}
public static void encode(String[] strings) {
if (strings != null) {
for (int i = 0; i < strings.length; ++i) {
strings[i] = encode(strings[i]);
}
}
}
public static String encode(String string) {
return StringEscapeUtils.escapeXml( string );
}
// TODO sbarkdull end, some of these preceeding methods could be moved to CleanXmlHelper
}
The table below shows all metrics for XmlHelper.java.




