org.exist.xmldb.TestEXistXMLSerialize.java Source code

Java tutorial

Introduction

Here is the source code for org.exist.xmldb.TestEXistXMLSerialize.java

Source

/*
 *  eXist Open Source Native XML Database
 *  Copyright (C) 2001-2011 The eXist-db Project
 *  http://exist-db.org
 *
 *  This program 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 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 Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser 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.
 *
 *  $Id$
 */
package org.exist.xmldb;

import org.exist.security.Account;
import org.xmldb.api.modules.CollectionManagementService;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Properties;
import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.apache.commons.io.output.ByteArrayOutputStream;

import org.exist.util.serializer.DOMSerializer;
import org.exist.util.serializer.SAXSerializer;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.Database;
import org.xmldb.api.base.XMLDBException;
import org.xmldb.api.modules.XMLResource;
import static org.exist.xmldb.XmldbLocalTests.*;

/**
 *
 * @author  bmadigan
 */
public class TestEXistXMLSerialize {

    private final static String XML_DATA = "<test>" + "<para></para>"
            + "<para>\uC5F4\uB2E8\uACC4</para>" + "</test>";

    private final static String XSL_DATA = "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" "
            + "version=\"1.0\">" + "<xsl:param name=\"testparam\"/>"
            + "<xsl:template match=\"test\"><test><xsl:apply-templates/></test></xsl:template>"
            + "<xsl:template match=\"para\">"
            + "<p><xsl:value-of select=\"$testparam\"/>: <xsl:apply-templates/></p></xsl:template>"
            + "</xsl:stylesheet>";

    private final static File testFile = new File(getExistDir(), "test/src/org/exist/xmldb/PerformanceTest.xml");

    private final static String TEST_COLLECTION = "testXmlSerialize";

    @Before
    public void setUp() throws Exception {
        Class<?> cl = Class.forName("org.exist.xmldb.DatabaseImpl");
        Database database = (Database) cl.newInstance();
        database.setProperty("create-database", "true");
        DatabaseManager.registerDatabase(database);

        Collection root = DatabaseManager.getCollection(ROOT_URI, ADMIN_UID, ADMIN_PWD);
        CollectionManagementService service = (CollectionManagementService) root
                .getService("CollectionManagementService", "1.0");
        Collection testCollection = service.createCollection(TEST_COLLECTION);
        UserManagementService ums = (UserManagementService) testCollection.getService("UserManagementService",
                "1.0");
        // change ownership to guest
        Account guest = ums.getAccount(GUEST_UID);
        ums.chown(guest, guest.getPrimaryGroup());
        ums.chmod("rwxr-xr-x");
    }

    @After
    public void tearDown() throws XMLDBException {
        //delete the test collection
        Collection root = DatabaseManager.getCollection(ROOT_URI, ADMIN_UID, ADMIN_PWD);
        CollectionManagementService cms = (CollectionManagementService) root
                .getService("CollectionManagementService", "1.0");
        cms.removeCollection(TEST_COLLECTION);

        //shutdownDB the db
        DatabaseInstanceManager dim = (DatabaseInstanceManager) root.getService("DatabaseInstanceManager", "1.0");
        dim.shutdown();
    }

    @Test
    public void serialize1()
            throws TransformerException, XMLDBException, ParserConfigurationException, SAXException, IOException {
        Collection testCollection = DatabaseManager.getCollection(ROOT_URI + "/" + TEST_COLLECTION);
        System.out.println("Xerces version: " + org.apache.xerces.impl.Version.getVersion());
        XMLResource resource = (XMLResource) testCollection.createResource(null, "XMLResource");

        Document doc = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(testFile);

        resource.setContentAsDOM(doc);
        System.out.println("Storing resource: " + resource.getId());
        testCollection.storeResource(resource);

        resource = (XMLResource) testCollection.getResource(resource.getId());
        assertNotNull(resource);
        Node node = resource.getContentAsDOM();
        node = node.getOwnerDocument();

        System.out.println("Attempting serialization 1");
        DOMSource source = new DOMSource(node);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        StreamResult result = new StreamResult(out);

        Transformer xformer = TransformerFactory.newInstance().newTransformer();
        xformer.transform(source, result);

        System.out.println("Using javax.xml.transform.Transformer");
        System.out.println("---------------------");
        System.out.println(new String(out.toByteArray()));
        System.out.println("--------------------- ");
    }

    @Test
    public void serialize2() throws ParserConfigurationException, SAXException, IOException, XMLDBException {
        Collection testCollection = DatabaseManager.getCollection(ROOT_URI + "/" + TEST_COLLECTION);
        System.out.println("Xerces version: " + org.apache.xerces.impl.Version.getVersion());
        Document doc = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(testFile);
        XMLResource resource = (XMLResource) testCollection.createResource(null, "XMLResource");
        resource.setContentAsDOM(doc);
        System.out.println("Storing resource: " + resource.getId());
        testCollection.storeResource(resource);

        resource = (XMLResource) testCollection.getResource(resource.getId());
        assertNotNull(resource);
        Node node = resource.getContentAsDOM();
        System.out.println("Attempting serialization using XMLSerializer");
        OutputFormat format = new OutputFormat();
        format.setLineWidth(0);
        format.setIndent(5);
        format.setPreserveSpace(true);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        XMLSerializer serializer = new XMLSerializer(out, format);

        if (node instanceof Document) {
            serializer.serialize((Document) node);
        } else if (node instanceof Element) {
            serializer.serialize((Element) node);
        } else {
            fail("Can't serialize node type: " + node);
        }
        System.out.println("Using org.apache.xml.serialize.XMLSerializer");
        System.out.println("---------------------");
        System.out.println(new String(out.toByteArray()));
        System.out.println("--------------------- ");
    }

    @Test
    public void serialize3()
            throws ParserConfigurationException, SAXException, IOException, XMLDBException, TransformerException {
        Collection testCollection = DatabaseManager.getCollection(ROOT_URI + "/" + TEST_COLLECTION);
        System.out.println("Xerces version: " + org.apache.xerces.impl.Version.getVersion());
        Document doc = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(testFile);
        XMLResource resource = (XMLResource) testCollection.createResource(null, "XMLResource");
        resource.setContentAsDOM(doc);
        System.out.println("Storing resource: " + resource.getId());
        testCollection.storeResource(resource);

        resource = (XMLResource) testCollection.getResource(resource.getId());
        assertNotNull(resource);
        Node node = resource.getContentAsDOM();
        System.out.println("Attempting serialization using eXist's serializer");
        StringWriter writer = new StringWriter();
        Properties outputProperties = new Properties();
        outputProperties.setProperty("indent", "yes");
        DOMSerializer serializer = new DOMSerializer(writer, outputProperties);
        serializer.serialize(node);

        System.out.println("Using org.exist.util.serializer.DOMSerializer");
        System.out.println("---------------------");
        System.out.println(writer.toString());
        System.out.println("---------------------");
    }

    @Test
    public void serialize4() throws ParserConfigurationException, SAXException, IOException, XMLDBException {
        Collection testCollection = DatabaseManager.getCollection(ROOT_URI + "/" + TEST_COLLECTION);
        System.out.println("Xerces version: " + org.apache.xerces.impl.Version.getVersion());
        Document doc = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(testFile);
        XMLResource resource = (XMLResource) testCollection.createResource(null, "XMLResource");
        resource.setContentAsDOM(doc);
        System.out.println("Storing resource: " + resource.getId());
        testCollection.storeResource(resource);

        resource = (XMLResource) testCollection.getResource(resource.getId());
        assertNotNull(resource);
        @SuppressWarnings("unused")
        Node node = resource.getContentAsDOM();
        System.out.println("Attempting serialization using eXist's SAX serializer");
        StringWriter writer = new StringWriter();
        Properties outputProperties = new Properties();
        outputProperties.setProperty("indent", "yes");
        SAXSerializer serializer = new SAXSerializer(writer, outputProperties);
        resource.getContentAsSAX(serializer);

        System.out.println("Using org.exist.util.serializer.SAXSerializer");
        System.out.println("---------------------");
        System.out.println(writer.toString());
        System.out.println("---------------------");
    }

    @Test
    public void serialize5() throws XMLDBException {
        Collection testCollection = DatabaseManager.getCollection(ROOT_URI + "/" + TEST_COLLECTION);
        XMLResource resource = (XMLResource) testCollection.createResource("test.xml", "XMLResource");
        resource.setContent(XML_DATA);
        System.out.println("Storing resource: " + resource.getId());
        testCollection.storeResource(resource);

        XMLResource style = (XMLResource) testCollection.createResource("test.xsl", "XMLResource");
        style.setContent(XSL_DATA);
        System.out.println("Storing resource: " + style.getId());
        testCollection.storeResource(style);

        Properties outputProperties = new Properties();
        outputProperties.setProperty("indent", "yes");
        testCollection.setProperty("stylesheet", "test.xsl");
        testCollection.setProperty("stylesheet-param.testparam", "TEST");
        StringWriter writer = new StringWriter();
        SAXSerializer serializer = new SAXSerializer(writer, outputProperties);
        resource.getContentAsSAX(serializer);

        System.out.println("Using org.exist.util.serializer.SAXSerializer");
        System.out.println("---------------------");
        System.out.println(writer.toString());
        System.out.println("---------------------");
    }
}