page forward problem
i have a jsp which contains the following:
com.XML.ProcessXML processXML =new com.XML.ProcessXML();
if (template.equals("Complete Resume"))
{
processXML.CreateXSLFO("C:/Program Files/apache-tomcat-6.0.7/webapps/Experience/projectteam.xml","C:/Program Files/apache-tomcat-6.0.7/webapps/Experience/Templates/projectteam2fo.xsl","completeresumeResult.fo");
processXML.CreatePDF("completeresumeResult.fo","C:/Program Files/apache-tomcat-6.0.7/webapps/Experience/Templates/foo.pdf");
pageContext.forward("Templates/foo.pdf" );
}
the problem is caused by the pageContext.forward line (if i remove that line i get no error)
the PDF is created and once the page has errored i can navigat to the page
why am i getting this error completly confused?
org.apache.jasper.JasperException: java.lang.IllegalStateException: getOutputStream() has already been calledforthis response
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:565)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:426)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause
java.lang.IllegalStateException: getOutputStream() has already been calledforthis response
org.apache.catalina.connector.Response.getWriter(Response.java:604)
org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:197)
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:191)
org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:119)
org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:79)
org.apache.jsp.cvgeneration_jsp._jspService(cvgeneration_jsp.java:164)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:390)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.7 logs.
[3120 byte] By [
h1400046a] at [2007-11-26 19:25:57]

# 2
i dont understand
the methods are below, what do you suggest i change?
public void CreateXSLFO(String xmldocname, String xsltdocname, String xslfodocname) {
System.out.println("creating xsl-fo");
File xmldocument = new File(xmldocname);
File xsltdocument = new File(xsltdocname);
File xslfodocument = new File(xslfodocname);
try {
OutputStream outputstream = new java.io.FileOutputStream(xslfodocument);
TransformerFactory factory = TransformerFactory.newInstance();
//pass the xslt document
Transformer transformer = factory.newTransformer(new StreamSource(xsltdocument));
//pass the xml document
Source sourse = new StreamSource(xmldocument);
//pass the outputstream (new file)
Result result = new StreamResult(outputstream);
// transform the xslt to xsl-fo using FOP
transformer.transform(sourse, result);
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println("xslfo created");
}
public void CreatePDF(String xslfodocname, String pdfdocname) {
System.out.println("creating pdf");
File xslfodocument = new File(xslfodocname);
File pdfdocument = new File(pdfdocname);
OutputStream outputstream = null;
try {
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
outputstream = new FileOutputStream(pdfdocument);
outputstream = new BufferedOutputStream(outputstream);
//set format
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, outputstream);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
Source sourse = new StreamSource(xslfodocument);
Result result = new SAXResult(fop.getDefaultHandler());
System.out.println("about to transform result");
// transform the xsl-fo to pdf using FOP
transformer.transform(sourse, result);
// Result processing
FormattingResults foResults = fop.getResults();
java.util.List pageSequences = foResults.getPageSequences();
for (Iterator iterator = pageSequences.iterator(); iterator.hasNext();)
{
PageSequenceResults pageSequenceResults = (PageSequenceResults)iterator.next();
}
outputstream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println("pdf created");
}
# 3
as the streams are opened already just use
pageContext.include( "Templates/foo.pdf",true ); method instead of pageContext.forward( "Templates/foo.pdf" ); in your below code;
Hope this will works for you. best of luck.
com.XML.ProcessXML processXML = new com.XML.ProcessXML();
if (template.equals("Complete Resume"))
{
processXML.CreateXSLFO("C:/Program Files/apache-tomcat-6.0.7/webapps/Experience/projectteam.xml", "C:/Program Files/apache-tomcat-6.0.7/webapps/Experience/Templates/projectteam2fo.xsl", "completeresumeResult.fo");
processXML.CreatePDF("completeresumeResult.fo", "C:/Program Files/apache-tomcat-6.0.7/webapps/Experience/Templates/foo.pdf");
pageContext.forward( "Templates/foo.pdf" );
}