]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Moved FOPPrintServlet from using XSLTInputHandler to JAXP.
authorGlen Mazza <gmazza@apache.org>
Sun, 11 Jul 2004 22:55:08 +0000 (22:55 +0000)
committerGlen Mazza <gmazza@apache.org>
Sun, 11 Jul 2004 22:55:08 +0000 (22:55 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197783 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/servlet/FopPrintServlet.java

index 687019042ebe7deb54c8fa267a166c7ec0ccf7c1..301a70242a42338466e33678f03b806158f486ff 100644 (file)
@@ -22,18 +22,30 @@ import java.io.File;
 import java.io.InputStream;
 import java.io.PrintWriter;
 
+// JAXP
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.stream.StreamSource;
 
+// XML
 import org.apache.commons.logging.impl.SimpleLog;
 import org.apache.commons.logging.Log;
 import org.apache.fop.apps.Driver;
-import org.apache.fop.apps.XSLTInputHandler;
 import org.xml.sax.InputSource;
 
+//Java
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+
+
 /**
  * Example servlet to generate a fop printout from a servlet.
  * Printing goes to the default printer on host where the servlet executes.
@@ -55,7 +67,6 @@ import org.xml.sax.InputSource;
  * @version $Id: FopPrintServlet.java,v 1.2 2003/03/07 09:48:05 jeremias Exp $
  * (todo) Doesn't work since there's no AWTRenderer at the moment. Revisit when
  * available.
- * (todo) Don't use XSLTInputHandler anymore
  * (todo) Ev. add caching mechanism for Templates objects
  */
 public class FopPrintServlet extends HttpServlet {
@@ -101,10 +112,7 @@ public class FopPrintServlet extends HttpServlet {
                 InputStream file = new java.io.FileInputStream(foParam);
                 renderFO(new InputSource(file), response);
             } else if ((xmlParam != null) && (xsltParam != null)) {
-                XSLTInputHandler input =
-                  new XSLTInputHandler(new File(xmlParam),
-                                       new File(xsltParam), null);
-                renderXML(input, response);
+                renderXML(new File(xmlParam), new File(xsltParam), response);
             } else {
                 response.setContentType("text/html");
 
@@ -142,16 +150,29 @@ public class FopPrintServlet extends HttpServlet {
 
     /**
      * Renders an FO generated using an XML and a stylesheet to the default printer.
-     * @param input XSLTInputHandler to use
-     * @param response Response to write to
+     * @param xmlfile XML file object
+     * @param xsltfile XSLT stylesheet 
+     * @param response HTTP response object
      * @throws ServletException In case of a problem
      */
-    public void renderXML(XSLTInputHandler input,
+    public void renderXML(File xmlfile, File xsltfile,
                           HttpServletResponse response) throws ServletException {
         try {
             Driver driver = new Driver();
             driver.setRenderer(Driver.RENDER_PRINT);
-            driver.render(input.getParser(), input.getInputSource());
+
+            // Setup XSLT
+            TransformerFactory factory = TransformerFactory.newInstance();
+            Transformer transformer = factory.newTransformer(new StreamSource(xsltfile));
+            
+            // Setup input for XSLT transformation
+            Source src = new StreamSource(xmlfile);
+        
+            // Resulting SAX events (the generated FO) must be piped through to FOP
+            Result res = new SAXResult(driver.getContentHandler());
+
+            // Start XSLT transformation and FOP processing
+            transformer.transform(src, res);
 
             reportOK (response);
         } catch (Exception ex) {