RE: Help to get started in a servlet

2002-02-06 Thread Zahigian, Mike
Here's a simple servlet that will work.  Like the FOP servlet, you give it a
fo file or an xml/xsl combination in a get parameter.  You have to have the
latest xalan and xerces in addition to fop, because I handle the xml
transformation within the servlet as opposed to using the fop methods for
transformation.  Let me know if you have any trouble.

Mike Z

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.xml.sax.InputSource;
import org.apache.fop.apps.Driver;
import javax.xml.transform.stream.*;
import javax.xml.transform.*;

public class SimpleServlet extends HttpServlet {

private static final String FO_REQUEST_PARAM = "fo";
private static final String XML_REQUEST_PARAM = "xml";
private static final String XSL_REQUEST_PARAM = "xsl";

// you might want to override init() and set up a log4j category for the
servlet so you can easily add debugging
// code

public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {

   try {
   // you might want to set up a constant to represent the
directory path or pull the directory path
   // from a configuration file, otherwise you have to
supply the path in the get parameter
String foParam = request.getParameter(FO_REQUEST_PARAM);
String xmlParam = request.getParameter(XML_REQUEST_PARAM);
String xslParam = request.getParameter(XSL_REQUEST_PARAM);

ByteArrayOutputStream out = new ByteArrayOutputStream();
InputSource input = null;

// set content type as pdf so browser will know it's getting pdf
content and display it properly
response.setContentType("application/pdf");

if ((request.getParameter(FO_REQUEST_PARAM)) != null) {
FileInputStream fo = new FileInputStream(foParam);
input = new InputSource(fo);
} else if(((request.getParameter(XML_REQUEST_PARAM)) != null) &&
((request.getParameter(XSL_REQUEST_PARAM)) != null)) {
File xml = new File(xmlParam);
File xsl = new File(xslParam);
Source xmlSource = new StreamSource(xml);
Source xslSource = new StreamSource(xsl);
StringWriter sw = new StringWriter();
TransformerFactory tFactory =
TransformerFactory.newInstance();
//create Templates so the xsl document will
function as a template and will be cached in
//order to optimize performance
Templates cachedXSLT =
tFactory.newTemplates(xslSource);
Transformer transformer =
cachedXSLT.newTransformer();
//transform the xml we've been given using
the cached xsl
transformer.transform(xmlSource, new
StreamResult(sw));
Reader r = new StringReader(sw.toString());
input = new InputSource(r);
} else {
// handle situation:  get parameters are not
correct
}
if (input != null) {
Driver driver = new Driver(input, out);
driver.setRenderer(Driver.RENDER_PDF);
driver.run();
}

//send content to the browser now
byte[] content = out.toByteArray();
response.setContentLength(content.length);
response.getOutputStream().write(content);
response.getOutputStream().flush();
} catch (Exception e) {
// handle exceptions.
}
}

// pass post data received to get for processing
public void doPost(HttpServletRequest request,
  HttpServletResponse
response)
throws IOException, ServletException
{
doGet(request, response);
}
}

-Original Message-
From: Chinn, Gale [mailto:[EMAIL PROTECTED]
Sent: Tuesday, February 05, 2002 7:58 AM
To: '[EMAIL PROTECTED]'
Subject: Help to get started in a servlet



I am new to fop and can get it to run command line, but would like to get it
to run in a servlet.
I have followed the info on fop's embedding page using fop.war file in the
webapps directory of Tomcat on ver 3.2 and 4, but cannot get it to work
using:
http://localhost:8080/fop/fop?fo=... or
http://localhost:8080/fop/servlet/fop?fo=... 

I would just like to get a simple pdf to come back to my browser to prove a
point to my group leader.  Any help would be appreciated

TIA,

Gale Chinn
Programmer/Analyst
Cessna Aircraft Company
Wichita, KS


Re: Help to get started in a servlet

2002-02-05 Thread Chuck Paussa
Chinn, Gale wrote:
I am new to fop and can get it to run command line, but would like to get it
to run in a servlet.
I have followed the info on fop's embedding page using fop.war file in the
webapps directory of Tomcat on ver 3.2 and 4, but cannot get it to work
using:
http://localhost:8080/fop/fop?fo=... or
http://localhost:8080/fop/servlet/fop?fo=... 

I would just like to get a simple pdf to come back to my browser to prove a
point to my group leader.  Any help would be appreciated
TIA,
Gale Chinn
Programmer/Analyst
Cessna Aircraft Company
Wichita, KS
Gale,
I dropped in the WAR, put my .fo file into /webapps and called the 
servlet with

http://localhost:8080/fop/fop?fo=../webapps/test.fo
or
http://localhost:8080/fop/fop?xml=../webapps/test.xml&xsl=../webapps/test.xsl
notice the ../ at the beginning of the path to the files. That's because 
the default root path for files in tomcat is /bin so you have to start 
the relative path from there.

Chuck