From 944fab93a1edb00ac1517f769dcf6d14c180dfb3 Mon Sep 17 00:00:00 2001 From: Glen Mazza Date: Sat, 2 Aug 2003 01:15:20 +0000 Subject: [PATCH] 1. Moved the XMLReader createParser() functionality from abstract class InputHandler to FOInputHandler. 2. Added the setting of the "namespace-prefix" SAX option directly into createParser(), and removed function setParserFeatures (where it was previously being set). 3. Removed the duplicate XMLReader creation code in Driver.run(), it now uses FOTreeBuilder.createParser(). git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@196769 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/fop/apps/Driver.java | 13 ++----- .../org/apache/fop/apps/FOInputHandler.java | 30 +++++++++++++++- .../org/apache/fop/apps/InputHandler.java | 35 ------------------- .../org/apache/fop/apps/XSLTInputHandler.java | 2 +- 4 files changed, 32 insertions(+), 48 deletions(-) diff --git a/src/java/org/apache/fop/apps/Driver.java b/src/java/org/apache/fop/apps/Driver.java index f45f50f46..acf863a54 100644 --- a/src/java/org/apache/fop/apps/Driver.java +++ b/src/java/org/apache/fop/apps/Driver.java @@ -579,7 +579,6 @@ public class Driver implements LogEnabled { public synchronized void render(InputHandler inputHandler) throws FOPException { XMLReader parser = inputHandler.getParser(); - inputHandler.setParserFeatures(parser); render(parser, inputHandler.getInputSource()); } @@ -660,15 +659,8 @@ public class Driver implements LogEnabled { if (reader == null) { if (!(source instanceof DocumentInputSource)) { - try { - SAXParserFactory spf = javax.xml.parsers.SAXParserFactory.newInstance(); - spf.setNamespaceAware(true); - reader = spf.newSAXParser().getXMLReader(); - } catch (SAXException e) { - throw new FOPException(e); - } catch (ParserConfigurationException e) { - throw new FOPException(e); - } + //TODO: (gm) rename to FOFileHandler or similar + reader = org.apache.fop.apps.FOInputHandler.createParser(); } } @@ -678,6 +670,5 @@ public class Driver implements LogEnabled { render(reader, source); } } - } diff --git a/src/java/org/apache/fop/apps/FOInputHandler.java b/src/java/org/apache/fop/apps/FOInputHandler.java index 9f23c7dd5..1c52f75ee 100644 --- a/src/java/org/apache/fop/apps/FOInputHandler.java +++ b/src/java/org/apache/fop/apps/FOInputHandler.java @@ -53,11 +53,16 @@ package org.apache.fop.apps; // Imported SAX classes import org.xml.sax.InputSource; import org.xml.sax.XMLReader; +import org.xml.sax.SAXException; +import org.xml.sax.SAXNotSupportedException; // java +import javax.xml.parsers.SAXParserFactory; +import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.net.URL; + /** * Manages input if it is an XSL-FO file. */ @@ -97,7 +102,7 @@ public class FOInputHandler extends InputHandler { * @see org.apache.fop.apps.InputHandler#getParser() */ public XMLReader getParser() throws FOPException { - return super.createParser(); + return createParser(); } /** @@ -107,6 +112,29 @@ public class FOInputHandler extends InputHandler { throw new FOPException("not implemented: FOInputHandler.run(Driver)"); } + /** + * Creates XMLReader object using default + * SAXParserFactory + * @return the created XMLReader + * @throws FOPException if the parser couldn't be created or configured for proper operation. + */ + protected static XMLReader createParser() throws FOPException { + try { + SAXParserFactory factory = SAXParserFactory.newInstance(); + factory.setNamespaceAware(true); + factory.setFeature( + "http://xml.org/sax/features/namespace-prefixes", true); + return factory.newSAXParser().getXMLReader(); + } catch (SAXNotSupportedException se) { + throw new FOPException("Error: You need a parser which allows the" + + " http://xml.org/sax/features/namespace-prefixes" + + " feature to be set to true to support namespaces", se); + } catch (SAXException se) { + throw new FOPException("Couldn't create XMLReader", se); + } catch (ParserConfigurationException pce) { + throw new FOPException("Couldn't create XMLReader", pce); + } + } } diff --git a/src/java/org/apache/fop/apps/InputHandler.java b/src/java/org/apache/fop/apps/InputHandler.java index c9783fc13..fb060d47d 100644 --- a/src/java/org/apache/fop/apps/InputHandler.java +++ b/src/java/org/apache/fop/apps/InputHandler.java @@ -111,24 +111,6 @@ public abstract class InputHandler { throw new Error("unexpected MalformedURLException"); } } - - /** - * Creates XMLReader object using default - * SAXParserFactory - * @return the created XMLReader - * @throws FOPException if the parser couldn't be created or configured for proper operation. - */ - protected static XMLReader createParser() throws FOPException { - try { - SAXParserFactory factory = SAXParserFactory.newInstance(); - factory.setNamespaceAware(true); - return factory.newSAXParser().getXMLReader(); - } catch (SAXException se) { - throw new FOPException("Coudn't create XMLReader", se); - } catch (ParserConfigurationException pce) { - throw new FOPException("Coudn't create XMLReader", pce); - } - } /** * Runs this InputHandler through the Driver. @@ -136,22 +118,5 @@ public abstract class InputHandler { * @throws FOPException if processing this InputHandler fails */ public abstract void run(Driver driver) throws FOPException; - - /** - * Sets the parser features on an XMLReader - * @param parser XMLReader to set features on - * @throws FOPException if the XMLReader doesn't support the feature that - * need to be set - */ - public static void setParserFeatures(XMLReader parser) throws FOPException { - try { - parser.setFeature("http://xml.org/sax/features/namespace-prefixes", - true); - } catch (SAXException e) { - throw new FOPException("Error: You need a parser which allows the" - + " http://xml.org/sax/features/namespace-prefixes" - + " feature to be set to true to support namespaces", e); - } - } } diff --git a/src/java/org/apache/fop/apps/XSLTInputHandler.java b/src/java/org/apache/fop/apps/XSLTInputHandler.java index 82a01b15d..d287e0f16 100644 --- a/src/java/org/apache/fop/apps/XSLTInputHandler.java +++ b/src/java/org/apache/fop/apps/XSLTInputHandler.java @@ -170,7 +170,7 @@ public class XSLTInputHandler extends InputHandler { saxTFactory.newXMLFilter(xsltSource); // Create an XMLReader. - XMLReader parser = createParser(); + XMLReader parser = FOInputHandler.createParser(); if (parser == null) { throw new FOPException("Unable to create SAX parser"); } -- 2.39.5