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]