You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by Giancarlo Prestinari <gi...@dots.it> on 2002/07/16 13:03:38 UTC
Problem with fop Transform
Help me please!!
I don't understand why the first example doesn't work with jsp and tomcat 4.0.3 and jdk1.3
The error is :
javax.servlet.ServletException: error while creating fo file: javax.xml.transform.TransformerConfigurationException: javax.xml.transform.TransformerConfigurationException: javax.xml.transform.TransformerException: java.util.EmptyStackException
at dotsj.pdf.CPDFCreator.ProcessRequest(CPDFCreator.java:53)
at org.apache.jsp.generaPDF$jsp._jspService(generaPDF$jsp.java:69)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1012)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107)
at java.lang.Thread.run(Thread.java:484)
And the code (jsp / servlet) create a .fo file empty!!!
i don't understand why doesn't work...if the XML and XSLFO is correct...
JSP
<%@ page import="dotsj.pdf.*" %>
<% response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=\"prova.pdf\"");
CPDFCreator oPDFCreator = new CPDFCreator();
byte[] btContent = oPDFCreator.ProcessRequest();
response.setContentLength(btContent.length);
//out.println("len="+"btContent.length");
response.getOutputStream().write(btContent);
%>
CLASS CPDFCreator
package dotsj.pdf;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.log.*;
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.XSLTInputHandler;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import dotsj.util.CLogger;
public class CPDFCreator {
public CPDFCreator() {
}
public byte[] ProcessRequest() throws ServletException {
// Files used
String xmlFile = "c:/devj/src/dotsj/pdf/tstBookmark.xml";
String xslFile = "c:/devj/src/dotsj/pdf/tstBookmark.xslfo";
String foFile = "c:/devj/src/dotsj/pdf/tstBookmark.fo";
try {
// The XML and XSL sources
CLogger.write(CLogger.DEBUG_LEVEL, "Source");
Source xmlSource = new StreamSource(xmlFile);
Source xslSource = new StreamSource(xslFile);
// The result (fo File)
CLogger.write(CLogger.DEBUG_LEVEL, "Result");
Result result = new StreamResult(new PrintWriter(new FileOutputStream(new java.io.File(foFile))));
// Process
CLogger.write(CLogger.DEBUG_LEVEL, "crea transformfactory");
TransformerFactory transFact = TransformerFactory.newInstance();
CLogger.write(CLogger.DEBUG_LEVEL, "trasforma");
Transformer trans = transFact.newTransformer(xslSource);
trans.transform(xmlSource, result);
CLogger.write(CLogger.DEBUG_LEVEL, "fine trasformazione");
} catch (Exception e) {
throw new ServletException("error while creating fo file: " + e.toString());
}
// Generate PDF from fo File
try
{
// Initialize Logger
CLogger.write(CLogger.DEBUG_LEVEL, "crea hierarchy");
Hierarchy hierarchy = Hierarchy.getDefaultHierarchy();
Logger log = hierarchy.getLoggerFor("fop");
CLogger.write(CLogger.DEBUG_LEVEL, "setta priorita");
log.setPriority(Priority.WARN);
// Preparing source
CLogger.write(CLogger.DEBUG_LEVEL, "crea inputsource del file fo");
InputSource foSource = new InputSource(new FileReader(foFile));
// Render
ByteArrayOutputStream pdf = new ByteArrayOutputStream();
CLogger.write(CLogger.DEBUG_LEVEL, "crea il Driver");
Driver driver = new Driver(foSource, pdf);
driver.setLogger(log);
driver.setRenderer(Driver.RENDER_PDF);
CLogger.write(CLogger.DEBUG_LEVEL, "run del Driver");
driver.run();
// show PDF
//response.setContentType("application/pdf");
CLogger.write(CLogger.DEBUG_LEVEL, "acquisisco i byte del pdf");
byte[] content = pdf.toByteArray();
//response.setContentLength(content.length);
//response.getOutputStream().write(content);
//response.getOutputStream().flush();
CLogger.write(CLogger.DEBUG_LEVEL, "ritorno i byte");
return content;
} catch (Exception e) {
throw new ServletException("error while creating pdf using fo file:" + e.toString());
}
}
}
Thanks very much
Re: Problem with fop Transform
Posted by "J.Pietschmann" <j3...@yahoo.de>.
Giancarlo Prestinari wrote:
> Help me please!!
>
> I don't understand why the first example doesn't work with jsp and
> tomcat 4.0.3 and jdk1.3
>
> The error is :
> javax.servlet.ServletException: error while creating fo file:
> javax.xml.transform.TransformerConfigurationException:
> javax.xml.transform.TransformerConfigurationException:
> javax.xml.transform.TransformerException: java.util.EmptyStackException
This is a problem with your transformer, not with FOP.
You could have hit a bug, or your style sheet is faulty.
Check whether your XSLT file works with a different
standalone XSLT processor, like Saxon.
J.Pietschmann