Example usage for javax.xml.transform.sax SAXTransformerFactory newInstance

List of usage examples for javax.xml.transform.sax SAXTransformerFactory newInstance

Introduction

In this page you can find the example usage for javax.xml.transform.sax SAXTransformerFactory newInstance.

Prototype

public static TransformerFactory newInstance() throws TransformerFactoryConfigurationError 

Source Link

Document

Obtain a new instance of a TransformerFactory .

Usage

From source file:info.magnolia.importexport.DataTransporter.java

/**
 * Imports XML stream into repository.//from   w  ww  . j  ava  2  s . c  o m
 * XML is filtered by <code>MagnoliaV2Filter</code>, <code>VersionFilter</code> and <code>ImportXmlRootFilter</code>
 * if <code>keepVersionHistory</code> is set to <code>false</code>
 * @param xmlStream XML stream to import
 * @param repositoryName selected repository
 * @param basepath base path in repository
 * @param name (absolute path of <code>File</code>)
 * @param keepVersionHistory if <code>false</code> version info will be stripped before importing the document
 * @param importMode a valid value for ImportUUIDBehavior
 * @param saveAfterImport
 * @param createBasepathIfNotExist
 * @throws IOException
 * @see ImportUUIDBehavior
 * @see ImportXmlRootFilter
 * @see VersionFilter
 * @see MagnoliaV2Filter
 */
public static synchronized void importXmlStream(InputStream xmlStream, String repositoryName, String basepath,
        String name, boolean keepVersionHistory, int importMode, boolean saveAfterImport,
        boolean createBasepathIfNotExist) throws IOException {

    // TODO hopefully this will be fixed with a more useful message with the Bootstrapper refactoring
    if (xmlStream == null) {
        throw new IOException("Can't import a null stream into repository: " + repositoryName + ", basepath: "
                + basepath + ", name: " + name);
    }

    HierarchyManager hm = MgnlContext.getHierarchyManager(repositoryName);
    if (hm == null) {
        throw new IllegalStateException(
                "Can't import " + name + " since repository " + repositoryName + " does not exist.");
    }
    Workspace ws = hm.getWorkspace();

    if (log.isDebugEnabled()) {
        log.debug("Importing content into repository: [{}] from: [{}] into path: [{}]",
                new Object[] { repositoryName, name, basepath });
    }

    if (!hm.isExist(basepath) && createBasepathIfNotExist) {
        try {
            ContentUtil.createPath(hm, basepath, ItemType.CONTENT);
        } catch (RepositoryException e) {
            log.error("can't create path [{}]", basepath);
        }
    }

    Session session = ws.getSession();

    try {

        // Collects a list with all nodes at the basepath before import so we can see exactly which nodes were imported afterwards
        List<Node> nodesBeforeImport = NodeUtil
                .asList(NodeUtil.asIterable(session.getNode(basepath).getNodes()));

        if (keepVersionHistory) {
            // do not manipulate
            session.importXML(basepath, xmlStream, importMode);
        } else {
            // create readers/filters and chain
            XMLReader initialReader = XMLReaderFactory
                    .createXMLReader(org.apache.xerces.parsers.SAXParser.class.getName());
            try {
                initialReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
            } catch (SAXException e) {
                log.error("could not set parser feature");
            }

            XMLFilter magnoliaV2Filter = null;

            // if stream is from regular file, test for belonging XSL file to apply XSL transformation to XML
            if (new File(name).isFile()) {
                InputStream xslStream = getXslStreamForXmlFile(new File(name));
                if (xslStream != null) {
                    Source xslSource = new StreamSource(xslStream);
                    SAXTransformerFactory saxTransformerFactory = (SAXTransformerFactory) SAXTransformerFactory
                            .newInstance();
                    XMLFilter xslFilter = saxTransformerFactory.newXMLFilter(xslSource);
                    magnoliaV2Filter = new MagnoliaV2Filter(xslFilter);
                }
            }

            if (magnoliaV2Filter == null) {
                magnoliaV2Filter = new MagnoliaV2Filter(initialReader);
            }

            XMLFilter versionFilter = new VersionFilter(magnoliaV2Filter);

            // enable this to strip useless "name" properties from dialogs
            // versionFilter = new UselessNameFilter(versionFilter);

            // enable this to strip mix:versionable from pre 3.6 xml files
            versionFilter = new RemoveMixversionableFilter(versionFilter);

            XMLReader finalReader = new ImportXmlRootFilter(versionFilter);

            ContentHandler handler = session.getImportContentHandler(basepath, importMode);
            finalReader.setContentHandler(handler);

            // parse XML, import is done by handler from session
            try {
                finalReader.parse(new InputSource(xmlStream));
            } finally {
                IOUtils.closeQuietly(xmlStream);
            }

            if (((ImportXmlRootFilter) finalReader).rootNodeFound) {
                String path = basepath;
                if (!path.endsWith(SLASH)) {
                    path += SLASH;
                }

                Node dummyRoot = (Node) session.getItem(path + JCR_ROOT);
                for (Iterator iter = dummyRoot.getNodes(); iter.hasNext();) {
                    Node child = (Node) iter.next();
                    // move childs to real root

                    if (session.itemExists(path + child.getName())) {
                        session.getItem(path + child.getName()).remove();
                    }

                    session.move(child.getPath(), path + child.getName());
                }
                // delete the dummy node
                dummyRoot.remove();
            }

            // Post process all nodes that were imported
            NodeIterator nodesAfterImport = session.getNode(basepath).getNodes();
            while (nodesAfterImport.hasNext()) {
                Node nodeAfterImport = nodesAfterImport.nextNode();
                boolean existedBeforeImport = false;
                for (Node nodeBeforeImport : nodesBeforeImport) {
                    if (NodeUtil.isSame(nodeAfterImport, nodeBeforeImport)) {
                        existedBeforeImport = true;
                        break;
                    }
                }
                if (!existedBeforeImport) {
                    postProcessAfterImport(nodeAfterImport);
                }
            }
        }
    } catch (Exception e) {
        throw new RuntimeException("Error importing " + name + ": " + e.getMessage(), e);
    } finally {
        IOUtils.closeQuietly(xmlStream);
    }

    try {
        if (saveAfterImport) {
            session.save();
        }
    } catch (RepositoryException e) {
        log.error(MessageFormat.format(
                "Unable to save changes to the [{0}] repository due to a {1} Exception: {2}.",
                new Object[] { repositoryName, e.getClass().getName(), e.getMessage() }), e);
        throw new IOException(e.getMessage());
    }
}

From source file:ddf.compression.exi.EXIEncoderTest.java

/**
 * Tests that the encode method converts xml into exi-compressed xml.
 *
 * @throws Exception/* www  . j ava 2  s  .com*/
 */
@Test
public void testEncode() throws Exception {

    ByteArrayOutputStream exiStream = new ByteArrayOutputStream();

    InputStream xmlStream = getClass().getResourceAsStream(TEST_FILE);

    EXIEncoder.encode(xmlStream, exiStream);

    StringWriter stringWriter = new StringWriter();

    GrammarCache grammarCache;

    SAXTransformerFactory saxTransformerFactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
    SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
    saxParserFactory.setNamespaceAware(true);
    TransformerHandler transformerHandler = saxTransformerFactory.newTransformerHandler();

    EXIReader reader = new EXIReader();

    grammarCache = new GrammarCache(null, GrammarOptions.DEFAULT_OPTIONS);

    reader.setGrammarCache(grammarCache);

    transformerHandler.setResult(new StreamResult(stringWriter));

    reader.setContentHandler(transformerHandler);

    reader.parse(new InputSource(new ByteArrayInputStream(exiStream.toByteArray())));
    XMLUnit.setNormalize(true);
    XMLUnit.setNormalizeWhitespace(true);
    InputStream stream = getClass().getResourceAsStream(TEST_FILE);
    Diff diff = XMLUnit.compareXML(IOUtils.toString(stream), stringWriter.getBuffer().toString());
    IOUtils.closeQuietly(stream);
    assertTrue("The XML input file (" + TEST_FILE + ") did not match the EXI-decoded output", diff.similar());
}

From source file:org.wyona.yanel.servlet.YanelServlet.java

/**
 * Generate a "Yanel" response (page information, 404, internal server error, ...)
 *//*from   w w  w.j a  v  a  2  s .c  om*/
private void setYanelOutput(HttpServletRequest request, HttpServletResponse response, Document doc)
        throws ServletException {
    Resource resource = getResource(request, response);
    String path = resource.getPath();
    String backToRealm = org.wyona.yanel.core.util.PathUtil.backToRealm(path);

    try {
        String yanelFormat = request.getParameter("yanel.resource.meta.format");
        if (yanelFormat != null) {
            if (yanelFormat.equals("xml")) {
                response.setContentType("application/xml; charset=" + DEFAULT_ENCODING);
                XMLHelper.writeDocument(doc, response.getOutputStream());
            } else if (yanelFormat.equals("json")) {
                log.error("TODO: JSON format not implemented yet!");
            } else {
                log.error("No such format '" + yanelFormat + "' supported!");
            }
        } else {
            String mimeType = patchMimeType("application/xhtml+xml", request);
            // TODO: doLogAccess
            response.setContentType(mimeType + "; charset=" + DEFAULT_ENCODING);

            // create identity transformer which serves as a dom-to-sax transformer
            TransformerIdentityImpl transformer = new TransformerIdentityImpl();

            // INFO: Create xslt transformer:
            SAXTransformerFactory saxTransformerFactory = (SAXTransformerFactory) SAXTransformerFactory
                    .newInstance();
            TransformerHandler xsltTransformer = saxTransformerFactory
                    .newTransformerHandler(new StreamSource(getXsltInfoAndException(resource)));
            xsltTransformer.getTransformer().setParameter("yanel.back2realm", backToRealm);
            xsltTransformer.getTransformer().setParameter("yanel.reservedPrefix", reservedPrefix);

            // create i18n transformer:
            I18nTransformer2 i18nTransformer = new I18nTransformer2("global",
                    getLanguage(request,
                            yanelInstance.getMap().getRealm(request.getServletPath()).getDefaultLanguage()),
                    yanelInstance.getMap().getRealm(request.getServletPath()).getDefaultLanguage());
            CatalogResolver catalogResolver = new CatalogResolver();
            i18nTransformer.setEntityResolver(new CatalogResolver());

            // create serializer:
            Serializer serializer = SerializerFactory.getSerializer(SerializerFactory.XHTML_STRICT);

            // chain everything together (create a pipeline):
            xsltTransformer.setResult(new SAXResult(i18nTransformer));
            i18nTransformer.setResult(new SAXResult(serializer.asContentHandler()));
            serializer.setOutputStream(response.getOutputStream());

            // execute pipeline:
            transformer.transform(new DOMSource(doc), new SAXResult(xsltTransformer));
        }
    } catch (Exception e) {
        throw new ServletException(e.getMessage(), e);
    }
}