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

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

Introduction

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

Prototype

public abstract TransformerHandler newTransformerHandler(Templates templates)
        throws TransformerConfigurationException;

Source Link

Document

Get a TransformerHandler object that can process SAX ContentHandler events into a Result, based on the Templates argument.

Usage

From source file:Pipe.java

public static void main(String[] args)
        throws TransformerException, TransformerConfigurationException, SAXException, IOException {
    // Instantiate  a TransformerFactory.
    TransformerFactory tFactory = TransformerFactory.newInstance();
    // Determine whether the TransformerFactory supports The use uf SAXSource 
    // and SAXResult
    if (tFactory.getFeature(SAXSource.FEATURE) && tFactory.getFeature(SAXResult.FEATURE)) {
        // Cast the TransformerFactory to SAXTransformerFactory.
        SAXTransformerFactory saxTFactory = ((SAXTransformerFactory) tFactory);
        // Create a TransformerHandler for each stylesheet.
        TransformerHandler tHandler1 = saxTFactory.newTransformerHandler(new StreamSource("foo1.xsl"));
        TransformerHandler tHandler2 = saxTFactory.newTransformerHandler(new StreamSource("foo2.xsl"));
        TransformerHandler tHandler3 = saxTFactory.newTransformerHandler(new StreamSource("foo3.xsl"));

        // Create an XMLReader.
        XMLReader reader = XMLReaderFactory.createXMLReader();
        reader.setContentHandler(tHandler1);
        reader.setProperty("http://xml.org/sax/properties/lexical-handler", tHandler1);

        tHandler1.setResult(new SAXResult(tHandler2));
        tHandler2.setResult(new SAXResult(tHandler3));

        // transformer3 outputs SAX events to the serializer.
        java.util.Properties xmlProps = OutputPropertiesFactory.getDefaultMethodProperties("xml");
        xmlProps.setProperty("indent", "yes");
        xmlProps.setProperty("standalone", "no");
        Serializer serializer = SerializerFactory.getSerializer(xmlProps);
        serializer.setOutputStream(System.out);
        tHandler3.setResult(new SAXResult(serializer.asContentHandler()));

        // Parse the XML input document. The input ContentHandler and output ContentHandler
        // work in separate threads to optimize performance.   
        reader.parse("foo.xml");
    }/*from  w ww. ja v a 2  s .c  om*/
}

From source file:SAX2SAX.java

public static void main(String[] args)
        throws TransformerException, TransformerConfigurationException, SAXException, IOException {

    // Instantiate a TransformerFactory.
    TransformerFactory tFactory = TransformerFactory.newInstance();
    // Determine whether the TransformerFactory supports The use of SAXSource 
    // and SAXResult
    if (tFactory.getFeature(SAXSource.FEATURE) && tFactory.getFeature(SAXResult.FEATURE)) {
        // Cast the TransformerFactory.
        SAXTransformerFactory saxTFactory = ((SAXTransformerFactory) tFactory);
        // Create a ContentHandler to handle parsing of the stylesheet.
        TemplatesHandler templatesHandler = saxTFactory.newTemplatesHandler();

        // Create an XMLReader and set its ContentHandler.
        XMLReader reader = XMLReaderFactory.createXMLReader();
        reader.setContentHandler(templatesHandler);

        // Parse the stylesheet.                       
        reader.parse("birds.xsl");

        //Get the Templates object from the ContentHandler.
        Templates templates = templatesHandler.getTemplates();
        // Create a ContentHandler to handle parsing of the XML source.  
        TransformerHandler handler = saxTFactory.newTransformerHandler(templates);
        // Reset the XMLReader's ContentHandler.
        reader.setContentHandler(handler);

        // Set the ContentHandler to also function as a LexicalHandler, which
        // includes "lexical" events (e.g., comments and CDATA). 
        reader.setProperty("http://xml.org/sax/properties/lexical-handler", handler);

        FileOutputStream fos = new FileOutputStream("birds.out");

        java.util.Properties xmlProps = OutputPropertiesFactory.getDefaultMethodProperties("xml");
        xmlProps.setProperty("indent", "yes");
        xmlProps.setProperty("standalone", "no");
        Serializer serializer = SerializerFactory.getSerializer(xmlProps);
        serializer.setOutputStream(fos);

        // Set the result handling to be a serialization to the file output stream.
        Result result = new SAXResult(serializer.asContentHandler());
        handler.setResult(result);/*from   w w w .  j  ava2s  . c  o m*/

        // Parse the XML input document.
        reader.parse("birds.xml");

        System.out.println("************* The result is in birds.out *************");
    } else
        System.out.println("The TransformerFactory does not support SAX input and SAX output");
}

From source file:com.meltmedia.rodimus.RodimusCli.java

public static TransformerHandler getContentHandler(Source source) throws Exception {
    try {//from w w w  .ja va2s  .c o m
        SAXTransformerFactory factory = (SAXTransformerFactory) new TransformerFactoryImpl();
        return factory.newTransformerHandler(source);
    } catch (Exception e) {
        throw new Exception("Could not load transform " + source.getSystemId(), e);
    }
}

From source file:Examples.java

/**
 * Show the Transformer using SAX events in and SAX events out.
 *//*from   w w  w  . j a  v  a2s .  c  om*/
public static void exampleContentHandlerToContentHandler(String sourceID, String xslID)
        throws TransformerException, TransformerConfigurationException, SAXException, IOException {
    TransformerFactory tfactory = TransformerFactory.newInstance();

    // Does this factory support SAX features?
    if (tfactory.getFeature(SAXSource.FEATURE)) {
        // If so, we can safely cast.
        SAXTransformerFactory stfactory = ((SAXTransformerFactory) tfactory);

        // A TransformerHandler is a ContentHandler that will listen for 
        // SAX events, and transform them to the result.
        TransformerHandler handler = stfactory.newTransformerHandler(new StreamSource(xslID));

        // Set the result handling to be a serialization to System.out.
        Result result = new SAXResult(new ExampleContentHandler());
        handler.setResult(result);

        // Create a reader, and set it's content handler to be the TransformerHandler.
        XMLReader reader = null;

        // Use JAXP1.1 ( if possible )
        try {
            javax.xml.parsers.SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance();
            factory.setNamespaceAware(true);
            javax.xml.parsers.SAXParser jaxpParser = factory.newSAXParser();
            reader = jaxpParser.getXMLReader();

        } catch (javax.xml.parsers.ParserConfigurationException ex) {
            throw new org.xml.sax.SAXException(ex);
        } catch (javax.xml.parsers.FactoryConfigurationError ex1) {
            throw new org.xml.sax.SAXException(ex1.toString());
        } catch (NoSuchMethodError ex2) {
        }
        if (reader == null)
            reader = XMLReaderFactory.createXMLReader();
        reader.setContentHandler(handler);

        // It's a good idea for the parser to send lexical events.
        // The TransformerHandler is also a LexicalHandler.
        reader.setProperty("http://xml.org/sax/properties/lexical-handler", handler);

        // Parse the source XML, and send the parse events to the TransformerHandler.
        reader.parse(sourceID);
    } else {
        System.out.println(
                "Can't do exampleContentHandlerToContentHandler because tfactory is not a SAXTransformerFactory");
    }
}

From source file:Examples.java

/**
 * Show the Transformer using SAX events in and DOM nodes out.
 *//*w  w  w.  ja  va 2 s  .  c om*/
public static void exampleContentHandler2DOM(String sourceID, String xslID) throws TransformerException,
        TransformerConfigurationException, SAXException, IOException, ParserConfigurationException {
    TransformerFactory tfactory = TransformerFactory.newInstance();

    // Make sure the transformer factory we obtained supports both
    // DOM and SAX.
    if (tfactory.getFeature(SAXSource.FEATURE) && tfactory.getFeature(DOMSource.FEATURE)) {
        // We can now safely cast to a SAXTransformerFactory.
        SAXTransformerFactory sfactory = (SAXTransformerFactory) tfactory;

        // Create an Document node as the root for the output.
        DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = dfactory.newDocumentBuilder();
        org.w3c.dom.Document outNode = docBuilder.newDocument();

        // Create a ContentHandler that can liston to SAX events 
        // and transform the output to DOM nodes.
        TransformerHandler handler = sfactory.newTransformerHandler(new StreamSource(xslID));
        handler.setResult(new DOMResult(outNode));

        // Create a reader and set it's ContentHandler to be the 
        // transformer.
        XMLReader reader = null;

        // Use JAXP1.1 ( if possible )
        try {
            javax.xml.parsers.SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance();
            factory.setNamespaceAware(true);
            javax.xml.parsers.SAXParser jaxpParser = factory.newSAXParser();
            reader = jaxpParser.getXMLReader();

        } catch (javax.xml.parsers.ParserConfigurationException ex) {
            throw new org.xml.sax.SAXException(ex);
        } catch (javax.xml.parsers.FactoryConfigurationError ex1) {
            throw new org.xml.sax.SAXException(ex1.toString());
        } catch (NoSuchMethodError ex2) {
        }
        if (reader == null)
            reader = XMLReaderFactory.createXMLReader();
        reader.setContentHandler(handler);
        reader.setProperty("http://xml.org/sax/properties/lexical-handler", handler);

        // Send the SAX events from the parser to the transformer,
        // and thus to the DOM tree.
        reader.parse(sourceID);

        // Serialize the node for diagnosis.
        exampleSerializeNode(outNode);
    } else {
        System.out.println(
                "Can't do exampleContentHandlerToContentHandler because tfactory is not a SAXTransformerFactory");
    }
}

From source file:net.sf.joost.plugins.traxfilter.THResolver.java

/**
 * Creates new TH instance out of TrAX factory
 * @param method//w  w  w .j av  a 2 s.  com
 * @param source
 * @return TH
 */
protected TransformerHandler newTHOutOfTrAX(String method, Source source, Hashtable params,
        ErrorListener errorListener, URIResolver uriResolver) throws SAXException {
    if (DEBUG)
        log.debug("newTHOutOfTrAX()");

    SAXTransformerFactory saxtf;

    if (FACTORY.getValueStr().length() > 0) {
        // create factory as asked by the client
        try {
            saxtf = (SAXTransformerFactory) (Class.forName(FACTORY.getValueStr())).newInstance();
            if (DEBUG)
                log.debug("newTHOutOfTrAX(): use custom TrAX factory " + FACTORY.getValueStr());
        } catch (InstantiationException e) {
            throw new SAXException(e);
        } catch (ClassNotFoundException e) {
            throw new SAXException(e);
        } catch (IllegalAccessException e) {
            throw new SAXException(e);
        }

    } else if (STX_METHOD.equals(method)) {
        saxtf = new TransformerFactoryImpl();
        if (DEBUG)
            log.debug("newTHOutOfTrAX(): use default Joost factory " + saxtf.getClass().toString());
    } else {
        final String TFPROP = "javax.xml.transform.TransformerFactory";
        final String STXIMP = "net.sf.joost.trax.TransformerFactoryImpl";

        synchronized (SYNCHRONIZE_GUARD) {

            String propVal = System.getProperty(TFPROP);
            boolean propChanged = false;

            String xsltFac = System.getProperty(TrAXConstants.KEY_XSLT_FACTORY);
            if (xsltFac != null || STXIMP.equals(propVal)) {
                // change this property,
                // otherwise we wouldn't get an XSLT transformer
                if (xsltFac != null)
                    System.setProperty(TFPROP, xsltFac);
                else {
                    Properties props = System.getProperties();
                    props.remove(TFPROP);
                    System.setProperties(props);
                }
                propChanged = true;
            }

            saxtf = (SAXTransformerFactory) TransformerFactory.newInstance();

            if (propChanged) {
                // reset property
                if (propVal != null)
                    System.setProperty(TFPROP, propVal);
                else {
                    Properties props = System.getProperties();
                    props.remove(TFPROP);
                    System.setProperties(props);
                }
            }
        }

        if (DEBUG)
            log.debug("newTHOutOfTrAX(): use default TrAX factory " + saxtf.getClass().toString());
    }

    // set factory attributes
    setTraxFactoryAttributes(saxtf, params);
    setupTransformerFactory(saxtf, errorListener, uriResolver);

    try {
        if (DEBUG)
            log.debug("newTHOutOfTrAX(): creating factory's reusable TH");
        // TrAX way to create TH
        TransformerHandler th = saxtf.newTransformerHandler(source);
        setupTransformer(th.getTransformer(), errorListener, uriResolver);
        return th;
    } catch (TransformerConfigurationException ex) {
        throw new SAXException(ex);
    }

}

From source file:org.toobsframework.transformpipeline.domain.ChainedXSLTransformer.java

private String transform(List inputXSLs, String inputXML, Map inputParams,
        IXMLTransformerHelper transformerHelper) throws XMLTransformerException {

    String outputXML = null;/* w w w  .jav  a2 s  .c o  m*/
    ByteArrayInputStream xmlInputStream = null;
    ByteArrayOutputStream xmlOutputStream = null;
    try {
        TransformerFactory tFactory = TransformerFactory.newInstance();
        setFactoryResolver(tFactory);

        if (tFactory.getFeature(SAXSource.FEATURE) && tFactory.getFeature(SAXResult.FEATURE)) {
            // Cast the TransformerFactory to SAXTransformerFactory.
            SAXTransformerFactory saxTFactory = ((SAXTransformerFactory) tFactory);

            // Create a TransformerHandler for each stylesheet.
            ArrayList tHandlers = new ArrayList();
            TransformerHandler tHandler = null;

            // Create an XMLReader.
            XMLReader reader = new SAXParser();

            // transformer3 outputs SAX events to the serializer.
            if (outputProperties == null) {
                outputProperties = OutputPropertiesFactory.getDefaultMethodProperties("html");
            }
            Serializer serializer = SerializerFactory.getSerializer(outputProperties);
            String xslFile = null;
            for (int it = 0; it < inputXSLs.size(); it++) {
                Object source = inputXSLs.get(it);
                if (source instanceof StreamSource) {
                    tHandler = saxTFactory.newTransformerHandler((StreamSource) source);
                    if (xslFile == null)
                        xslFile = ((StreamSource) source).getSystemId();
                } else {
                    //tHandler = saxTFactory.newTransformerHandler(new StreamSource(getXSLFile((String) source)));
                    tHandler = saxTFactory
                            .newTransformerHandler(uriResolver.resolve((String) source + ".xsl", ""));
                    if (xslFile == null)
                        xslFile = (String) source;
                }
                Transformer transformer = tHandler.getTransformer();
                transformer.setOutputProperty("encoding", "UTF-8");
                transformer.setErrorListener(tFactory.getErrorListener());
                if (inputParams != null) {
                    Iterator paramIt = inputParams.entrySet().iterator();
                    while (paramIt.hasNext()) {
                        Map.Entry thisParam = (Map.Entry) paramIt.next();
                        transformer.setParameter((String) thisParam.getKey(), (String) thisParam.getValue());
                    }
                }
                if (transformerHelper != null) {
                    transformer.setParameter(TRANSFORMER_HELPER, transformerHelper);
                }
                tHandlers.add(tHandler);
            }
            tHandler = null;
            for (int th = 0; th < tHandlers.size(); th++) {
                tHandler = (TransformerHandler) tHandlers.get(th);
                if (th == 0) {
                    reader.setContentHandler(tHandler);
                    reader.setProperty("http://xml.org/sax/properties/lexical-handler", tHandler);
                } else {
                    ((TransformerHandler) tHandlers.get(th - 1)).setResult(new SAXResult(tHandler));
                }
            }
            // Parse the XML input document. The input ContentHandler and output ContentHandler
            // work in separate threads to optimize performance.
            InputSource xmlSource = null;
            xmlInputStream = new ByteArrayInputStream((inputXML).getBytes("UTF-8"));
            if (log.isTraceEnabled()) {
                log.trace("Input XML:\n" + inputXML);
            }
            xmlSource = new InputSource(xmlInputStream);
            xmlOutputStream = new ByteArrayOutputStream();
            serializer.setOutputStream(xmlOutputStream);
            ((TransformerHandler) tHandlers.get(tHandlers.size() - 1))
                    .setResult(new SAXResult(serializer.asContentHandler()));

            Date timer = new Date();
            reader.parse(xmlSource);
            Date timer2 = new Date();
            outputXML = xmlOutputStream.toString("UTF-8");
            if (log.isDebugEnabled()) {
                long diff = timer2.getTime() - timer.getTime();
                log.debug("Time to transform: " + diff + " mS XSL: " + xslFile);
                if (log.isTraceEnabled()) {
                    log.trace("Output XML:\n" + outputXML);
                }
            }
        }
    } catch (IOException ex) {
        throw new XMLTransformerException(ex);
    } catch (IllegalArgumentException ex) {
        throw new XMLTransformerException(ex);
    } catch (SAXException ex) {
        throw new XMLTransformerException(ex);
    } catch (TransformerConfigurationException ex) {
        throw new XMLTransformerException(ex);
    } catch (TransformerFactoryConfigurationError ex) {
        throw new XMLTransformerException(ex);
    } catch (TransformerException ex) {
        throw new XMLTransformerException(ex);
    } finally {
        try {
            if (xmlInputStream != null) {
                xmlInputStream.close();
                xmlInputStream = null;
            }
            if (xmlOutputStream != null) {
                xmlOutputStream.close();
                xmlOutputStream = null;
            }
        } catch (IOException ex) {
        }
    }
    return outputXML;
}

From source file:org.wyona.yanel.impl.resources.TestingControlResource.java

/**
 * /*from   ww  w .  ja v a2s .  c o  m*/
 */
public View getView(String viewId) {
    if (request.getHeader("User-Agent").indexOf("rv:1.7") < 0) {
        ajaxBrowser = true;
    }
    try {
        setLocations();
    } catch (Exception e) {
        // sb.append("<p>Could not get the Locations: " + e + "</p>");
        log.error(e.getMessage(), e);
    }
    View view = new View();
    String mimeType = getMimeType(viewId);
    view.setMimeType(mimeType);

    try {
        org.wyona.yarep.core.Repository repo = getRealm().getRepository();

        if (viewId != null && viewId.equals("source")) {
            view.setInputStream(new java.io.StringBufferInputStream(getScreen()));
            view.setMimeType("application/xml");
            return view;
        }

        String[] xsltPath = getXSLTPath(getPath());
        if (xsltPath != null) {

            // create reader:
            XMLReader xmlReader = XMLReaderFactory.createXMLReader();
            CatalogResolver catalogResolver = new CatalogResolver();
            xmlReader.setEntityResolver(catalogResolver);

            // create xslt transformer:
            SAXTransformerFactory tf = (SAXTransformerFactory) TransformerFactory.newInstance();

            TransformerHandler[] xsltHandlers = new TransformerHandler[xsltPath.length];
            for (int i = 0; i < xsltPath.length; i++) {
                xsltHandlers[i] = tf
                        .newTransformerHandler(new StreamSource(repo.getNode(xsltPath[i]).getInputStream()));
                xsltHandlers[i].getTransformer().setParameter("yanel.path.name",
                        org.wyona.commons.io.PathUtil.getName(getPath()));
                xsltHandlers[i].getTransformer().setParameter("yanel.path", getPath());
                xsltHandlers[i].getTransformer().setParameter("yanel.back2context",
                        PathUtil.backToContext(realm, getPath()));
                xsltHandlers[i].getTransformer().setParameter("yarep.back2realm",
                        PathUtil.backToRealm(getPath()));

                xsltHandlers[i].getTransformer().setParameter("language", getRequestedLanguage());
            }

            // create i18n transformer:
            I18nTransformer2 i18nTransformer = new I18nTransformer2("global", getRequestedLanguage(),
                    getRealm().getDefaultLanguage());
            i18nTransformer.setEntityResolver(catalogResolver);

            // create xinclude transformer:
            XIncludeTransformer xIncludeTransformer = new XIncludeTransformer();
            ResourceResolver resolver = new ResourceResolver(this);
            xIncludeTransformer.setResolver(resolver);

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

            // chain everything together (create a pipeline):
            xmlReader.setContentHandler(xsltHandlers[0]);
            for (int i = 0; i < xsltHandlers.length - 1; i++) {
                xsltHandlers[i].setResult(new SAXResult(xsltHandlers[i + 1]));
            }
            xsltHandlers[xsltHandlers.length - 1].setResult(new SAXResult(xIncludeTransformer));
            xIncludeTransformer.setResult(new SAXResult(i18nTransformer));
            i18nTransformer.setResult(new SAXResult(serializer.asContentHandler()));
            serializer.setOutputStream(baos);

            // execute pipeline:
            xmlReader.parse(new InputSource(new java.io.StringBufferInputStream(getScreen())));

            // write result into view:
            view.setInputStream(new ByteArrayInputStream(baos.toByteArray()));
            return view;
        }
        log.debug("Mime-Type: " + mimeType);
        view.setInputStream(new java.io.StringBufferInputStream(getScreen()));
        return view;
    } catch (Exception e) {
        log.error(e + " (" + getPath() + ", " + getRealm() + ")", e);
    }
    view.setInputStream(new java.io.StringBufferInputStream(getScreen()));
    return view;
}

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

/**
 * Generate a "Yanel" response (page information, 404, internal server error, ...)
 *//*ww  w . j ava  2  s.  c  o  m*/
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);
    }
}