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:nl.b3p.catalog.xml.mdeXml2Html.java

private static Document transformIntern(Document doc, String xslName, Boolean viewMode, boolean ignoreAllowed)
        throws JDOMException, IOException, TransformerConfigurationException, TransformerException {
    log.debug("XML before transformation with '" + xslName + "':\n" + DocumentHelper.getDocumentString(doc));
    Templates aTemplates = null;

    if (!transformerTemplates.containsKey(xslName)) {
        InputStream is = getXslStream(xslName);
        if (is != null) {
            if (transformerFactory == null) {
                transformerFactory = TransformerFactory.newInstance();
            }//  w w w.j a  v  a 2s  .c om
            aTemplates = transformerFactory.newTemplates(new StreamSource(is));
        }
        transformerTemplates.put(xslName, aTemplates);
    } else {
        aTemplates = transformerTemplates.get(xslName);
    }

    if (aTemplates == null) {
        if (ignoreAllowed) {
            // ignore transformer
            return doc;
        } else {
            throw new TransformerConfigurationException(
                    "Transformer [" + xslName + "] is missing from configuration!");
        }
    }

    Transformer t = aTemplates.newTransformer();

    Map<String, String> params = CatalogAppConfig.getConfig().getMdeConfig();
    if (params != null) {
        for (Map.Entry<String, String> param : params.entrySet()) {
            t.setParameter(param.getKey(), param.getValue());
        }
        if (viewMode != null) {
            t.setParameter("globalReadonly_init", viewMode.toString());
        }
    }

    JDOMResult result = new JDOMResult();
    t.transform(new JDOMSource(doc), result);
    log.debug("XML after transformation with '" + xslName + "':\n"
            + DocumentHelper.getDocumentString(result.getDocument()));

    return result.getDocument();
}

From source file:org.ambraproject.service.xml.XMLServiceImpl.java

/**
 * Get a translet, compiled stylesheet, for the xslTemplate. If the doc is null
 * use the default template. If the doc is not null then get the DTD version.
 * IF the DTD version does not exist use the default template else use the
 * template associated with that version.
 *
 * @param  doc  the dtd version of document
 * @return Translet for the xslTemplate.
 * @throws javax.xml.transform.TransformerException TransformerException.
 *///from  w w w .j  a v  a  2 s.c o  m
private Transformer getTranslet(Document doc) throws TransformerException, URISyntaxException, IOException {
    Transformer transformer;
    // key is "" if the Attribute does not exist
    String key = (doc == null) ? "default" : doc.getDocumentElement().getAttribute("dtd-version").trim();

    if ((!xslTemplateMap.containsKey(key)) || (key.equalsIgnoreCase(""))) {
        transformer = this.translet.newTransformer();
    } else {
        Templates translet;
        String templateName = xslTemplateMap.get(key);

        // set the Templates
        final TransformerFactory tFactory = TransformerFactory.newInstance();
        //Because we have XSL sheets with import statements.  I override the URI resolver
        //here so the factory knows to look inside the jar files for these files
        tFactory.setURIResolver(new XMLServiceURIResolver());

        //TODO: (performace) We should cache the translets when this class is initialized.  We don't need
        //to parse the XSLs for every transform.

        translet = tFactory.newTemplates(getResourceAsStreamSource(templateName));
        transformer = translet.newTransformer();
    }
    transformer.setParameter("pubAppContext", configuration.getString("ambra.platform.appContext", ""));
    return transformer;
}

From source file:org.apache.axis2.util.XMLPrettyPrinter.java

/**
 * Pretty prints contents of the xml file.
 *
 * @param file//  w w w . jav  a2s .c  om
 */
public static void prettify(final File file) {
    InputStream inputStream = null;
    FileOutputStream outputStream = null;
    byte[] byteArray = null;
    try {
        FileInputStream fin = new FileInputStream(file);
        byteArray = IOUtils.getStreamAsByteArray(fin);
        fin.close();
        inputStream = new ByteArrayInputStream(byteArray);
        outputStream = new FileOutputStream(file);

        Source stylesheetSource = new StreamSource(new ByteArrayInputStream(prettyPrintStylesheet.getBytes()));
        Source xmlSource = new StreamSource(inputStream);

        TransformerFactory tf = TransformerFactory.newInstance();
        Templates templates = tf.newTemplates(stylesheetSource);
        Transformer transformer = templates.newTransformer();
        transformer.setErrorListener(new ErrorListener() {
            public void warning(TransformerException exception) throws TransformerException {
                log.warn("Exception occurred while trying to pretty print file " + file, exception);
            }

            public void error(TransformerException exception) throws TransformerException {
                log.error("Exception occurred while trying to pretty print file " + file, exception);
            }

            public void fatalError(TransformerException exception) throws TransformerException {
                log.error("Exception occurred while trying to pretty print file " + file, exception);
            }
        });
        transformer.transform(xmlSource, new StreamResult(outputStream));

        inputStream.close();
        outputStream.close();
        log.debug("Pretty printed file : " + file);
    } catch (Throwable t) {
        log.debug("Exception occurred while trying to pretty print file " + file, t);

        /* if outputStream is already created, close them, because we are going reassign
         * different value to that. It will leak the file handle (specially in windows, since
         * deleting is going to be an issue)
         */
        if (outputStream != null) {
            try {
                outputStream.close();
            } catch (IOException e) {
                log.debug(e.getMessage(), e);
            }
        }
        try {
            if (byteArray != null) {
                outputStream = new FileOutputStream(file);
                outputStream.write(byteArray);
            }
        } catch (IOException e) {
            log.debug(e.getMessage(), e);
        }
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                log.debug(e.getMessage(), e);
            }
        }
        if (outputStream != null) {
            try {
                outputStream.close();
            } catch (IOException e) {
                log.debug(e.getMessage(), e);
            }
        }
    }
}

From source file:org.apache.axis2.util.XMLPrettyPrinter.java

public static void prettify(OMElement wsdlElement, OutputStream out) throws Exception {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    wsdlElement.serialize(baos);//w ww  . j av a  2  s .co  m

    Source stylesheetSource = new StreamSource(new ByteArrayInputStream(prettyPrintStylesheet.getBytes()));
    Source xmlSource = new StreamSource(new ByteArrayInputStream(baos.toByteArray()));

    TransformerFactory tf = TransformerFactory.newInstance();
    Templates templates = tf.newTemplates(stylesheetSource);
    Transformer transformer = templates.newTransformer();
    transformer.transform(xmlSource, new StreamResult(out));
}

From source file:org.apache.fop.intermediate.AreaTreeParserTestCase.java

/** {@inheritDoc} */
protected Document buildIntermediateDocument(Templates templates) throws Exception {
    Transformer transformer = templates.newTransformer();
    setErrorListener(transformer);//  w  ww .  jav  a 2s  .  c  om

    //Set up XMLRenderer to render to a DOM
    TransformerHandler handler = testAssistant.getTransformerFactory().newTransformerHandler();
    DOMResult domResult = new DOMResult();
    handler.setResult(domResult);

    FOUserAgent userAgent = createUserAgent();

    //Create an instance of the target renderer so the XMLRenderer can use its font setup
    Renderer targetRenderer = userAgent.getRendererFactory().createRenderer(userAgent, getTargetMIME());

    XMLRenderer renderer = new XMLRenderer(userAgent);
    renderer.mimicRenderer(targetRenderer);
    renderer.setContentHandler(handler);

    userAgent.setRendererOverride(renderer);

    Fop fop = fopFactory.newFop(MimeConstants.MIME_FOP_AREA_TREE, userAgent);
    Result res = new SAXResult(fop.getDefaultHandler());
    transformer.transform(new DOMSource(testDoc), res);

    return (Document) domResult.getNode();
}

From source file:org.apache.fop.threading.FOProcessorImpl.java

/** {@inheritDoc} */
public void process(Source src, Templates templates, OutputStream out)
        throws org.apache.fop.apps.FOPException, java.io.IOException {
    FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
    foUserAgent.setBaseURL(src.getSystemId());
    try {//w w w  . jav a2 s. com
        URL url = new URL(src.getSystemId());
        String filename = FilenameUtils.getName(url.getPath());
        foUserAgent.getEventBroadcaster().addEventListener(new AvalonAdapter(getLogger(), filename));
    } catch (MalformedURLException mfue) {
        throw new RuntimeException(mfue);
    }
    Fop fop = fopFactory.newFop(this.mime, foUserAgent, out);

    try {
        Transformer transformer;
        if (templates == null) {
            transformer = factory.newTransformer();
        } else {
            transformer = templates.newTransformer();
        }
        Result res = new SAXResult(fop.getDefaultHandler());
        transformer.transform(src, res);
    } catch (TransformerException e) {
        throw new FOPException(e);
    }
}

From source file:org.apache.fop.threading.IFProcessorImpl.java

/** {@inheritDoc}
 * @throws IFException *//*from   w  ww . j  a va  2s  .  c  o  m*/
public void process(Source src, Templates templates, OutputStream out)
        throws org.apache.fop.apps.FOPException, java.io.IOException, IFException {
    FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
    foUserAgent.setBaseURL(src.getSystemId());
    try {
        URL url = new URL(src.getSystemId());
        String filename = FilenameUtils.getName(url.getPath());
        foUserAgent.getEventBroadcaster().addEventListener(new AvalonAdapter(getLogger(), filename));
    } catch (MalformedURLException mfue) {
        throw new RuntimeException(mfue);
    }

    //Setup target handler
    IFDocumentHandler targetHandler = fopFactory.getRendererFactory().createDocumentHandler(foUserAgent, mime);

    //Setup fonts
    IFUtil.setupFonts(targetHandler);
    targetHandler.setResult(new StreamResult(out));

    try {
        Transformer transformer;
        if (templates == null) {
            transformer = factory.newTransformer();
        } else {
            transformer = templates.newTransformer();
        }
        IFParser parser = new IFParser();
        ContentHandler contentHandler = parser.getContentHandler(targetHandler, foUserAgent);
        Result res = new SAXResult(contentHandler);
        transformer.transform(src, res);
    } catch (TransformerException e) {
        throw new FOPException(e);
    }
}

From source file:org.apache.nifi.processors.standard.TransformXml.java

@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) {
    final FlowFile original = session.get();
    if (original == null) {
        return;//from   w  w  w.j a v  a 2 s .  c  o m
    }

    final ComponentLog logger = getLogger();
    final StopWatch stopWatch = new StopWatch(true);
    final String path = context.getProperty(XSLT_FILE_NAME).isSet()
            ? context.getProperty(XSLT_FILE_NAME).evaluateAttributeExpressions(original).getValue()
            : context.getProperty(XSLT_CONTROLLER_KEY).evaluateAttributeExpressions(original).getValue();
    final Boolean indentOutput = context.getProperty(INDENT_OUTPUT).asBoolean();
    lookupService.set(context.getProperty(XSLT_CONTROLLER).asControllerService(LookupService.class));

    try {
        FlowFile transformed = session.write(original, new StreamCallback() {
            @Override
            public void process(final InputStream rawIn, final OutputStream out) throws IOException {
                try (final InputStream in = new BufferedInputStream(rawIn)) {
                    final Templates templates;
                    if (cache != null) {
                        templates = cache.get(path);
                    } else {
                        templates = newTemplates(context, path);
                    }

                    final Transformer transformer = templates.newTransformer();
                    transformer.setOutputProperty(OutputKeys.INDENT, (indentOutput ? "yes" : "no"));

                    // pass all dynamic properties to the transformer
                    for (final Map.Entry<PropertyDescriptor, String> entry : context.getProperties()
                            .entrySet()) {
                        if (entry.getKey().isDynamic()) {
                            String value = context.newPropertyValue(entry.getValue())
                                    .evaluateAttributeExpressions(original).getValue();
                            transformer.setParameter(entry.getKey().getName(), value);
                        }
                    }

                    // use a StreamSource with Saxon
                    StreamSource source = new StreamSource(in);
                    StreamResult result = new StreamResult(out);
                    transformer.transform(source, result);
                } catch (final Exception e) {
                    throw new IOException(e);
                }
            }
        });
        session.transfer(transformed, REL_SUCCESS);
        session.getProvenanceReporter().modifyContent(transformed, stopWatch.getElapsed(TimeUnit.MILLISECONDS));
        logger.info("Transformed {}", new Object[] { original });
    } catch (ProcessException e) {
        logger.error("Unable to transform {} due to {}", new Object[] { original, e });
        session.transfer(original, REL_FAILURE);
    }
}

From source file:org.apache.ode.utils.xsl.XslTransformHandler.java

/**
 * Transforms a Source document to a result using the XSL stylesheet referenced
 * by the provided URI. The stylesheet MUST have been parsed previously.
 * @param uri referencing the stylesheet
 * @param source XML document/*from   www.j  a  v a  2 s.  co  m*/
 * @param parameters passed to the stylesheet
 * @param resolver used to resolve includes and imports
 * @return result of the transformation (XSL, HTML or text depending of the output method specified in stylesheet.
 */
public Object transform(QName processQName, URI uri, Source source, Map<QName, Object> parameters,
        URIResolver resolver) {
    Templates tm;
    synchronized (_templateCache) {
        tm = (Templates) _templateCache.get(processQName, uri);
    }
    if (tm == null)
        throw new XslTransformException("XSL sheet" + uri + " has not been parsed before transformation!");
    try {
        Transformer tf = tm.newTransformer();
        tf.setURIResolver(resolver);
        if (parameters != null) {
            for (Map.Entry<QName, Object> param : parameters.entrySet()) {
                tf.setParameter(param.getKey().getLocalPart(), param.getValue());
            }
        }
        String method = tf.getOutputProperties().getProperty("method");
        if (method == null || "xml".equals(method)) {
            DOMResult result = new DOMResult();
            tf.transform(source, result);
            Node node = result.getNode();
            if (node.getNodeType() == Node.DOCUMENT_NODE)
                node = ((Document) node).getDocumentElement();
            if (__log.isDebugEnabled())
                __log.debug("Returned node: type=" + node.getNodeType() + ", " + DOMUtils.domToString(node));
            return node;
        } else {
            // text and html outputs are handled the same way
            StringWriter writerResult = new StringWriter();
            StreamResult result = new StreamResult(writerResult);
            tf.transform(source, result);
            writerResult.flush();
            String output = writerResult.toString();
            if (__log.isDebugEnabled())
                __log.debug("Returned string: " + output);
            return output;
        }
    } catch (TransformerConfigurationException e) {
        throw new XslTransformException(e);
    } catch (TransformerException e) {
        throw new XslTransformException("XSL Transformation failed!", e);
    }
}

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

public void execute(ActionInvocation invocation) throws Exception {
    long startTime = System.currentTimeMillis();
    String location = getStylesheetLocation();

    if (location == null) {
        throw new IllegalArgumentException("Parameter 'stylesheetLocation' cannot be null!");
    }/*from  ww w.jav a2 s.c  o  m*/

    if (parse) {
        ValueStack stack = ActionContext.getContext().getValueStack();
        location = TextParseUtil.translateVariables(location, stack);
    }

    try {
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setStatus(status);
        response.setCharacterEncoding(encoding);
        PrintWriter writer = response.getWriter();

        // Create a transformer for the stylesheet.
        Templates templates = null;
        Transformer transformer;
        if (location != null) {
            templates = getTemplates(location);
            transformer = templates.newTransformer();
        } else {
            transformer = TransformerFactory.newInstance().newTransformer();
        }

        transformer.setURIResolver(getURIResolver());
        transformer.setErrorListener(buildErrorListener());

        String mimeType;
        if (templates == null) {
            mimeType = "text/xml"; // no stylesheet, raw xml
        } else {
            mimeType = templates.getOutputProperties().getProperty(OutputKeys.MEDIA_TYPE);
        }

        if (mimeType == null) {
            // guess (this is a servlet, so text/html might be the best guess)
            mimeType = "text/html";
        }

        response.setContentType(mimeType);

        Object result = invocation.getAction();
        if (exposedValue != null) {
            ValueStack stack = invocation.getStack();
            result = stack.findValue(exposedValue);
        }

        Source xmlSource = getDOMSourceForStack(result);

        // Transform the source XML to System.out.
        LOG.debug("xmlSource = {}", xmlSource);
        transformer.transform(xmlSource, new StreamResult(writer));

        writer.flush(); // ...and flush...

        LOG.debug("Time: {}ms", (System.currentTimeMillis() - startTime));

    } catch (Exception e) {
        LOG.error("Unable to render XSLT Template, '{}'", location, e);
        throw e;
    }
}