Hi,
I am using FOP to generate PDF reports from servlet. I am generating and
storing the pdf report into file and serving that file so that I am avoiding
repeating calls from browser. every thing going fine, I am able to generate
pdf reports in development env(windows) and testing (AIX) but when a load
test is performed on application(AIX, Websphere 5), pdf reports are failing
after some time(like 20 users concurrently accessing the reports ) but all
other functions of applicaiton running fine. Here is the exception I am
getting and followed by the pdf code segment that causing this exception.

Please let me know if I am doing wrong any where.

I am guessing ,Driver has some problem, like hanging or not getting
destroyed.

Thanks
subbareddy.


org.apache.fop.apps.FOPException: root must be root element
        at
org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java(Compiled
Code))
        at
org.apache.xalan.transformer.ResultTreeHandler.flushElem(ResultTreeHandler.j
ava(Compiled Code))
        at
org.apache.xalan.transformer.ResultTreeHandler.flushPending(ResultTreeHandle
r.java(Compiled Code))
        at
org.apache.xalan.transformer.ResultTreeHandler.endElement(ResultTreeHandler.
java(Compiled Code))
        at
org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java(
Compiled Code))
        at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApp
lyTemplates.java(Compiled Code))
        at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.jav
a(Compiled Code))
        at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(Transform
erImpl.java(Compiled Code))
        at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(Transformer
Impl.java:2081)
        at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.j
ava:1137)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:
600)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:
1054)
        at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:
1032)
        at
com.verizon.wbtt.components.servlet.controller.ControllerServlet.outputXML2P
dfFile(ControllerServlet.java(Com
piled Code))
        at
com.verizon.wbtt.components.servlet.controller.ControllerServlet.doProcess(C
ontrollerServlet.java(Compiled Co
de))


********************** Code Segment *******************


public class ControllerServlet extends HttpServlet {

 private HashMap eventMappings;
 private TransformerFactory factory =null;
 Driver driver=null;
 private org.apache.avalon.framework.logger.Logger log= new ConsoleLogger
(ConsoleLogger.LEVEL_FATAL);

 public void init() {
     String eventMappingsURL = null;
  try{

   factory=TransformerFactory.newInstance();
   MessageHandler.setScreenLogger(log);
   driver = new Driver();
   driver.setLogger(log);
   driver.setRenderer(Driver.RENDER_PDF);
 }
 protected void outputXML2PdfFile (Source xml, String xslt,
HttpServletRequest request, HttpServletResponse response) throws
javax.servlet.ServletException, IOException, FOPException,
TransformerException {
  String id = getServletConfig().getServletContext().getRealPath("/");
  org.apache.fop.configuration.Configuration.put("baseDir", id);

  HttpSession session = request.getSession();
  CacheDir pdfDir = (CacheDir) session.getAttribute("__PDFFILEDIR__");

  if (pdfDir == null) {
   CacheDir tempDir = (CacheDir)
getServletContext().getAttribute("__TEMPFILEDIR__");
   if (tempDir == null) {
    //tempDir = new CacheDir (WbtsPdfDir, "temp");
    tempDir = new CacheDir (id, "temp");
    tempDir.mkdir();
    getServletContext().setAttribute("__TEMPFILEDIR__", tempDir);
   }

   pdfDir = new CacheDir (tempDir, session.getId());
   pdfDir.mkdir();
   session.setAttribute("__PDFFILEDIR__", pdfDir);
  }
  // end of cache directory

  String pdfName = String.valueOf(System.currentTimeMillis()) + ".pdf";
  OutputStream out = new FileOutputStream(new File(pdfDir, pdfName));
  driver.setOutputStream (out);

  TransformerFactory factory = TransformerFactory.newInstance();
  factory.setURIResolver(defaultURIResolver());
  StreamSource slt = new
StreamSource(getServletConfig().getServletContext().getResourceAsStream(xslt
));
  slt.setSystemId(id);
  Transformer transformer = factory.newTransformer(slt);

  SAXResult res = new SAXResult(driver.getContentHandler());
  res.setSystemId(id);
  xml.setSystemId(id);
  transformer.transform(xml, res);
  out.flush(); out.close();

Logger.trace(Logger.SERVLET_LOGGING,"ControllerServlet().outputXML2PdfFile()
-- Forwarding to pdf file :"+File.separator + pdfDir.getContextName() +
File.separator + pdfName);
  RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher(File.separator +
pdfDir.getContextName() + File.separator + pdfName);
  dispatcher.forward(request, response);


  //response.sendRedirect (File.separator + pdfDir.getContextName() +
File.separator + pdfName);
 }


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

Reply via email to