com.googlecode.fascinator.common.sax.SafeSAXReader.java Source code

Java tutorial

Introduction

Here is the source code for com.googlecode.fascinator.common.sax.SafeSAXReader.java

Source

/*
 * The Fascinator - Common Library
 * Copyright (C) 2008 University of Southern Queensland
 *
 * This program 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 2 of the License, or
 * (at your option) any later version.
 *
 * This program 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 this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
package com.googlecode.fascinator.common.sax;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.io.Writer;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.SAXException;

/**
 * A basic util class to instantiate a SAX Reader and parse documents whilst
 * retaining original escaped characters.
 * 
 * <p>
 * Credit due :
 * http://asfak.wordpress.com/2009/08/29/escaping-or-unescaping-special-
 * characters-while-writing-xml-files-using-dom4j/
 * </p>
 * 
 * @author Greg Pendlebury
 */

public class SafeSAXReader {

    /** Feature url */
    private String feature = "http://apache.org/xml/features/nonvalidating/load-external-dtd";

    /** SAX Reader */
    private SAXReader reader;

    /** Constructor */
    public SafeSAXReader() {
        reader = new SAXReader(new SafeSAXParser());
        reader.setValidation(false);
        try {
            reader.setFeature(feature, false);
        } catch (SAXException ex) {
            // Do we care?
        }
    }

    /**
     * Load Document from specified String
     * 
     * @param inDoc document to be read
     * @return Document
     * @throws DocumentException if fail to read the document
     */
    public Document loadDocument(String inDoc) throws DocumentException {
        return reader.read(inDoc);
    }

    /**
     * Load Document from specified Input Stream
     * 
     * @param inStream input stream to be read
     * @return Document
     * @throws DocumentException if fail to read the document
     */
    public Document loadDocumentFromStream(InputStream inStream) throws DocumentException {
        return reader.read(inStream);
    }

    /**
     * Convert node to string
     * 
     * @param outDoc Node to be converted
     * @return String of the converted node
     * @throws IOException if the conversion fail
     */
    public String docToString(Node outDoc) throws IOException {
        Writer osw = new StringWriter();
        OutputFormat opf = new OutputFormat("", false, "UTF-8");
        opf.setSuppressDeclaration(true);
        opf.setExpandEmptyElements(true);
        XMLWriter writer = new XMLWriter(osw, opf);
        writer.setEscapeText(false);
        writer.write(outDoc);
        writer.close();

        return osw.toString();
    }

    /**
     * Convert node to stream
     * 
     * @param outDoc Node to be converted
     * @param outStream output stream of the converted node
     * @throws IOException if the conversion fail
     */
    public void docToStream(Node outDoc, OutputStream outStream) throws IOException {
        OutputFormat opf = new OutputFormat("", false, "UTF-8");
        opf.setSuppressDeclaration(true);
        opf.setExpandEmptyElements(true);
        XMLWriter writer = new XMLWriter(outStream, opf);
        writer.setEscapeText(false);
        writer.write(outDoc);
        writer.close();
    }
}