From a010449e24ec424970b7f7cb9b943dfb80164503 Mon Sep 17 00:00:00 2001 From: Glen Mazza Date: Thu, 31 Jul 2003 05:14:29 +0000 Subject: [PATCH] XSLTInputHandler reimplemented using TraxInputHandler code. TraxInputHandler removed. (Retaining XSLTInputHandler because of its technology-independent name, also probably the more used class of the two.) git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@196762 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/fop/apps/TraxInputHandler.java | 216 ------------------ .../org/apache/fop/apps/XSLTInputHandler.java | 109 +++++++-- 2 files changed, 95 insertions(+), 230 deletions(-) delete mode 100644 src/java/org/apache/fop/apps/TraxInputHandler.java diff --git a/src/java/org/apache/fop/apps/TraxInputHandler.java b/src/java/org/apache/fop/apps/TraxInputHandler.java deleted file mode 100644 index d5ae20240..000000000 --- a/src/java/org/apache/fop/apps/TraxInputHandler.java +++ /dev/null @@ -1,216 +0,0 @@ -/* - * $Id: TraxInputHandler.java,v 1.6 2003/02/27 10:13:04 jeremias Exp $ - * ============================================================================ - * The Apache Software License, Version 1.1 - * ============================================================================ - * - * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modifica- - * tion, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. The end-user documentation included with the redistribution, if any, must - * include the following acknowledgment: "This product includes software - * developed by the Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, if - * and wherever such third-party acknowledgments normally appear. - * - * 4. The names "FOP" and "Apache Software Foundation" must not be used to - * endorse or promote products derived from this software without prior - * written permission. For written permission, please contact - * apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", nor may - * "Apache" appear in their name, without prior written permission of the - * Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- - * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * ============================================================================ - * - * This software consists of voluntary contributions made by many individuals - * on behalf of the Apache Software Foundation and was originally created by - * James Tauber . For more information on the Apache - * Software Foundation, please see . - */ -package org.apache.fop.apps; - -// Imported java.io classes -import java.io.File; - -// Imported TraX classes -import javax.xml.transform.Source; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.stream.StreamSource; -import javax.xml.transform.sax.SAXResult; -import javax.xml.transform.sax.SAXSource; -import javax.xml.transform.sax.SAXTransformerFactory; - -// Imported SAX classes -import org.xml.sax.InputSource; -import org.xml.sax.XMLReader; -import org.xml.sax.XMLFilter; - -/** - * XSLTInputHandler basically takes an XML file and transforms it with an - * XSLT file and the resulting XSL-FO document is input for FOP. - */ -public class TraxInputHandler extends InputHandler { - - private Transformer transformer; - private StreamSource xmlSource; - private Source xsltSource; - - /** - * Constructor with files as input. - * @param xmlfile XML file - * @param xsltfile XSLT file - * @throws FOPException if initializing the Transformer fails - */ - public TraxInputHandler(File xmlfile, File xsltfile) throws FOPException { - this.xmlSource = new StreamSource(xmlfile); - this.xsltSource = new StreamSource(xsltfile); - initTransformer(); - } - - /** - * Constructor with URIs/URLs as input. - * @param xmlURL XML URL - * @param xsltURL XSLT URL - * @throws FOPException if initializing the Transformer fails - */ - public TraxInputHandler(String xmlURL, String xsltURL) throws FOPException { - this.xmlSource = new StreamSource(xmlURL); - this.xsltSource = new StreamSource(xsltURL); - initTransformer(); - } - - /** - * Constructor with InputSources as input. - * @param xmlSource XML InputSource - * @param xsltSource XSLT InputSource - * @throws FOPException if initializing the Transformer fails - */ - public TraxInputHandler(InputSource xmlSource, InputSource xsltSource) - throws FOPException { - this.xmlSource = new StreamSource(xmlSource.getByteStream(), - xmlSource.getSystemId()); - this.xsltSource = new StreamSource(xsltSource.getByteStream(), - xsltSource.getSystemId()); - initTransformer(); - } - - private void initTransformer() throws FOPException { - try { - this.transformer = - TransformerFactory.newInstance().newTransformer(xsltSource); - } catch (Exception ex) { - throw new FOPException(ex); - } - } - - /** - * @see org.apache.fop.apps.InputHandler#getInputSource() - */ - public InputSource getInputSource() { - InputSource is = new InputSource(); - is.setByteStream(xmlSource.getInputStream()); - is.setSystemId(xmlSource.getSystemId()); - return is; - } - - /** - * Overwrites this method of the super class and returns an XMLFilter - * instead of a simple XMLReader which allows chaining of transformations. - * @see org.apache.fop.apps.InputHandler#getParser() - */ - public XMLReader getParser() throws FOPException { - return getXMLFilter(xsltSource); - } - - /** - * Creates from the transformer an instance of an XMLFilter which - * then can be used in a chain with the XMLReader passed to Driver. This way - * during the conversion of the xml file + xslt stylesheet the resulting - * data is fed into Fop. This should help to avoid memory problems - * @param xsltSource An xslt stylesheet - * @return an XMLFilter which can be chained together with other - * XMLReaders or XMLFilters - * @throws FOPException if setting up the XMLFilter fails - */ - public static XMLFilter getXMLFilter(Source xsltSource) throws FOPException { - try { - // 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 xmlfilter = - saxTFactory.newXMLFilter(xsltSource); - - // Create an XMLReader. - XMLReader parser = createParser(); - if (parser == null) { - throw new FOPException("Unable to create SAX parser"); - } - - // xmlFilter1 uses the XMLReader as its reader. - xmlfilter.setParent(parser); - return xmlfilter; - } else { - throw new FOPException("Your parser doesn't support the " - + "features SAXSource and SAXResult." - + "\nMake sure you are using an XSLT engine which " - + "supports TrAX"); - } - } catch (FOPException fe) { - throw fe; - } catch (Exception ex) { - throw new FOPException(ex); - } - } - - /** - * @see org.apache.fop.apps.InputHandler#run(Driver) - */ - public void run(Driver driver) throws FOPException { - try { - transformer.transform(xmlSource, - new SAXResult(driver.getContentHandler())); - } catch (Exception ex) { - throw new FOPException(ex); - } - } - - /** - * Sets an XSLT parameter. - * @param name the name of the parameter - * @param value the value of the parameter - */ - public void setParameter(String name, Object value) { - transformer.setParameter(name, value); - } - - -} \ No newline at end of file diff --git a/src/java/org/apache/fop/apps/XSLTInputHandler.java b/src/java/org/apache/fop/apps/XSLTInputHandler.java index 0770717e6..82a01b15d 100644 --- a/src/java/org/apache/fop/apps/XSLTInputHandler.java +++ b/src/java/org/apache/fop/apps/XSLTInputHandler.java @@ -53,9 +53,19 @@ package org.apache.fop.apps; // Imported java.io classes import java.io.File; +// Imported TraX classes +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamSource; +import javax.xml.transform.sax.SAXResult; +import javax.xml.transform.sax.SAXSource; +import javax.xml.transform.sax.SAXTransformerFactory; + // Imported SAX classes import org.xml.sax.InputSource; import org.xml.sax.XMLReader; +import org.xml.sax.XMLFilter; /** * XSLTInputHandler basically takes an XML file and transforms it with an XSLT @@ -63,7 +73,9 @@ import org.xml.sax.XMLReader; */ public class XSLTInputHandler extends InputHandler { - private TraxInputHandler traxInputHandler; + private Transformer transformer; + private StreamSource xmlSource; + private Source xsltSource; /** * Constructor for files as input @@ -72,7 +84,9 @@ public class XSLTInputHandler extends InputHandler { * @throws FOPException if initializing the Transformer fails */ public XSLTInputHandler(File xmlfile, File xsltfile) throws FOPException { - this.traxInputHandler = new TraxInputHandler(xmlfile, xsltfile); + this.xmlSource = new StreamSource(xmlfile); + this.xsltSource = new StreamSource(xsltfile); + initTransformer(); } /** @@ -82,7 +96,9 @@ public class XSLTInputHandler extends InputHandler { * @throws FOPException if initializing the Transformer fails */ public XSLTInputHandler(String xmlURL, String xsltURL) throws FOPException { - traxInputHandler = new TraxInputHandler(xmlURL, xsltURL); + this.xmlSource = new StreamSource(xmlURL); + this.xsltSource = new StreamSource(xsltURL); + initTransformer(); } /** @@ -93,32 +109,98 @@ public class XSLTInputHandler extends InputHandler { */ public XSLTInputHandler(InputSource xmlSource, InputSource xsltSource) throws FOPException { - traxInputHandler = new TraxInputHandler(xmlSource, xsltSource); + this.xmlSource = new StreamSource(xmlSource.getByteStream(), + xmlSource.getSystemId()); + this.xsltSource = new StreamSource(xsltSource.getByteStream(), + xsltSource.getSystemId()); + initTransformer(); + } + + private void initTransformer() throws FOPException { + try { + this.transformer = + TransformerFactory.newInstance().newTransformer(xsltSource); + } catch (Exception ex) { + throw new FOPException(ex); + } } /** - * Get the InputSource. - * @return the InputSource - * @deprecated Use TraxInputHandler run(Driver driver) instead. + * @see org.apache.fop.apps.InputHandler#getInputSource() */ public InputSource getInputSource() { - return traxInputHandler.getInputSource(); + InputSource is = new InputSource(); + is.setByteStream(xmlSource.getInputStream()); + is.setSystemId(xmlSource.getSystemId()); + return is; } /** - * Get the parser, actually an XML filter. + * Overwrites this method of the super class and returns an XMLFilter + * instead of a simple XMLReader which allows chaining of transformations. * @see org.apache.fop.apps.InputHandler#getParser() - * @deprecated Use TraxInputHandler run(Driver driver) instead. */ public XMLReader getParser() throws FOPException { - return traxInputHandler.getParser(); + return getXMLFilter(xsltSource); + } + + /** + * Creates from the transformer an instance of an XMLFilter which + * then can be used in a chain with the XMLReader passed to Driver. This way + * during the conversion of the xml file + xslt stylesheet the resulting + * data is fed into Fop. This should help to avoid memory problems + * @param xsltSource An xslt stylesheet + * @return an XMLFilter which can be chained together with other + * XMLReaders or XMLFilters + * @throws FOPException if setting up the XMLFilter fails + */ + public static XMLFilter getXMLFilter(Source xsltSource) throws FOPException { + try { + // 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 xmlfilter = + saxTFactory.newXMLFilter(xsltSource); + + // Create an XMLReader. + XMLReader parser = createParser(); + if (parser == null) { + throw new FOPException("Unable to create SAX parser"); + } + + // xmlFilter1 uses the XMLReader as its reader. + xmlfilter.setParent(parser); + return xmlfilter; + } else { + throw new FOPException("Your parser doesn't support the " + + "features SAXSource and SAXResult." + + "\nMake sure you are using an XSLT engine which " + + "supports TrAX"); + } + } catch (FOPException fe) { + throw fe; + } catch (Exception ex) { + throw new FOPException(ex); + } } /** * @see org.apache.fop.apps.InputHandler#run(Driver) */ public void run(Driver driver) throws FOPException { - traxInputHandler.run(driver); + try { + transformer.transform(xmlSource, + new SAXResult(driver.getContentHandler())); + } catch (Exception ex) { + throw new FOPException(ex); + } } /** @@ -127,9 +209,8 @@ public class XSLTInputHandler extends InputHandler { * @param value the value of the parameter */ public void setParameter(String name, Object value) { - traxInputHandler.setParameter(name, value); + transformer.setParameter(name, value); } } - -- 2.39.5