Example usage for javax.xml.transform Templates newTransformer

List of usage examples for javax.xml.transform Templates newTransformer

Introduction

In this page you can find the example usage for javax.xml.transform Templates newTransformer.

Prototype

Transformer newTransformer() throws TransformerConfigurationException;

Source Link

Document

Create a new transformation context for this Templates object.

Usage

From source file:org.apache.synapse.mediators.transform.XSLTMediator.java

/**
 * Perform actual XSLT transformation// www.  j  a v a  2  s  .  c  om
 * @param synCtx current message
 * @param synLog the logger to be used
 */
private void performXSLT(MessageContext synCtx, SynapseLog synLog) {

    OMNode sourceNode = source.selectOMNode(synCtx, synLog);
    boolean isSoapEnvelope = (sourceNode == synCtx.getEnvelope());
    boolean isSoapBody = (sourceNode == synCtx.getEnvelope().getBody());
    boolean isSoapHeader = (sourceNode == synCtx.getEnvelope().getHeader());

    // Derive actual key from message context
    String generatedXsltKey = xsltKey.evaluateValue(synCtx);

    // get templates from generatedXsltKey
    Templates cachedTemplates = null;

    if (synLog.isTraceTraceEnabled()) {
        synLog.traceTrace("Transformation source : " + sourceNode.toString());
    }

    // determine if it is needed to create or create the template
    if (isCreationOrRecreationRequired(synCtx)) {
        // many threads can see this and come here for acquiring the lock
        synchronized (transformerLock) {
            // only first thread should create the template
            if (isCreationOrRecreationRequired(synCtx)) {
                cachedTemplates = createTemplate(synCtx, synLog, generatedXsltKey);
            } else {
                cachedTemplates = cachedTemplatesMap.get(generatedXsltKey);
            }
        }
    } else {
        //If already cached template then load it from cachedTemplatesMap
        synchronized (transformerLock) {
            cachedTemplates = cachedTemplatesMap.get(generatedXsltKey);
        }
    }

    try {
        // perform transformation
        Transformer transformer = null;
        try {
            transformer = cachedTemplates.newTransformer();
        } catch (NullPointerException ex) {
            handleException("Unable to create Transformer using cached template", ex, synCtx);
        }
        if (!properties.isEmpty()) {
            // set the parameters which will pass to the Transformation
            applyProperties(transformer, synCtx, synLog);
        }

        transformer.setErrorListener(new ErrorListenerImpl(synLog, XSLT_TRANSFORMATION_ACTIVITY));

        String outputMethod = transformer.getOutputProperty(OutputKeys.METHOD);
        String encoding = transformer.getOutputProperty(OutputKeys.ENCODING);

        if (synLog.isTraceOrDebugEnabled()) {
            synLog.traceOrDebug("output method: " + outputMethod + "; encoding: " + encoding);
        }

        ResultBuilderFactory.Output output;
        if ("text".equals(outputMethod)) {
            synLog.traceOrDebug("Processing non SOAP/XML (text) transformation result");
            output = ResultBuilderFactory.Output.TEXT;
        } else if (isSoapEnvelope) {
            output = ResultBuilderFactory.Output.SOAP_ENVELOPE;
        } else {
            output = ResultBuilderFactory.Output.ELEMENT;
        }

        SynapseEnvironment synEnv = synCtx.getEnvironment();
        ResultBuilder resultBuilder = resultBuilderFactory.createResultBuilder(synEnv, output);
        SourceBuilder sourceBuilder = sourceBuilderFactory.createSourceBuilder(synEnv);

        if (synLog.isTraceOrDebugEnabled()) {
            synLog.traceOrDebug("Using " + sourceBuilder.getClass().getName());
            synLog.traceOrDebug("Using " + resultBuilder.getClass().getName());
        }

        try {
            transformer.transform(sourceBuilder.getSource((OMElement) sourceNode), resultBuilder.getResult());
        } finally {
            sourceBuilder.release();
        }

        synLog.traceOrDebug("Transformation completed - processing result");

        /**
         * If user have set transform.xslt.result.disableBuild property to true, we do not build the message to
         * OMElement,
         */
        if (targetPropertyName != null && resultBuilder instanceof StreamResultBuilder
                && synCtx.getProperty(TRANSFORM_XSLT_RESULT_DISABLE_BUILD) != null
                && synCtx.getProperty(TRANSFORM_XSLT_RESULT_DISABLE_BUILD) instanceof String
                && "true".equalsIgnoreCase((String) synCtx.getProperty(TRANSFORM_XSLT_RESULT_DISABLE_BUILD))) {

            // add result XML string as a message context property to the message
            if (synLog.isTraceOrDebugEnabled()) {
                synLog.traceOrDebug("Adding result string as message context property : " + targetPropertyName);
            }

            synCtx.setProperty(targetPropertyName, ((StreamResultBuilder) resultBuilder).getResultAsString());
            return;
        }

        // get the result OMElement
        OMElement result = null;
        try {
            result = resultBuilder.getNode(encoding == null ? null : Charset.forName(encoding));
        } catch (Exception e) {
            throw new SynapseException("Unable to create an OMElement using XSLT result ", e);
        }

        if (synLog.isTraceTraceEnabled()) {
            synLog.traceTrace("Transformation result : " + result.toString());
        }

        if (targetPropertyName != null) {
            // add result XML as a message context property to the message
            if (synLog.isTraceOrDebugEnabled()) {
                synLog.traceOrDebug("Adding result as message context property : " + targetPropertyName);
            }
            synCtx.setProperty(targetPropertyName, result);
        } else {
            if (synLog.isTraceOrDebugEnabled()) {
                synLog.traceOrDebug(
                        "Replace " + (isSoapEnvelope ? "SOAP envelope" : isSoapBody ? "SOAP body" : "node")
                                + " with result");
            }

            if (isSoapEnvelope) {
                try {
                    synCtx.setEnvelope((SOAPEnvelope) result);
                } catch (AxisFault ex) {
                    handleException("Unable to replace SOAP envelope with result", ex, synCtx);
                }

            } else if (isSoapBody) {
                for (Iterator itr = synCtx.getEnvelope().getBody().getChildElements(); itr.hasNext();) {
                    OMElement child = (OMElement) itr.next();
                    child.detach();
                }

                for (Iterator itr = result.getChildElements(); itr.hasNext();) {
                    OMElement child = (OMElement) itr.next();
                    synCtx.getEnvelope().getBody().addChild(child);
                }

            } else if (isSoapHeader) {
                for (Iterator itr = synCtx.getEnvelope().getHeader().getChildElements(); itr.hasNext();) {
                    OMElement child = (OMElement) itr.next();
                    child.detach();
                }

                for (Iterator itr = result.getChildElements(); itr.hasNext();) {
                    OMElement child = (OMElement) itr.next();
                    synCtx.getEnvelope().getHeader().addChild(child);
                }

            } else {
                sourceNode.insertSiblingAfter(result);
                sourceNode.detach();
            }
        }

    } catch (TransformerException e) {
        handleException("Error performing XSLT transformation using : " + xsltKey, e, synCtx);
    }
}

From source file:org.dd4t.core.util.XSLTransformer.java

private Transformer getTransformer(String resource) throws TransformerConfigurationException {
    Transformer trans = null;// w  w w .  j a va 2  s  .co  m
    Templates temp = null;

    // first, lets get the template
    if (CACHE.containsKey(resource)) {
        temp = CACHE.get(resource);
    } else {

        InputStream stream = null;
        try {
            stream = getClass().getResourceAsStream(resource);
            if (null == stream) {
                throw new TransformerConfigurationException(
                        "Resource '" + resource + "' could not be loaded. ");
            }
            StreamSource source = new StreamSource(stream);

            // instantiate a transformer
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            temp = transformerFactory.newTemplates(source);

            CACHE.put(resource, temp);
        } finally {
            IOUtils.closeQuietly(stream);
        }
    }

    trans = temp.newTransformer();
    return trans;
}

From source file:org.directwebremoting.drapgen.generate.gi.GiType.java

/**
 * @param templateDir The base directory for the templates
 * @param defaultTemplate The extra path (from templateDir) to the default
 *
 *//*from  ww w .  ja  v  a 2s .c  o m*/
public void transform(String templateDir, String defaultTemplate) {
    try {
        File templateFile = new File(templateDir + xmlClassName.replaceFirst("\\.xml$", ".xslt"));
        if (!templateFile.canRead()) {
            templateFile = new File(templateDir + defaultTemplate);
        }

        // Read the XSLT
        Source xslSource = new StreamSource(templateFile);

        Templates template = templatesCache.get(templateFile);
        if (template == null) {
            template = factory.newTemplates(xslSource);
            templatesCache.put(templateFile, template);
        }

        Source xmlSource = new DOMSource(document);
        Transformer javaTransformer = template.newTransformer();
        javaTransformer.transform(xmlSource, new StreamResult(output));
    } catch (TransformerException ex) {
        SourceLocator locator = ex.getLocator();
        log.fatal("Failed to transform", ex);
        log.warn("Line: " + locator.getLineNumber() + ", Column: " + locator.getColumnNumber());
        log.warn("PublicId: " + locator.getPublicId());
        log.warn("SystemId: " + locator.getSystemId());
    } catch (Exception ex) {
        log.warn("Processing Error for " + xmlFile.getAbsolutePath(), ex);
    }
}

From source file:org.docx4j.XmlUtils.java

/**
 * /*from w  w  w  . j  a  va 2 s . com*/
 * Transform an input document using XSLT
 * 
 * @param doc
 * @param xslt
 * @param transformParameters
 * @param result
 * @throws Docx4JException In case serious transformation errors occur
 */
public static void transform(javax.xml.transform.Source source, javax.xml.transform.Templates template,
        Map<String, Object> transformParameters, javax.xml.transform.Result result) throws Docx4JException {

    if (source == null) {
        Throwable t = new Throwable();
        throw new Docx4JException("Null Source doc", t);
    }

    // Use the template to create a transformer
    // A Transformer may not be used in multiple threads running concurrently. 
    // Different Transformers may be used concurrently by different threads.
    // A Transformer may be used multiple times. Parameters and output properties 
    // are preserved across transformations.      
    javax.xml.transform.Transformer xformer;
    try {
        xformer = template.newTransformer();
    } catch (TransformerConfigurationException e) {
        throw new Docx4JException("The Transformer is ill-configured", e);
    }

    log.info("Using " + xformer.getClass().getName());

    if (xformer.getClass().getName().equals("org.apache.xalan.transformer.TransformerImpl")) {

        if (Docx4jProperties.getProperty("docx4j.xalan.XALANJ-2419.workaround", false)) {
            // Use our patched serializer, which fixes Unicode astral character
            // issue. See https://issues.apache.org/jira/browse/XALANJ-2419

            log.info("Working around https://issues.apache.org/jira/browse/XALANJ-2419");

            Properties p = xformer.getOutputProperties();
            String method = p.getProperty("method");
            System.out.println("method: " + method);
            if (method == null || method.equals("xml")) {

                ((org.apache.xalan.transformer.TransformerImpl) xformer).setOutputProperty(
                        S_KEY_CONTENT_HANDLER, "org.docx4j.org.apache.xml.serializer.ToXMLStream");

            } else if (method.equals("html")) {

                ((org.apache.xalan.transformer.TransformerImpl) xformer).setOutputProperty(
                        S_KEY_CONTENT_HANDLER, "org.docx4j.org.apache.xml.serializer.ToHTMLStream");

            } else if (method.equals("text")) {

                ((org.apache.xalan.transformer.TransformerImpl) xformer).setOutputProperty(
                        S_KEY_CONTENT_HANDLER, "org.docx4j.org.apache.xml.serializer.ToTextStream");

            } else {

                log.warn("fallback for method: " + method);
                ((org.apache.xalan.transformer.TransformerImpl) xformer).setOutputProperty(
                        S_KEY_CONTENT_HANDLER, "org.docx4j.org.apache.xml.serializer.ToUnknownStream");

            }

            /* That wasn't quite enough:
             * 
               at org.docx4j.org.apache.xml.serializer.ToXMLStream.startDocumentInternal(ToXMLStream.java:143)
               at org.docx4j.org.apache.xml.serializer.SerializerBase.startDocument(SerializerBase.java:1190)
               at org.apache.xml.serializer.ToSAXHandler.startDocumentInternal(ToSAXHandler.java:97)
               at org.apache.xml.serializer.ToSAXHandler.flushPending(ToSAXHandler.java:273)
               at org.apache.xml.serializer.ToXMLSAXHandler.startPrefixMapping(ToXMLSAXHandler.java:350)
               at org.apache.xml.serializer.ToXMLSAXHandler.startPrefixMapping(ToXMLSAXHandler.java:320)
               at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:1317)
             *
             * (TransformerImpl's createSerializationHandler makes a new org.apache.xml.serializer.ToXMLSAXHandler.ToXMLSAXHandler
             * and that's hard coded.)
             * 
             * But it seems to be enough now...
                        
             */
        }

    } else {

        log.error("Detected " + xformer.getClass().getName()
                + ", but require org.apache.xalan.transformer.TransformerImpl. "
                + "Ensure Xalan 2.7.x is on your classpath!");
    }
    LoggingErrorListener errorListener = new LoggingErrorListener(false);
    xformer.setErrorListener(errorListener);

    if (transformParameters != null) {
        Iterator parameterIterator = transformParameters.entrySet().iterator();
        while (parameterIterator.hasNext()) {
            Map.Entry pairs = (Map.Entry) parameterIterator.next();

            if (pairs.getKey() == null) {
                log.info("Skipped null key");
                // pairs = (Map.Entry)parameterIterator.next();
                continue;
            }

            if (pairs.getKey().equals("customXsltTemplates"))
                continue;

            if (pairs.getValue() == null) {
                log.warn("parameter '" + pairs.getKey() + "' was null.");
            } else {
                xformer.setParameter((String) pairs.getKey(), pairs.getValue());
            }
        }
    }

    /* SUPER DEBUGGING
    // http://xml.apache.org/xalan-j/usagepatterns.html#debugging
    // debugging
    // Set up a PrintTraceListener object to print to a file.
    java.io.FileWriter fw = new java.io.FileWriter("/tmp/xslt-events" + xsltCount++ + ".log");
    java.io.PrintWriter pw = new java.io.PrintWriter(fw);
    PrintTraceListener ptl = new PrintTraceListener(pw);
            
    // Print information as each node is 'executed' in the stylesheet.
    ptl.m_traceElements = true;
    // Print information after each result-tree generation event.
    ptl.m_traceGeneration = true;
    // Print information after each selection event.
    ptl.m_traceSelection = true;
    // Print information whenever a template is invoked.
    ptl.m_traceTemplates = true;
    // Print information whenever an extension is called.
    ptl.m_traceExtension = true;
    TransformerImpl transformerImpl = (TransformerImpl)xformer;
            
      // Register the TraceListener with the TraceManager associated
      // with the TransformerImpl.
      TraceManager trMgr = transformerImpl.getTraceManager();
      trMgr.addTraceListener(ptl);
            
    */
    // DEBUGGING
    // use the identity transform if you want to send wordDocument;
    // otherwise you'll get the XHTML
    // javax.xml.transform.Transformer xformer = tfactory.newTransformer();
    try {
        xformer.transform(source, result);
    } catch (TransformerException e) {
        throw new Docx4JException("Cannot perform the transformation", e);
    } finally {
        //pw.flush();
    }

}

From source file:org.easyrec.util.core.Web.java

/**
 * This function returns a processed HTML Page from a given XML
 * transformed with an XSL.//  w  w w . j av  a2  s  . co  m
 *
 * @param xmlUrl String
 * @param xslUrl String
 * @return String
 * @throws Exception Exception
 */
@SuppressWarnings({ "UnusedDeclaration" })
public static String transformXML(String xmlUrl, String xslUrl) throws Exception {

    String sHTML;

    try {

        TransformerFactory factory = TransformerFactory.newInstance();

        Templates sourceTemplate = factory.newTemplates(new StreamSource(xslUrl));

        Transformer sourceTransformer = sourceTemplate.newTransformer();

        URI uri = new URI("http", xmlUrl.replace("http:", ""), null);

        Source source = new StreamSource(uri.toURL().toString());

        StringWriter writer = new StringWriter();
        Result localResult = new StreamResult(writer);

        sourceTransformer.transform(source, localResult);
        sHTML = writer.toString();

    } catch (Exception e) {
        logger.warn("An error occurred!", e);
        throw new Exception();
    }
    return sHTML;
}

From source file:org.easyrec.utils.Web.java

/**
 * This function returns a processed HTML Page from a given XML
 * transformed with an XSL.//  w  ww  .  j a v a  2 s  .c  om
 *
 * @param xmlUrl String
 * @param xslUrl String
 * @return String
 * @throws Exception Exception
 */
@SuppressWarnings({ "UnusedDeclaration" })
public static String transformXML(String xmlUrl, String xslUrl) throws Exception {

    String sHTML;

    try {

        TransformerFactory factory = TransformerFactory.newInstance();

        Templates sourceTemplate = factory.newTemplates(new StreamSource(xslUrl));

        Transformer sourceTransformer = sourceTemplate.newTransformer();

        URI uri = new URI("http", xmlUrl.replace("http:", ""), null);

        Source source = new StreamSource(uri.toURL().toString());

        StringWriter writer = new StringWriter();
        Result localResult = new StreamResult(writer);

        sourceTransformer.transform(source, localResult);
        sHTML = writer.toString();

    } catch (Exception e) {
        throw new Exception();
    }
    return sHTML;
}

From source file:org.geoserver.wfs.xslt.config.TransformRepository.java

/**
 * Returns the XSLT transformer for a specific {@link TransformInfo}
 * /*from w  ww  .  j av  a2 s .  c  o  m*/
 * @param name
 * @return
 */
public Transformer getTransformer(TransformInfo info) throws IOException {
    File txFile = getTransformFile(info);

    Templates templates = transformCache.getItem(txFile);
    if (templates != null) {
        try {
            return templates.newTransformer();
        } catch (TransformerConfigurationException e) {
            throw new WFSException("Failed to load XSLT transformation " + info.getXslt(), e);
        }
    } else {
        throw new IOException("No XLST found at " + txFile.getAbsolutePath());
    }
}

From source file:org.ikasan.filetransfer.xml.transform.DefaultXSLTransformer.java

/**
 * Compiles the specified XSL stylesheet into translets and
 * registers them using the internal mapping table.
 *
 * @param name      - the unique name being mapped to the source instance
 *                     holding XSL stylesheet in the internal
 *                     mapping table.//from   w  w w  . j a v a 2  s.  com
 * @param xslSource - the source object that holds an XSL stylesheet URI,
 *                     input stream, etc.
 * @param useXSLTC  - the flag indicating whether to use XSLTC.
 * @throws TransformerConfigurationException 
 */
private synchronized void registerTemplates(String name, Source xslSource, boolean useXSLTC)
        throws TransformerConfigurationException {
    if (name == null)
        throw new NullPointerException("Translet reference name can't be null");

    if (name.trim().length() == 0)
        throw new IllegalArgumentException("Translet reference name can't be empty");

    if (xslSource == null)
        throw new NullPointerException("XSL stylesheet source can't be null");

    if (useXSLTC == true) {
        // Try to get the translet instance associated with
        // the stylesheet name from the translet mapping table
        logger.debug("Trying to get translet for [" + name + "].");
        Templates translet = translets.get(name);

        // First time, compile the stylesheet to create a new translet
        // Add it to the internal mapping table for the later use
        if (translet == null) {
            logger.debug("First time, compiling stylesheet...");
            logger.debug("XSL stylesheet URI =[" + xslSource.getSystemId() + "].");

            translet = this.newTemplates(xslSource);
            translets.put(new String(name), translet);
            logger.debug("Name:[" + name + "] => XSLTC:[" + translet + "].");
        } else {
            // Log it to ensure we are using the same translet
            logger.debug("Name:[" + name + "] => XSLTC:[" + translet + "].");
        }

        // Create a new transformation context for this translet object
        // Set it as current Transformer instance
        this.transformer = translet.newTransformer();
    } else {
        // Get a new TransformerFactory instance
        TransformerFactory tFactory = this.newTransformerFactory();
        this.transformer = tFactory.newTransformer(xslSource);
    }

    // Also clear all parameters just in case
    logger.debug("Got a new Transformer.");
    this.transformer.clearParameters();
}

From source file:org.jahia.services.importexport.ImportExportBaseService.java

private Transformer getTransformer(String xsl) throws TransformerConfigurationException {
    Templates templates = xsltTemplates.get(xsl);
    if (templates == null) {
        templates = new TransformerFactoryImpl().newTemplates(new StreamSource(new File(xsl)));
        xsltTemplates.put(xsl, templates);
    }//  w ww .j  a va2s. c  o m

    return templates.newTransformer();
}

From source file:org.kuali.rice.kew.mail.service.impl.StyleableEmailContentServiceImpl.java

protected static String transform(Templates style, Document doc) {
    StringWriter writer = new StringWriter();
    StreamResult result = new StreamResult(writer);

    try {/* ww w . j  av a  2  s. co  m*/
        style.newTransformer().transform(new DOMSource(doc), result);
        return writer.toString();
    } catch (TransformerException te) {
        String message = "Error transforming DOM";
        LOG.error(message, te);
        throw new WorkflowRuntimeException(message, te);
    }
}