Raible's Wiki

Raible Designs
Wiki Home
News
Recent Changes

AppFuse

Homepage
  - Korean
  - Chinese
  - Italian
  - Japanese

QuickStart Guide
  - Chinese
  - French
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish
  - Japanese

User Guide
  - Korean
  - Chinese

Tutorials
  - Chinese
  - German
  - Italian
  - Korean
  - Portuguese
  - Spanish

FAQ
  - Korean

Latest Downloads

Other Applications

Struts Resume
Security Example
Struts Menu

Set your name in
UserPreferences


Referenced by
Articles
Articles_cn
Articles_de
Articles_pt
Articles_zh




JSPWiki v2.2.33

[RSS]


Hide Menu

POJOToPDF


Difference between version 21 and version 8:

At line 15 changed 2 lines.
* [4] Modify User Service Junit test
* [5] Run User Service Junit test
* [4] Modify UserManagerTest Junit test
* [5] Run UserManagerTest Junit test
At line 25 added 2 lines.
UserInputSource needs to extend interface FOPSource which should be in src/service/**/fop/FOPSource.java (source attached at the end of this tutorial).
At line 37 changed 1 line.
public class UserInputSource extends InputSource {
public class UserInputSource extends InputSource implements FOPSource {
At line 69 added 2 lines.
At line 79 added 2 lines.
At line 81 changed 1 line.
This class depends on two helper classes, AbstractObjectReader and EasyGenerationContentHandlerProxy that need to be added to src/service/**/util. These files are downloadable at the end of this tutorial.
This class depends on two helper classes, AbstractObjectReader and EasyGenerationContentHandlerProxy that need to be added to src/service/**/fop. These files are downloadable at the end of this tutorial.
At line 101 changed 1 line.
import org.appfuse.util.AbstractObjectReader;
import org.appfuse.fop.AbstractObjectReader;
At line 146 added 3 lines.
At line 169 changed 1 line.
processUserDetails(user);
processUserDetails(user);
At line 197 added 1 line.
At line 207 changed 1 line.
Place the user2fo.xsl stylesheet in src/web/**/fop/user2fo.xsl.
Place the user2fo.xsl stylesheet in src/service/**/fop/xsl/user2fo.xsl.
At line 323 changed 1 line.
!!Modify User Junit test [#4]
!!Modify UserManagerTest.java Junit test [#4]
At line 325 changed 1 line.
To support the execution of the User service level test, we need another helper file. This file (attached at the end) is called FOPHelper.java and lives in src/service/**/utils.
To support the execution of the User service level test, we need another helper file. This file (attached at the end) is called FOPHelper.java and lives in src/service/**/fop.
At line 356 changed 1 line.
import org.appfuse.utils.FOPHelper;
import org.appfuse.fop.FOPHelper;
At line 360 changed 32 lines.
try {
User testData = new User();
testData.setUsername("tomcat");
testData.getRoles().add(new Role("user"));
// set expected behavior on dao
userDAO.expects(once()).method("getUser")
.with(eq("tomcat")).will(returnValue(testData));
user = userManager.getUser("tomcat");
File baseDir = new File(".");
File xslFile = new File(baseDir, "./src/web/org/appfuse/webapp/fop/user2fo.xsl");
if (xslFile.exists()) {
log.info("xslFile exists");
}
File pdfFile = new File(baseDir, "user.pdf");
File xmlFile = new File(baseDir, "user.xml");
log.debug("Input: a User object");
log.debug("Stylesheet: " + xslFile);
log.debug("Output: PDF (" + pdfFile + ")");
log.debug("Transforming...");
FOPHelper fopHelper = new FOPHelper();
fopHelper.convertUser2PDF(user, xslFile, pdfFile);
fopHelper.convertUser2XML(user, xmlFile);
}
catch (Throwable e) {
log.error("Error [" + e.getMessage() + "]", e);
}
log.info("Inside testGeneratePSF");
User testData = new User();
testData.setUsername("tomcat");
testData.getRoles().add(new Role("user"));
// set expected behavior on dao
userDAO.expects(once()).method("getUser")
.with(eq("tomcat")).will(returnValue(testData));
user = userManager.getUser("tomcat");
UserInputSource uis = new UserInputSource(user);
// Setup directories
File baseDir = new File(".");
File outDir = new File(".");
outDir.mkdirs();
//Setup input and output
File xslFile = new File(baseDir, "./src/service/org/appfuse/fop/xsl/user2fo.xsl");
File pdfFile = new File(outDir, "user.pdf");
File xmlFile = new File(outDir, "user.xml");
File foFile = new File(outDir, "user.fo");
log.debug("Input: a UserInputSource object");
log.debug("Stylesheet: " + xslFile);
log.debug("Output: PDF (" + pdfFile + ")");
log.debug("Output: FO (" + foFile + ")");
log.debug("Transforming...");
FOPHelper fopHelper = new FOPHelper();
fopHelper.convertPOJO2PDF(uis, xslFile, pdfFile, foFile);
fopHelper.convertPOJO2XML(uis, xmlFile);
At line 404 changed 2 lines.
[junit] [appfuse] DEBUG [main] UserManagerTest.testGeneratePDF(88) | Input: a User object
[junit] [appfuse] DEBUG [main] UserManagerTest.testGeneratePDF(89) | Stylesheet: ././src/web/org/appfuse/webapp/fop/user2fo.xsl
[junit] [appfuse] DEBUG [main] UserManagerTest.testGeneratePDF(88) | Input: a UserInputSource object
[junit] [appfuse] DEBUG [main] UserManagerTest.testGeneratePDF(89) | Stylesheet: ././src/service/org/appfuse/fop/xsl/user2fo.xsl
At line 419 changed 1 line.
At line 423 changed 1 line.
import org.appfuse.fop.UserXMLReader;
import org.appfuse.fop.FOPHelper;
At line 430 changed 5 lines.
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.*;
import java.util.Date;
At line 440 changed 1 line.
At line 444 changed 1 line.
import org.springframework.core.io.*;
import org.xml.sax.InputSource;
At line 463 added 1 line.
import javax.xml.transform.sax.SAXSource;
At line 451 changed 1 line.
At line 456 changed 1 line.
* <p><a href="FopServlet.java.html"><i>View Source</i></a></p>
* <p><a href="FOPServlet.java.html"><i>View Source</i></a></p>
At line 462 changed 1 line.
* display-name="Fop Servlet"
* display-name="FOP Servlet"
At line 469 changed 4 lines.
public class FopServlet extends HttpServlet {
private Logger logger = null;
public class FOPServlet extends HttpServlet {
private Logger logger = null;
At line 475 changed 2 lines.
At line 478 changed 3 lines.
this.servletContext = getServletContext();
this.ctx =
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
this.servletContext = getServletContext();
this.ctx =
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
At line 482 changed 1 line.
At line 496 changed 1 line.
At line 510 changed 1 line.
At line 523 changed 4 lines.
ByteArrayOutputStream out = null;
try {
ByteArrayOutputStream out = null;
try {
At line 528 changed 1 line.
At line 531 changed 31 lines.
Driver driver = new Driver();
Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
driver.setLogger(logger);
MessageHandler.setScreenLogger(logger);
driver.setRenderer(Driver.RENDER_PDF);
// Start with a bigger buffer to avoid too many buffer reallocations
out = new ByteArrayOutputStream(16384);
driver.setOutputStream(out);
ServletContextResource resource =
new ServletContextResource(servletContext,
"/WEB-INF/classes/org/appfuse/webapp/fop/user2fo.xsl");
File xslFile = resource.getFile();
//Setup XSLT
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(xslFile));
//Setup input for XSLT transformation
Source src = new UserInputSource(user).getSource();
//Resulting SAX events (the generated FO) must be piped through to FOP
Result res = new SAXResult(driver.getContentHandler());
//Start XSLT transformation and FOP processing
transformer.transform(src, res);
byte[] content = out.toByteArray();
UserInputSource uis = new UserInputSource(user);
ClassPathResource resource =
new ClassPathResource("/org/appfuse/fop/xsl/user2fo.xsl");
byte[] content = FOPHelper.createPDF(uis, resource);
response.setHeader("Content-Disposition",
"attachment; filename=user-" + user.getUsername() + ".pdf");
At line 566 changed 1 line.
At line 570 changed 3 lines.
if (out!=null) {
out.close();
}
if (out!=null) {
out.close();
}
At line 576 removed 1 line.
At line 616 removed 3 lines.
#
At line 647 added 2 lines.
At line 664 changed 1 line.
Also inside the package-web target add this line:
Also inside the package-web target add this block:
At line 667 changed 1 line.
<include name="**/*.xsl"/>
<fileset dir="src/service">
<include name="**/*.xsl"/>
</fileset>
At line 676 removed 1 line.
<include name="**/*.xsl"/>
At line 670 added 3 lines.
<fileset dir="src/service">
<include name="**/*.xsl"/>
</fileset>
At line 680 removed 1 line.
which ensures the xsl file is deployed.
At line 676 added 2 lines.
which ensures the xsl file is deployed into our runtime classpath.
At line 686 removed 2 lines.
*src/web/org/appfuse/webapp/fop/user2fo.xsl
*src/web/org/appfuse/webapp/action/FopServlet.java
At line 683 added 3 lines.
*src/web/org/appfuse/webapp/action/FOPServlet.java
*src/service/org/appfuse/fop/xsl/user2fo.xsl
At line 688 added 4 lines.
*src/service/org/appfuse/fop/FOPSource.java
*src/service/org/appfuse/fop/FOPHelper.java
*src/service/org/appfuse/fop/AbstractObjectReader.java
*src/service/org/appfuse/fop/EasyGenerationContentHandlerProxy.java
At line 692 removed 3 lines.
*src/service/org/appfuse/util/AbstractObjectReader.java
*src/service/org/appfuse/util/EasyGenerationContentHandlerProxy.java
At line 700 changed 2 lines.
*Ensure the xsl file is within your webapps/appfuse/WEB-INF/classes/** runtime directory somewhere
*Ensure the path to load the user2fo.xsl file, specified in FopServlet, is correct (in case you moved it)
*Ensure the xsl file is within your webapps/appfuse/WEB-INF/classes/** runtime directory
*Ensure the path to load the user2fo.xsl file, specified in FOPServlet, is correct (in case you moved it)

Back to POJOToPDF, or to the Page History.