Example usage for javax.xml.transform TransformerFactory setFeature

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

Introduction

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

Prototype

public abstract void setFeature(String name, boolean value) throws TransformerConfigurationException;

Source Link

Document

Set a feature for this TransformerFactory and Transformer s or Template s created by this factory.

Usage

From source file:org.apache.syncope.installer.utilities.FileSystemUtils.java

public static void writeXML(final Document doc, final OutputStream out)
        throws IOException, TransformerException {
    final TransformerFactory factory = TransformerFactory.newInstance();
    factory.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, true);
    final Transformer transformer = factory.newTransformer();
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
    transformer.setOutputProperty(OutputKeys.METHOD, "xml");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
    transformer.transform(new DOMSource(doc),
            new StreamResult(new OutputStreamWriter(out, Charset.forName("UTF-8"))));
    out.close();//  w  w  w .  j ava  2s  .  com
}

From source file:org.apache.xml.security.transforms.implementations.TransformXSLT.java

protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input, OutputStream baos,
        Transform transformObject) throws IOException, TransformationException {
    try {/*from www.  j a v  a  2s .  c  o m*/
        Element transformElement = transformObject.getElement();

        Element xsltElement = XMLUtils.selectNode(transformElement.getFirstChild(), XSLTSpecNS, "stylesheet",
                0);

        if (xsltElement == null) {
            Object exArgs[] = { "xslt:stylesheet", "Transform" };

            throw new TransformationException("xml.WrongContent", exArgs);
        }

        TransformerFactory tFactory = TransformerFactory.newInstance();
        // Process XSLT stylesheets in a secure manner
        tFactory.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", Boolean.TRUE);

        /*
         * This transform requires an octet stream as input. If the actual
         * input is an XPath node-set, then the signature application should
         * attempt to convert it to octets (apply Canonical XML]) as described
         * in the Reference Processing Model (section 4.3.3.2).
         */
        Source xmlSource = new StreamSource(new ByteArrayInputStream(input.getBytes()));
        Source stylesheet;

        /*
         * This complicated transformation of the stylesheet itself is necessary
         * because of the need to get the pure style sheet. If we simply say
         * Source stylesheet = new DOMSource(this.xsltElement);
         * whereby this.xsltElement is not the rootElement of the Document,
         * this causes problems;
         * so we convert the stylesheet to byte[] and use this as input stream
         */
        {
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            Transformer transformer = tFactory.newTransformer();
            DOMSource source = new DOMSource(xsltElement);
            StreamResult result = new StreamResult(os);

            transformer.transform(source, result);

            stylesheet = new StreamSource(new ByteArrayInputStream(os.toByteArray()));
        }

        Transformer transformer = tFactory.newTransformer(stylesheet);

        // Force Xalan to use \n as line separator on all OSes. This 
        // avoids OS specific signature validation failures due to line
        // separator differences in the transformed output. Unfortunately,
        // this is not a standard JAXP property so will not work with non-Xalan
        // implementations.
        try {
            transformer.setOutputProperty("{http://xml.apache.org/xalan}line-separator", "\n");
        } catch (Exception e) {
            log.warn("Unable to set Xalan line-separator property: " + e.getMessage());
        }

        if (baos == null) {
            ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
            StreamResult outputTarget = new StreamResult(baos1);
            transformer.transform(xmlSource, outputTarget);
            return new XMLSignatureInput(baos1.toByteArray());
        }
        StreamResult outputTarget = new StreamResult(baos);

        transformer.transform(xmlSource, outputTarget);
        XMLSignatureInput output = new XMLSignatureInput((byte[]) null);
        output.setOutputStream(baos);
        return output;
    } catch (XMLSecurityException ex) {
        Object exArgs[] = { ex.getMessage() };

        throw new TransformationException("generic.EmptyMessage", exArgs, ex);
    } catch (TransformerConfigurationException ex) {
        Object exArgs[] = { ex.getMessage() };

        throw new TransformationException("generic.EmptyMessage", exArgs, ex);
    } catch (TransformerException ex) {
        Object exArgs[] = { ex.getMessage() };

        throw new TransformationException("generic.EmptyMessage", exArgs, ex);
    }
}

From source file:org.wso2.carbon.tools.wsdlvalidator.WsdlValidator.java

/**
 * Load XML data to a temporary file.//from   ww  w  .j  a  v a  2  s  .  com
 *
 * @param document XML DOM
 * @return URL of the file
 * @throws IOException          on error writing to file
 * @throws TransformerException on transforming error
 */
private URL loadXMLToFile(Document document) throws TransformerException, IOException {
    DOMSource source = new DOMSource(document);
    File tempFile = File.createTempFile("temp", ".txt");
    tempFile.deleteOnExit();
    FileWriter writer = new FileWriter(tempFile);
    StreamResult result = new StreamResult(writer);
    TransformerFactory transformerFactory;
    try {
        transformerFactory = TransformerFactory
                .newInstance("com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl", null);
    } catch (NoSuchMethodError e) {
        log.info("TransformerFactory.newInstance(String, ClassLoader) method not found. "
                + "Using TransformerFactory.newInstance()");
        transformerFactory = TransformerFactory.newInstance();
    }
    transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
    Transformer transformer = transformerFactory.newTransformer();
    transformer.transform(source, result);
    return tempFile.toURI().toURL();
}

From source file:org.wso2.carbon.wsdl2form.Util.java

/**
 * Load XML data to a temporary file.//from   w  w  w. j a v a2 s .co m
 *
 * @param document XML URL
 * @return URL of the file
 * @throws IOException          on error writing to file
 */
private static File loadXMLToFile(Document document) throws IOException {
    DOMSource source = new DOMSource(document);
    File tempFile = File.createTempFile("temp", ".txt");
    tempFile.deleteOnExit();
    try (FileWriter writer = new FileWriter(tempFile)) {
        StreamResult result = new StreamResult(writer);
        TransformerFactory transformerFactory = getTransformerFactory();
        transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(source, result);
    } catch (IOException e) {
        String msg = "Error occurred when creating FileWriter";
        log.error(msg, e);
        throw new AxisFault(msg, e);
    } catch (TransformerException e) {
        String msg = "Error occurred when transforming the document safely";
        log.error(msg, e);
        throw new AxisFault(msg, e);
    }
    return tempFile;
}