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