List of usage examples for org.xml.sax XMLFilter setContentHandler
public void setContentHandler(ContentHandler handler);
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(); }