Example usage for javax.xml.transform TransformerFactory setURIResolver

List of usage examples for javax.xml.transform TransformerFactory setURIResolver

Introduction

In this page you can find the example usage for javax.xml.transform TransformerFactory setURIResolver.

Prototype

public abstract void setURIResolver(URIResolver resolver);

Source Link

Document

Set an object that is used by default during the transformation to resolve URIs used in document(), xsl:import, or xsl:include.

Usage

From source file:org.apache.solr.util.xslt.TransformerProvider.java

/** Return a Templates object for the given filename */
private Templates getTemplates(ResourceLoader loader, String filename, int cacheLifetimeSeconds)
        throws IOException {

    Templates result = null;//from   w  ww  . ja  va2 s .  c o  m
    lastFilename = null;
    try {
        if (log.isDebugEnabled()) {
            log.debug("compiling XSLT templates:" + filename);
        }
        final String fn = "xslt/" + filename;
        final TransformerFactory tFactory = TransformerFactory.newInstance();
        tFactory.setURIResolver(new SystemIdResolver(loader).asURIResolver());
        tFactory.setErrorListener(xmllog);
        final StreamSource src = new StreamSource(loader.openResource(fn),
                SystemIdResolver.createSystemIdFromResourceName(fn));
        try {
            result = tFactory.newTemplates(src);
        } finally {
            // some XML parsers are broken and don't close the byte stream (but they should according to spec)
            IOUtils.closeQuietly(src.getInputStream());
        }
    } catch (Exception e) {
        log.error(getClass().getName(), "newTemplates", e);
        final IOException ioe = new IOException("Unable to initialize Templates '" + filename + "'");
        ioe.initCause(e);
        throw ioe;
    }

    lastFilename = filename;
    lastTemplates = result;
    cacheExpires = System.currentTimeMillis() + (cacheLifetimeSeconds * 1000);

    return result;
}

From source file:org.apache.struts2.views.xslt.XSLTResult.java

protected Templates getTemplates(final String path) throws TransformerException, IOException {
    if (path == null)
        throw new TransformerException("Stylesheet path is null");

    Templates templates = templatesCache.get(path);

    if (noCache || (templates == null)) {
        synchronized (templatesCache) {
            URL resource = ServletActionContext.getServletContext().getResource(path);

            if (resource == null) {
                throw new TransformerException("Stylesheet " + path + " not found in resources.");
            }// w ww . j  a  v a 2  s.  co  m

            LOG.debug("Preparing XSLT stylesheet templates: {}", path);

            TransformerFactory factory = TransformerFactory.newInstance();
            factory.setURIResolver(getURIResolver());
            factory.setErrorListener(buildErrorListener());
            templates = factory.newTemplates(new StreamSource(resource.openStream()));
            templatesCache.put(path, templates);
        }
    }

    return templates;
}

From source file:org.apereo.portal.utils.cache.resource.TemplatesBuilder.java

@Override
public LoadedResource<Templates> loadResource(Resource resource) throws IOException {
    final TransformerFactory transformerFactory = TransformerFactory.newInstance();

    if (this.transformerAttributes != null) {
        for (final Map.Entry<String, Object> attributeEntry : this.transformerAttributes.entrySet()) {
            transformerFactory.setAttribute(attributeEntry.getKey(), attributeEntry.getValue());
        }/*from w w  w .  ja va  2s.com*/
    }

    final ResourceTrackingURIResolver uriResolver = new ResourceTrackingURIResolver(this.resourceLoader);
    transformerFactory.setURIResolver(uriResolver);

    final URI uri = resource.getURI();
    final String systemId = uri.toString();

    final InputStream stream = resource.getInputStream();
    final Templates templates;
    try {
        final StreamSource source = new StreamSource(stream, systemId);
        templates = transformerFactory.newTemplates(source);
    } catch (TransformerConfigurationException e) {
        throw new IOException("Failed to parse stream into Templates", e);
    } finally {
        IOUtils.closeQuietly(stream);
    }

    final Map<Resource, Long> resolvedResources = uriResolver.getResolvedResources();

    return new LoadedResourceImpl<Templates>(templates, resolvedResources);
}

From source file:org.carrot2.dcs.RestProcessorServlet.java

/**
 * /* w ww  .j a v a2  s .c o m*/
 */
private void initXslt(DcsConfig config, ResourceLookup resourceLookup) {
    final TransformerFactory tFactory = TransformerFactory.newInstance();
    tFactory.setURIResolver(new NopURIResolver());

    InputStream xsltStream = null;

    if (StringUtils.isNotBlank(config.xslt)) {
        IResource resource = resourceLookup.getFirst(config.xslt);
        if (resource == null) {
            config.logger.warn(
                    "XSLT stylesheet " + config.xslt + " not found. No XSLT transformation will be applied.");
            return;
        }

        try {
            xsltStream = resource.open();
            xsltTemplates = tFactory.newTemplates(new StreamSource(xsltStream));
            config.logger.info("XSL stylesheet loaded successfully from: " + config.xslt);
        } catch (IOException e) {
            config.logger.warn("Could not load stylesheet, no XSLT transform will be applied.", e);
        } catch (TransformerConfigurationException e) {
            config.logger.warn("Could not load stylesheet, no XSLT transform will be applied", e);
        } finally {
            CloseableUtils.close(xsltStream);
        }
    }
}

From source file:org.carrot2.workbench.core.ui.actions.SaveAsXMLActionDelegate.java

public SaveAsXMLActionDelegate(ProcessingResult result, SearchEditor.SaveOptions options) {
    this.results = result;
    this.options = options;

    final TransformerFactory tFactory = TransformerFactory.newInstance();
    tFactory.setURIResolver(new NopURIResolver());

    final String xslt = System.getProperty("carrot2.workbench.save-as-xml.xslt");
    InputStream xsltStream = null;

    Transformer t = null;/*www  .  j a v  a2 s.com*/
    try {
        if (StringUtils.isNotBlank(xslt)) {
            try {
                xsltStream = new FileInputStream(xslt);
                t = tFactory.newTransformer(new StreamSource(xsltStream));
            } catch (FileNotFoundException e) {
                Utils.showError(new Status(Status.WARNING, WorkbenchCorePlugin.PLUGIN_ID,
                        "Could not XSLT stylesheet", e));
                t = tFactory.newTransformer();
            } finally {
                CloseableUtils.close(xsltStream);
            }
        } else {
            t = tFactory.newTransformer();
        }
    } catch (TransformerConfigurationException e1) {
        throw ExceptionUtils.wrapAsRuntimeException(e1);
    }

    transformer = t;
}

From source file:org.mycore.common.content.transformer.MCRXSLTransformer.java

public synchronized void setTransformerFactory(String factoryClass)
        throws TransformerFactoryConfigurationError {
    TransformerFactory transformerFactory = Optional.ofNullable(factoryClass)
            .map(c -> TransformerFactory.newInstance(c, null)).orElseGet(TransformerFactory::newInstance);
    LOGGER.info("Transformerfactory: " + transformerFactory.getClass().getName());
    transformerFactory.setURIResolver(URI_RESOLVER);
    transformerFactory.setErrorListener(MCRErrorListener.getInstance());
    if (transformerFactory.getFeature(SAXSource.FEATURE) && transformerFactory.getFeature(SAXResult.FEATURE)) {
        this.tFactory = (SAXTransformerFactory) transformerFactory;
    } else {// w ww . ja  v a2  s  .c o m
        throw new MCRConfigurationException("Transformer Factory " + transformerFactory.getClass().getName()
                + " does not implement SAXTransformerFactory");
    }
}

From source file:org.pentaho.platform.util.xml.XmlHelper.java

/**
 * Use the transform specified by xslSrc and transform the document specified by docSrc, and return the resulting
 * document./*from  w  w  w.j a  va  2  s . co  m*/
 * 
 * @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 resolver
 *          URIResolver instance to resolve URI's in the output document.
 * 
 * @return StringBuffer containing the XML results of the transform
 * @throws TransformerConfigurationException
 *           if the TransformerFactory fails to create a Transformer.
 * @throws TransformerException
 *           if actual transform fails.
 */
protected static final StringBuffer transformXml(final StreamSource xslSrc, final StreamSource docSrc,
        final Map params, final URIResolver resolver)
        throws TransformerConfigurationException, TransformerException {

    StringBuffer sb = null;
    StringWriter writer = new StringWriter();

    TransformerFactory tf = TransformerFactory.newInstance();
    if (null != resolver) {
        tf.setURIResolver(resolver);
    }
    // TODO need to look into compiling the XSLs...
    Transformer t = tf.newTransformer(xslSrc); // can throw
    // TransformerConfigurationException
    // Start the transformation
    if (params != null) {
        Set keys = params.keySet();
        Iterator it = keys.iterator();
        String key, val;
        while (it.hasNext()) {
            key = (String) it.next();
            val = (String) params.get(key);
            if (val != null) {
                t.setParameter(key, val);
            }
        }
    }
    t.transform(docSrc, new StreamResult(writer)); // can throw
    // TransformerException
    sb = writer.getBuffer();

    return sb;
}

From source file:org.roda.core.common.RodaUtils.java

/**
 * INFO 20160711 this method does not cache stylesheet related resources
 *//* w w w.j  a v  a  2s . c om*/
public static void applyStylesheet(Reader xsltReader, Reader fileReader, Map<String, String> parameters,
        Writer result) throws IOException, TransformerException {

    TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl();
    factory.setURIResolver(new RodaURIFileResolver());
    Source xsltSource = new StreamSource(xsltReader);
    Transformer transformer = factory.newTransformer(xsltSource);
    for (Entry<String, String> parameter : parameters.entrySet()) {
        transformer.setParameter(parameter.getKey(), parameter.getValue());
    }
    try {
        XMLReader xmlReader = XMLReaderFactory.createXMLReader();
        xmlReader.setEntityResolver(new RodaEntityResolver());
        InputSource source = new InputSource(fileReader);
        Source text = new SAXSource(xmlReader, source);
        transformer.transform(text, new StreamResult(result));
    } catch (SAXException se) {
        LOGGER.error(se.getMessage(), se);
    }
}

From source file:org.sakaiproject.tool.assessment.qti.util.XmlUtil.java

/**
 * Create a transformer from a stylesheet
 *
 * @param stylesheet Document//  ww w  . ja  v a 2 s.  c  o m
 *
 * @return the Transformer
 */
public static Transformer createTransformer(Document stylesheet) {

    if (log.isDebugEnabled()) {
        log.debug("createTransformer(Document " + stylesheet + ")");
    }

    Transformer transformer = null;
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    URIResolver resolver = new URIResolver();
    transformerFactory.setURIResolver(resolver);

    try {
        DOMSource source = new DOMSource(stylesheet);
        String systemId = "/xml/xsl/report";
        source.setSystemId(systemId);
        transformer = transformerFactory.newTransformer(source);
    } catch (TransformerConfigurationException e) {
        log.error(e.getMessage(), e);
    }

    return transformer;
}

From source file:org.sakaiproject.tool.assessment.qti.util.XmlUtil.java

/**
 * Create a transformer from a stylesheet
 *
 * @param source DOMSource/* w ww.  ja v a  2  s  . c o  m*/
 *
 * @return the Transformer
 */
public static Transformer createTransformer(DOMSource source) {
    if (log.isDebugEnabled()) {
        log.debug("createTransformer(DOMSource " + source + ")");
    }

    Transformer transformer = null;
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    URIResolver resolver = new URIResolver();
    transformerFactory.setURIResolver(resolver);

    try {
        transformer = transformerFactory.newTransformer(source);
    } catch (TransformerConfigurationException e) {
        log.error(e.getMessage(), e);
    }

    return transformer;

}