DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9235>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9235

FOP Servlet Error





------- Additional Comments From [EMAIL PROTECTED]  2002-05-20 12:52 -------
/*
 * $Id: FopServlet.java,v 1.4.2.1 2002/03/01 12:44:39 chrisg Exp $
 * Copyright (C) 2001 The Apache Software Foundation. All rights reserved.
 * For details on use and redistribution please refer to the
 * LICENSE file included with these sources.
 */

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import org.apache.fop.apps.Driver;
import org.apache.fop.apps.Version;
import org.apache.fop.apps.*;

import org.apache.log.*;

/**
 * Example servlet to generate a PDF from a servlet.
 * Servlet param is:
 * <ul>
 *   <li>fo: the path to a formatting object file to render
 * </ul>
 *
 * Example URL: http://servername/servlet/FopServlet?fo=readme.fo
 * Example URL: http://servername/servlet/FopServlet?
xml=data.xml&xsl=format.xsl
 * Compiling: you will need 
 * - servlet_2_2.jar
 * - fop.jar
 * - sax api
 * - logkit jar
 *
 * Running: you will need in the WEB-INF/lib/ directory:
 * - fop.jar
 * - batik.jar
 * - avalon-framework-4.0.jar
 * - logkit-1.0.jar
 * - xalan-2.0.0.jar
 */
public class FopServlet extends HttpServlet {
    public static final String FO_REQUEST_PARAM = "fo";
    public static final String XML_REQUEST_PARAM = "xml";
    public static final String XSL_REQUEST_PARAM = "xsl";
    Logger log = null;

    public void doGet(HttpServletRequest request,
                      HttpServletResponse response) throws ServletException {
        if(log == null) {
            Hierarchy hierarchy = Hierarchy.getDefaultHierarchy();
            log = hierarchy.getLoggerFor("fop");
            log.setPriority(Priority.DEBUG);
        }
        try {
            String foParam = request.getParameter(FO_REQUEST_PARAM);
            String xmlParam = request.getParameter(XML_REQUEST_PARAM);
            String xslParam = request.getParameter(XSL_REQUEST_PARAM);
                        
                        System.out.println("XML = (" + xmlParam + ")");
                        System.out.println("XSL = (" + xslParam + ")");

            if (foParam != null) {
                FileInputStream file = new FileInputStream(foParam);
                renderFO(new InputSource(file), response);
            } else if((xmlParam != null) && (xslParam != null)) {
                //InputHandler input = new XSLTInputHandler(new File
(xmlParam), new File(xslParam));
                                System.out.println("Before renderXML");
                renderXML(new File(xmlParam), new File(xslParam), response);
            } else {
                PrintWriter out = response.getWriter();
                out.println("<html><head><title>Error</title></head>\n"+
                            "<body><h1>FopServlet Error</h1><h3>No 'fo' "+
                            "request param given.</body></html>");
            }
        } catch (ServletException ex) {
            throw ex;
        }
        catch (Exception ex) {
            throw new ServletException(ex);
        }
    }

    /**
     * renders an FO inputsource into a PDF file which is rendered
     * directly to the response object's OutputStream
     */
    public void renderFO(InputSource foFile,
                         HttpServletResponse response) throws ServletException 
{
        try {

            ByteArrayOutputStream out = new ByteArrayOutputStream();

            response.setContentType("application/pdf");
                        //response.setContentType("text/html");

            Driver driver = new Driver(foFile, out);
            driver.setLogger(log);
            driver.setRenderer(Driver.RENDER_PDF);
            driver.run();                       

            byte[] content = out.toByteArray();
                                
                        response.setContentLength(content.length);
            response.getOutputStream().write(content);
            response.getOutputStream().flush();
        } catch (Exception ex) {
            throw new ServletException(ex);
        }
    }

    public void renderXML(File inputXML, File inputXSL,
                         HttpServletResponse response) throws ServletException 
{
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();

            response.setContentType("application/pdf");
                        InputHandler inputHandler = new XSLTInputHandler
(inputXML, inputXSL);
                        XMLReader parser = inputHandler.getParser();
                        
            Driver driver = new Driver();
            driver.setLogger(log);
            driver.setRenderer(Driver.RENDER_PDF);
                        
            driver.setOutputStream(out);
            driver.render(parser, inputHandler.getInputSource());

            byte[] content = out.toByteArray();
            System.out.println("Length = (" + content.length + ")");

            response.setContentLength(content.length);
            response.getOutputStream().write(content);
            response.getOutputStream().flush();
        } catch (Exception ex) {
            throw new ServletException(ex);
        }
    }

    /**
     * creates a SAX parser, using the value of org.xml.sax.parser
     * defaulting to org.apache.xerces.parsers.SAXParser
     *
     * @return the created SAX parser
     */
    static XMLReader createParser() throws ServletException {
        String parserClassName = System.getProperty("org.xml.sax.parser");
        if (parserClassName == null) {
            parserClassName = "org.apache.xerces.parsers.SAXParser";
        }

        try {
            return (XMLReader) Class.forName(
                     parserClassName).newInstance();
        } catch (Exception e) {
            throw new ServletException(e);
        }
    }

}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to