List of usage examples for org.xml.sax XMLFilter setParent
public abstract void setParent(XMLReader parent);
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); // 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")); }/* w ww . j a v a 2s . co m*/ }
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 w w w .ja v a 2 s . c o 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:Main.java
/** * Filters an XML document./*from w ww.j av a2 s . com*/ * * @param source the input source for the XML document * @param filter the filter * * @return an input source for the resulting document * * @throws Exception */ public static InputSource filterXml(InputSource source, XMLFilter filter) throws Exception { // Create filter, which uses a "real" XMLReader but also removes the // attributes XMLReader reader = XMLReaderFactory.createXMLReader(); filter.setParent(reader); // Create a Transformer TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(); // Transform the source tree, applying the filter, and store the result // tree in a character array CharArrayWriter writer = new CharArrayWriter(); t.transform(new SAXSource(filter, source), new StreamResult(writer)); // Return a new InputSource using the result tree return new InputSource(new CharArrayReader(writer.toCharArray())); }
From source file:Examples.java
/** * Show the Transformer as a simple XMLFilter. This is pretty similar * to exampleXMLReader, except that here the parent XMLReader is created * by the caller, instead of automatically within the XMLFilter. This * gives the caller more direct control over the parent reader. *//*from w ww . ja v a 2 s.co m*/ public static void exampleXMLFilter(String sourceID, String xslID) throws TransformerException, TransformerConfigurationException, SAXException, IOException // , ParserConfigurationException { TransformerFactory tfactory = TransformerFactory.newInstance(); 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(); // The transformer will use a SAX parser as it's reader. reader.setContentHandler(new ExampleContentHandler()); try { reader.setFeature("http://xml.org/sax/features/namespace-prefixes", true); reader.setFeature("http://apache.org/xml/features/validation/dynamic", true); } catch (SAXException se) { // What can we do? // TODO: User diagnostics. } XMLFilter filter = ((SAXTransformerFactory) tfactory).newXMLFilter(new StreamSource(xslID)); filter.setParent(reader); // Now, when you call transformer.parse, it will set itself as // the content handler for the parser object (it's "parent"), and // will then call the parse method on the parser. filter.parse(new InputSource(sourceID)); }
From source file:com.netxforge.oss2.core.xml.JaxbUtils.java
public static <T> XMLFilter getXMLFilterForClass(final Class<T> clazz) throws SAXException { final XMLFilter filter; final XmlSchema schema = clazz.getPackage().getAnnotation(XmlSchema.class); if (schema != null) { final String namespace = schema.namespace(); if (namespace != null && !"".equals(namespace)) { LogUtils.tracef(clazz, "found namespace %s for class %s", namespace, clazz); filter = new SimpleNamespaceFilter(namespace, true); } else {//from www .j a v a 2 s.co m filter = new SimpleNamespaceFilter("", false); } } else { filter = new SimpleNamespaceFilter("", false); } final XMLReader xmlReader = XMLReaderFactory.createXMLReader(); filter.setParent(xmlReader); return filter; }
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 .ja v a 2 s . c om */ 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:net.sf.joost.trax.TransformerFactoryImpl.java
/** * Creates an <code>XMLFilter</code> that uses the given <code>Source</code> * as the transformation instructions./*from w ww .ja v a2 s .c o m*/ * Implementation of the {@link SAXTransformerFactory} * @param src - The Source of the transformation instructions. * @return An {@link XMLFilter} object, or <code>null</code> if this feature is not * supported. * @throws TransformerConfigurationException */ public XMLFilter newXMLFilter(Source src) throws TransformerConfigurationException { if (DEBUG) if (log.isDebugEnabled()) log.debug("getting SAXTransformerFactory.FEATURE_XMLFILTER " + "from Source " + src.getSystemId()); XMLFilter xFilter = null; try { Templates templates = newTemplates(src); //get a XMLReader XMLReader parser = Processor.createXMLReader(); xFilter = newXMLFilter(templates); xFilter.setParent(parser); return xFilter; } catch (SAXException ex) { TransformerConfigurationException tE = new TransformerConfigurationException(ex.getMessage(), ex); defaultErrorListener.fatalError(tE); return null; } }
From source file:org.dita.dost.module.GenMapAndTopicListModule.java
/** * Read a file and process it for list information. * //from w w w . j a v a 2s . c om * @param ref system path of the file to process * @throws DITAOTException if processing failed */ private void processFile(final Reference ref) throws DITAOTException { currentFile = ref.filename; assert currentFile.isAbsolute(); logger.info("Processing " + currentFile); final String[] params = { currentFile.toString() }; try { XMLReader xmlSource = getXmlReader(ref.format); for (final XMLFilter f : getProcessingPipe(currentFile)) { f.setParent(xmlSource); f.setEntityResolver(CatalogUtils.getCatalogResolver()); xmlSource = f; } xmlSource.setContentHandler(nullHandler); xmlSource.parse(currentFile.toString()); if (listFilter.isValidInput()) { processParseResult(currentFile); categorizeCurrentFile(ref); } else if (!currentFile.equals(rootFile)) { logger.warn(MessageUtils.getInstance().getMessage("DOTJ021W", params).toString()); failureList.add(currentFile); } } catch (final RuntimeException e) { throw e; } catch (final SAXParseException sax) { final Exception inner = sax.getException(); if (inner != null && inner instanceof DITAOTException) { throw (DITAOTException) inner; } if (currentFile.equals(rootFile)) { throw new DITAOTException(MessageUtils.getInstance().getMessage("DOTJ012F", params).toString() + ": " + sax.getMessage(), sax); } else if (processingMode == Mode.STRICT) { throw new DITAOTException(MessageUtils.getInstance().getMessage("DOTJ013E", params).toString() + ": " + sax.getMessage(), sax); } else { logger.error(MessageUtils.getInstance().getMessage("DOTJ013E", params).toString() + ": " + sax.getMessage(), sax); } failureList.add(currentFile); } catch (final FileNotFoundException e) { if (currentFile.equals(rootFile)) { throw new DITAOTException(MessageUtils.getInstance().getMessage("DOTA069F", params).toString(), e); } else if (processingMode == Mode.STRICT) { throw new DITAOTException(MessageUtils.getInstance().getMessage("DOTX008E", params).toString() + ": " + e.getMessage(), e); } else { logger.error(MessageUtils.getInstance().getMessage("DOTX008E", params).toString()); } failureList.add(currentFile); } catch (final Exception e) { if (currentFile.equals(rootFile)) { throw new DITAOTException(MessageUtils.getInstance().getMessage("DOTJ012F", params).toString() + ": " + e.getMessage(), e); } else if (processingMode == Mode.STRICT) { throw new DITAOTException(MessageUtils.getInstance().getMessage("DOTJ013E", params).toString() + ": " + e.getMessage(), e); } else { logger.error(MessageUtils.getInstance().getMessage("DOTJ013E", params).toString() + ": " + e.getMessage(), e); } failureList.add(currentFile); } if (!listFilter.isValidInput() && currentFile.equals(rootFile)) { if (xmlValidate) { // stop the build if all content in the input file was filtered out. throw new DITAOTException(MessageUtils.getInstance().getMessage("DOTJ022F", params).toString()); } else { // stop the build if the content of the file is not valid. throw new DITAOTException(MessageUtils.getInstance().getMessage("DOTJ034F", params).toString()); } } doneList.add(currentFile); listFilter.reset(); keydefFilter.reset(); }
From source file:org.dita.dost.module.reader.AbstractReaderModule.java
/** * Read a file and process it for list information. * * @param ref system path of the file to process * @param parseFile file to parse, may be {@code null} * @throws DITAOTException if processing failed *///from w ww .j av a 2 s .com void readFile(final Reference ref, final URI parseFile) throws DITAOTException { currentFile = ref.filename; assert currentFile.isAbsolute(); final URI src = parseFile != null ? parseFile : currentFile; assert src.isAbsolute(); final URI rel = tempFileNameScheme.generateTempFileName(currentFile); outputFile = new File(job.tempDirURI.resolve(rel)); final File outputDir = outputFile.getParentFile(); if (!outputDir.exists() && !outputDir.mkdirs()) { logger.error("Failed to create output directory " + outputDir.getAbsolutePath()); return; } validateMap = Collections.emptyMap(); defaultValueMap = Collections.emptyMap(); logger.info("Processing " + currentFile + " to " + outputFile.toURI()); final String[] params = { currentFile.toString() }; // Verify stub for current file is in Job final FileInfo fi = job.getFileInfo(currentFile); if (fi == null) { final FileInfo stub = new FileInfo.Builder().src(currentFile).uri(rel).result(currentFile) .isInput(currentFile.equals(rootFile)).build(); job.add(stub); } // InputSource in = null; Result out = null; try { final TransformerFactory tf = TransformerFactory.newInstance(); final SAXTransformerFactory stf = (SAXTransformerFactory) tf; final TransformerHandler serializer = stf.newTransformerHandler(); XMLReader parser = getXmlReader(ref.format); XMLReader xmlSource = parser; for (final XMLFilter f : getProcessingPipe(currentFile)) { f.setParent(xmlSource); f.setEntityResolver(CatalogUtils.getCatalogResolver()); xmlSource = f; } try { final LexicalHandler lexicalHandler = new DTDForwardHandler(xmlSource); parser.setProperty("http://xml.org/sax/properties/lexical-handler", lexicalHandler); parser.setFeature("http://xml.org/sax/features/lexical-handler", true); } catch (final SAXNotRecognizedException e) { } // in = new InputSource(src.toString()); out = new StreamResult(new FileOutputStream(outputFile)); serializer.setResult(out); xmlSource.setContentHandler(serializer); xmlSource.parse(src.toString()); if (listFilter.isValidInput()) { processParseResult(currentFile); categorizeCurrentFile(ref); } else if (!currentFile.equals(rootFile)) { logger.warn(MessageUtils.getMessage("DOTJ021W", params).toString()); failureList.add(currentFile); } } catch (final RuntimeException e) { throw e; } catch (final SAXParseException sax) { final Exception inner = sax.getException(); if (inner != null && inner instanceof DITAOTException) { throw (DITAOTException) inner; } if (currentFile.equals(rootFile)) { throw new DITAOTException( MessageUtils.getMessage("DOTJ012F", params).toString() + ": " + sax.getMessage(), sax); } else if (processingMode == Mode.STRICT) { throw new DITAOTException( MessageUtils.getMessage("DOTJ013E", params).toString() + ": " + sax.getMessage(), sax); } else { logger.error(MessageUtils.getMessage("DOTJ013E", params).toString() + ": " + sax.getMessage(), sax); } failureList.add(currentFile); } catch (final FileNotFoundException e) { if (!exists(currentFile)) { if (currentFile.equals(rootFile)) { throw new DITAOTException(MessageUtils.getMessage("DOTA069F", params).toString(), e); } else if (processingMode == Mode.STRICT) { throw new DITAOTException(MessageUtils.getMessage("DOTX008E", params).toString(), e); } else { logger.error(MessageUtils.getMessage("DOTX008E", params).toString()); } } else if (currentFile.equals(rootFile)) { throw new DITAOTException(MessageUtils.getMessage("DOTJ078F", params).toString() + " Cannot load file: " + e.getMessage(), e); } else if (processingMode == Mode.STRICT) { throw new DITAOTException(MessageUtils.getMessage("DOTJ079E", params).toString() + " Cannot load file: " + e.getMessage(), e); } else { logger.error(MessageUtils.getMessage("DOTJ079E", params).toString() + " Cannot load file: " + e.getMessage()); } failureList.add(currentFile); } catch (final Exception e) { if (currentFile.equals(rootFile)) { throw new DITAOTException( MessageUtils.getMessage("DOTJ012F", params).toString() + ": " + e.getMessage(), e); } else if (processingMode == Mode.STRICT) { throw new DITAOTException( MessageUtils.getMessage("DOTJ013E", params).toString() + ": " + e.getMessage(), e); } else { logger.error(MessageUtils.getMessage("DOTJ013E", params).toString() + ": " + e.getMessage(), e); } failureList.add(currentFile); } finally { if (out != null) { try { close(out); } catch (final IOException e) { logger.error(e.getMessage(), e); } } if (failureList.contains(currentFile)) { FileUtils.deleteQuietly(outputFile); } } if (!listFilter.isValidInput() && currentFile.equals(rootFile)) { if (validate) { // stop the build if all content in the input file was filtered out. throw new DITAOTException(MessageUtils.getMessage("DOTJ022F", params).toString()); } else { // stop the build if the content of the file is not valid. throw new DITAOTException(MessageUtils.getMessage("DOTJ034F", params).toString()); } } doneList.add(currentFile); listFilter.reset(); keydefFilter.reset(); }
From source file:org.dita.dost.util.XMLUtils.java
/** * Transform file with XML filters.//from ww w. ja v a2 s .co m * * @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 } } } }