Example usage for org.xml.sax XMLFilter setContentHandler

List of usage examples for org.xml.sax XMLFilter setContentHandler

Introduction

In this page you can find the example usage for org.xml.sax XMLFilter setContentHandler.

Prototype

public void setContentHandler(ContentHandler handler);

Source Link

Document

Allow an application to register a content event handler.

Usage

From source file:UseXMLFilters.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 an XMLFilter for each stylesheet.
        XMLFilter xmlFilter1 = saxTFactory.newXMLFilter(new StreamSource("foo1.xsl"));
        XMLFilter xmlFilter2 = saxTFactory.newXMLFilter(new StreamSource("foo2.xsl"));
        XMLFilter xmlFilter3 = saxTFactory.newXMLFilter(new StreamSource("foo3.xsl"));

        // Create an XMLReader.
        XMLReader reader = XMLReaderFactory.createXMLReader();

        // xmlFilter1 uses the XMLReader as its reader.
        xmlFilter1.setParent(reader);/* w ww . j  av a2  s.com*/

        // xmlFilter2 uses xmlFilter1 as its reader.
        xmlFilter2.setParent(xmlFilter1);

        // xmlFilter3 uses xmlFilter2 as its reader.
        xmlFilter3.setParent(xmlFilter2);

        // xmlFilter3 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);
        xmlFilter3.setContentHandler(serializer.asContentHandler());

        // Perform the series of transformations as follows:
        //   - transformer3 gets its parent (transformer2) as the XMLReader/XMLFilter
        //     and calls transformer2.parse(new InputSource("foo.xml")).
        //   - transformer2 gets its parent (transformer1) as the XMLReader/XMLFilter
        //     and calls transformer1.parse(new InputSource("foo.xml")). 
        //   - transformer1 gets its parent (reader, a SAXParser) as the XMLReader 
        //     and calls reader.parse(new InputSource("foo.xml")).
        //   - reader parses the XML document and sends the SAX parse events to transformer1, 
        //     which performs transformation 1 and sends the output to transformer2.
        //   - transformer2 parses the transformation 1 output, performs transformation 2, and 
        //     sends the output to transformer3.
        //   - transformer3 parses the transformation 2 output, performs transformation 3,
        //     and sends the output to the serializer.
        xmlFilter3.parse(new InputSource("foo.xml"));
    }
}

From source file:Main.java

private static void transformInternal(final URIResolver xslResolver, final StreamSource xml,
        final InputSource xsl, final Map<String, Object> parameters, final StreamResult result)
        throws IOException, ParserConfigurationException, SAXException, TransformerConfigurationException,
        TransformerException {//from  ww w .ja v  a2 s  .  co m
    final TransformerFactory tfactory = TransformerFactory.newInstance();
    tfactory.setURIResolver(xslResolver);

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

        // create a Templates ContentHandler to handle parsing of the
        // stylesheet
        final javax.xml.transform.sax.TemplatesHandler templatesHandler = stfactory.newTemplatesHandler();
        templatesHandler.setDocumentLocator(emptyDocumentLocator);

        final XMLFilter filter = new XMLFilterImpl();
        filter.setParent(makeXMLReader());
        filter.setContentHandler(templatesHandler);

        // parse the stylesheet
        templatesHandler.setSystemId(xsl.getSystemId());
        filter.parse(xsl);

        // set xslt parameters
        final Transformer autobot = templatesHandler.getTemplates().newTransformer();
        if (parameters != null) {
            final Iterator<String> keys = parameters.keySet().iterator();
            while (keys.hasNext()) {
                final String name = keys.next();
                final Object value = parameters.get(name);
                autobot.setParameter(name, value);
            }
        }

        // set saxon parameters
        if (parameters != null) {
            final Iterator<String> keys = parameters.keySet().iterator();
            while (keys.hasNext()) {
                String name = keys.next();
                if (name.startsWith("saxon-")) {
                    final String value = parameters.get(name).toString();
                    name = name.replaceFirst("saxon\\-", "");
                    autobot.setOutputProperty(name, value);
                }
            }
        }

        // do the transform
        // logger.debug("SAX resolving systemIDs relative to: " +
        // templatesHandler.getSystemId());
        autobot.transform(xml, result);

    } else {
        throw new IllegalStateException("Factory doesn't implement SAXTransformerFactory");
    }
}

From source file:Examples.java

/**
 * This example shows how to chain events from one Transformer
 * to another transformer, using the Transformer as a
 * SAX2 XMLFilter/XMLReader.//from  ww  w  . j a va  2  s. c  o  m
 */
public static void exampleXMLFilterChain(String sourceID, String xslID_1, String xslID_2, String xslID_3)
        throws TransformerException, TransformerConfigurationException, SAXException, IOException {
    TransformerFactory tfactory = TransformerFactory.newInstance();

    Templates stylesheet1 = tfactory.newTemplates(new StreamSource(xslID_1));
    Transformer transformer1 = stylesheet1.newTransformer();

    // If one success, assume all will succeed.
    if (tfactory.getFeature(SAXSource.FEATURE)) {
        SAXTransformerFactory stf = (SAXTransformerFactory) tfactory;
        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();

        XMLFilter filter1 = stf.newXMLFilter(new StreamSource(xslID_1));
        XMLFilter filter2 = stf.newXMLFilter(new StreamSource(xslID_2));
        XMLFilter filter3 = stf.newXMLFilter(new StreamSource(xslID_3));

        if (null != filter1) // If one success, assume all were success.
        {
            // transformer1 will use a SAX parser as it's reader.    
            filter1.setParent(reader);

            // transformer2 will use transformer1 as it's reader.
            filter2.setParent(filter1);

            // transform3 will use transform2 as it's reader.
            filter3.setParent(filter2);

            filter3.setContentHandler(new ExampleContentHandler());
            // filter3.setContentHandler(new org.xml.sax.helpers.DefaultHandler());

            // Now, when you call transformer3 to parse, it will set  
            // itself as the ContentHandler for transform2, and 
            // call transform2.parse, which will set itself as the 
            // content handler for transform1, and call transform1.parse, 
            // which will set itself as the content listener for the 
            // SAX parser, and call parser.parse(new InputSource("xml/foo.xml")).
            filter3.parse(new InputSource(sourceID));
        } else {
            System.out.println("Can't do exampleXMLFilter because " + "tfactory doesn't support asXMLFilter()");
        }
    } else {
        System.out.println("Can't do exampleXMLFilter because " + "tfactory is not a SAXTransformerFactory");
    }
}

From source file:de.juwimm.cms.remote.ViewServiceSpringImpl.java

@Override
protected ViewComponentValue handleImportViewComponent(Integer parentId, InputStream xmlFile, boolean withMedia,
        boolean withChildren, Integer unitId, boolean useNewIds, Integer siteId, Integer fulldeploy)
        throws Exception {
    String tmpFileName = "";
    try {//from  w  ww .j ava  2 s . com
        tmpFileName = this.storeSiteFile(xmlFile);
        if (log.isInfoEnabled())
            log.info("-------------->importFile saved.");
    } catch (IOException e) {
        log.warn("Unable to copy received inputstream: " + e.getMessage(), e);
    }
    ViewComponentHbm parent = getViewComponentHbmDao().load(parentId);
    ViewComponentHbm firstChild = parent.getFirstChild();
    File preparsedXMLfile = null;
    XMLFilter filter = new XMLFilterImpl(XMLReaderFactory.createXMLReader());
    preparsedXMLfile = File.createTempFile("edition_import_preparsed_", ".xml");
    if (log.isDebugEnabled())
        log.debug("preparsedXMLfile: " + preparsedXMLfile.getAbsolutePath());
    XMLWriter xmlWriter = new XMLWriter(new OutputStreamWriter(new FileOutputStream(preparsedXMLfile)));
    filter.setContentHandler(new de.juwimm.cms.util.EditionBlobContentHandler(xmlWriter, preparsedXMLfile));
    InputSource saxIn = null;
    try {
        try {
            saxIn = new InputSource(new GZIPInputStream(new FileInputStream(tmpFileName)));
        } catch (Exception exe) {
            saxIn = new InputSource(new BufferedReader(new FileReader(tmpFileName)));
        }
    } catch (FileNotFoundException exe) {
        if (log.isDebugEnabled())
            log.error("Error at creating InputSource in paste");
    }
    filter.parse(saxIn);
    xmlWriter.flush();
    xmlWriter = null;
    filter = null;
    System.gc();
    InputSource domIn = new InputSource(new BufferedInputStream(new FileInputStream(preparsedXMLfile)));
    org.w3c.dom.Document doc = XercesHelper.inputSource2Dom(domIn);
    Hashtable<Integer, Integer> picIds = null;
    Hashtable<Integer, Integer> docIds = null;
    if (withMedia) {
        picIds = importPictures(unitId, doc, preparsedXMLfile, useNewIds);
        docIds = importDocuments(unitId, doc, preparsedXMLfile, useNewIds);
    }
    /**import persons */
    mappingPersons = new Hashtable<Long, Long>();

    Iterator it = XercesHelper.findNodes(doc, "//viewcomponent");
    while (it.hasNext()) {
        Node nodeViewComponent = (Node) it.next();
        Integer oldunitId = new Integer(((Element) nodeViewComponent).getAttribute("unitId"));
        if (oldunitId.intValue() != unitId.intValue()) {
            importPersons(unitId, doc, useNewIds, picIds);
            /**import only if not in the same unit*/
        }
    }
    ViewComponentHbm viewComponent = createViewComponentFromXml(parentId, doc, withChildren, picIds, docIds,
            useNewIds, siteId, fulldeploy, unitId);
    //importRealmsForViewComponent(doc, viewComponent, 1);
    /**import realms*/

    parent.addChild(viewComponent);
    viewComponent.setParent(parent);

    if (firstChild != null) {
        viewComponent.setNextNode(firstChild);
        firstChild.setPrevNode(viewComponent);
        parent.setFirstChild(viewComponent);
    } else {
        parent.setFirstChild(viewComponent);
    }

    return viewComponent.getDao();

}

From source file:de.juwimm.cms.remote.EditionServiceSpringImpl.java

private Document getDocumentFromFile(File preparsedXMLfile, String editionFileName) throws Exception {
    if (log.isInfoEnabled())
        log.info("Finished writing Edition to File, starting to import it as GZIP-InputStream...");
    XMLFilter filter = new XMLFilterImpl(XMLReaderFactory.createXMLReader());
    preparsedXMLfile = File.createTempFile("edition_import_preparsed_", ".xml");
    if (log.isDebugEnabled())
        log.debug("preparsedXMLfile: " + preparsedXMLfile.getAbsolutePath());
    XMLWriter xmlWriter = new XMLWriter(new OutputStreamWriter(new FileOutputStream(preparsedXMLfile)));
    filter.setContentHandler(new EditionBlobContentHandler(xmlWriter, preparsedXMLfile));
    InputSource saxIn = null;/*w ww.  j a  v a  2 s  . co m*/
    try {
        try {
            saxIn = new InputSource(new GZIPInputStream(new FileInputStream(editionFileName)));
        } catch (Exception exe) {
            saxIn = new InputSource(new BufferedReader(new FileReader(editionFileName)));
        }
    } catch (FileNotFoundException exe) {
        log.error("Edition file isnt available anymore. Edition needs to be deleted!");
    }
    filter.parse(saxIn);
    xmlWriter.flush();
    xmlWriter = null;
    filter = null;
    System.gc();
    if (log.isInfoEnabled())
        log.info("Finished cutting BLOBs, starting to open XML Document...");
    // BufferedReader br = new BufferedReader(new InputStreamReader(inStream, "UTF-8"));
    // InputSource in = new InputSource(br);
    InputSource domIn = new InputSource(new FileInputStream(preparsedXMLfile));
    return XercesHelper.inputSource2Dom(domIn);
}

From source file:org.apache.cocoon.components.xslt.TraxProcessor.java

public TransformerHandlerAndValidity getTransformerHandlerAndValidity(Source stylesheet, XMLFilter filter)
        throws XSLTProcessorException {

    final String id = stylesheet.getURI();
    TransformerHandlerAndValidity handlerAndValidity;

    try {/*w w  w . ja va2  s .c  o m*/
        handlerAndValidity = getTemplates(stylesheet, id);
        if (handlerAndValidity != null) {
            if (getLogger().isDebugEnabled()) {
                getLogger().debug("Reusing Templates for " + id);
            }
            return handlerAndValidity;
        }
    } catch (Exception e) {
        throw new XSLTProcessorException("Error retrieving template", e);
    }

    TraxErrorListener errorListener = new TraxErrorListener(getLogger(), stylesheet.getURI());
    try {
        if (getLogger().isDebugEnabled()) {
            getLogger().debug("Creating new Templates for " + id);
        }

        m_factory.setErrorListener(errorListener);

        // Create a Templates ContentHandler to handle parsing of the
        // stylesheet.
        TemplatesHandler templatesHandler = m_factory.newTemplatesHandler();

        // Set the system ID for the template handler since some
        // TrAX implementations (XSLTC) rely on this in order to obtain
        // a meaningful identifier for the Templates instances.
        templatesHandler.setSystemId(id);
        if (filter != null) {
            filter.setContentHandler(templatesHandler);
        }

        if (getLogger().isDebugEnabled()) {
            getLogger().debug("Source = " + stylesheet + ", templatesHandler = " + templatesHandler);
        }

        // Initialize List for included validities
        SourceValidity validity = stylesheet.getValidity();
        if (validity != null && m_checkIncludes) {
            m_includesMap.put(id, new ArrayList());
        }

        try {
            // Process the stylesheet.
            sourceToSAX(stylesheet,
                    filter != null ? (ContentHandler) filter : (ContentHandler) templatesHandler);

            // Get the Templates object (generated during the parsing of
            // the stylesheet) from the TemplatesHandler.
            final Templates template = templatesHandler.getTemplates();

            if (null == template) {
                throw new XSLTProcessorException(
                        "Unable to create templates for stylesheet: " + stylesheet.getURI());
            }

            putTemplates(template, stylesheet, id);

            // Create transformer handler
            final TransformerHandler handler = m_factory.newTransformerHandler(template);
            handler.getTransformer().setErrorListener(new TraxErrorListener(getLogger(), stylesheet.getURI()));
            handler.getTransformer().setURIResolver(this);

            // Create aggregated validity
            AggregatedValidity aggregated = null;
            if (validity != null && m_checkIncludes) {
                List includes = (List) m_includesMap.get(id);
                if (includes != null) {
                    aggregated = new AggregatedValidity();
                    aggregated.add(validity);
                    for (int i = includes.size() - 1; i >= 0; i--) {
                        aggregated.add((SourceValidity) ((Object[]) includes.get(i))[1]);
                    }
                    validity = aggregated;
                }
            }

            // Create result
            handlerAndValidity = new MyTransformerHandlerAndValidity(handler, validity);
        } finally {
            if (m_checkIncludes)
                m_includesMap.remove(id);
        }

        return handlerAndValidity;
    } catch (Exception e) {
        Throwable realEx = errorListener.getThrowable();
        if (realEx == null)
            realEx = e;

        if (realEx instanceof RuntimeException) {
            throw (RuntimeException) realEx;
        }

        if (realEx instanceof XSLTProcessorException) {
            throw (XSLTProcessorException) realEx;
        }

        throw new XSLTProcessorException("Exception when creating Transformer from " + stylesheet.getURI(),
                realEx);
    }
}

From source file:org.dita.dost.util.XMLUtils.java

/**
 * Transform file with XML filters./*from w  w w.  j  av  a2  s.  c om*/
 * 
 * @param inputFile input file
 * @param outputFile output file
 * @param filters XML filters to transform file with, may be an empty list
 */
public static void transform(final File inputFile, final File outputFile, final List<XMLFilter> filters)
        throws DITAOTException {
    if (!outputFile.getParentFile().exists() && !outputFile.getParentFile().mkdirs()) {
        throw new DITAOTException(
                "Failed to create output directory " + outputFile.getParentFile().getAbsolutePath());
    }

    InputStream in = null;
    OutputStream out = null;
    try {
        final Transformer transformer = TransformerFactory.newInstance().newTransformer();
        XMLReader reader = getXMLReader();
        for (final XMLFilter filter : filters) {
            // ContentHandler must be reset so e.g. Saxon 9.1 will reassign ContentHandler
            // when reusing filter with multiple Transformers.
            filter.setContentHandler(null);
            filter.setParent(reader);
            reader = filter;
        }
        in = new BufferedInputStream(new FileInputStream(inputFile));
        out = new BufferedOutputStream(new FileOutputStream(outputFile));
        final Source source = new SAXSource(reader, new InputSource(in));
        source.setSystemId(inputFile.toURI().toString());
        final Result result = new StreamResult(out);
        transformer.transform(source, result);
    } catch (final RuntimeException e) {
        throw e;
    } catch (final Exception e) {
        throw new DITAOTException("Failed to transform " + inputFile + ": " + e.getMessage(), e);
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (final IOException e) {
                // ignore
            }
        }
        if (out != null) {
            try {
                out.close();
            } catch (final IOException e) {
                // ignore
            }
        }
    }
}

From source file:org.dita.dost.util.XMLUtils.java

/**
 * Transform file with XML filters./*  ww  w  . j av  a 2s .  c o  m*/
 *
 * @param input input file
 * @param output output file
 * @param filters XML filters to transform file with, may be an empty list
 */
public static void transform(final URI input, final URI output, final List<XMLFilter> filters)
        throws DITAOTException {
    InputSource src = null;
    StreamResult result = null;
    try {
        final Transformer transformer = TransformerFactory.newInstance().newTransformer();
        XMLReader reader = getXMLReader();
        for (final XMLFilter filter : filters) {
            // ContentHandler must be reset so e.g. Saxon 9.1 will reassign ContentHandler
            // when reusing filter with multiple Transformers.
            filter.setContentHandler(null);
            filter.setParent(reader);
            reader = filter;
        }
        src = new InputSource(input.toString());
        final Source source = new SAXSource(reader, src);
        result = new StreamResult(output.toString());
        transformer.transform(source, result);
    } catch (final RuntimeException e) {
        throw e;
    } catch (final Exception e) {
        throw new DITAOTException("Failed to transform " + input + ": " + e.getMessage(), e);
    } finally {
        try {
            close(src);
        } catch (final IOException e) {
            // NOOP
        }
        try {
            close(result);
        } catch (final IOException e) {
            // NOOP
        }
    }
}

From source file:org.kuali.rice.core.impl.config.property.JAXBConfigImpl.java

protected org.kuali.rice.core.impl.config.property.Config unmarshal(Unmarshaller unmarshaller, InputStream in)
        throws SAXException, ParserConfigurationException, IOException, IllegalStateException, JAXBException {
    SAXParserFactory spf = SAXParserFactory.newInstance();
    spf.setNamespaceAware(true);//from  www  . ja  v a2  s  .co m

    XMLFilter filter = new ConfigNamespaceURIFilter();
    filter.setParent(spf.newSAXParser().getXMLReader());

    UnmarshallerHandler handler = unmarshaller.getUnmarshallerHandler();
    filter.setContentHandler(handler);

    filter.parse(new InputSource(in));

    return (org.kuali.rice.core.impl.config.property.Config) handler.getResult();
}