Seam PDF byte data Problems
charles.salasoberlin.gmail.com Apr 25, 2010 4:11 PMHi Everyone,
I am going through a very grave problem. One of the requirements of my project states that upon successful registration of a new user, 5 different pdfs have to be generated (associated with the just-registered user) and saved in a database table. Right now in my code, upon successful persisting of the user entity, I raise an asynchronous seam event to perform the generation of the pdfs. Of course I supply the id of the newly persisted user instance to the asynchronous call to ensure that the generated pdfs are appropriately associated to that user. I have followed all the instructions outlined on this page, http://seamframework.org/Community/PDFdocumentStore , yet I get a NullPointerException in the getBytes method. My code is listed below:
@Name("createFreeBusinessCards") public class CreateFreeBusinessCards implements Serializable { @Logger private Log log; @In(create=true) Renderer renderer; @In(create=true) BusinessCodeGenerator businessCodeGenerator; @In(create=true) IBusinessCardDAO businessCardDAO; @In(create=true) IUserDAO userDAO; private static final int COUNT = 5; private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Create public void init(){ log.info( "Bean Initialized" ); } @Observer(Constants.CREATE_FREE_BUSINESS_CARDS_EVENT) public void onNewUserCreated( Long userId ){ setUser( userDAO.findById( userId ) ); BusinessCard card; try { for( int i = 0; i < COUNT; i++ ){ card = new BusinessCard(); card.setCreated( new Date() ); card.setOwner( user ); card.setCode( businessCodeGenerator.generateCode() ); card.setContent( createPDFData( ) ); businessCardDAO.persist( card ); } log.info( "business cards were successfully generated and associated with the user's account"); } catch (Exception e) { log.error( "There was an error generating the business cards [Error Message: "+e.getMessage()+"]" ); e.printStackTrace(); } } private byte[] createPDFData( ){ EmptyFacesContext emptyFacesContext = new EmptyFacesContext(); log.info("value of emptyfaces context = "+ emptyFacesContext); byte[] bytes = null; try { Renderer render = Renderer.instance(); log.info("Generating final pdf from #0", "/ui/pdf/cards.xhtml"); render.render( "/ui/pdf/cards.xhtml" ); DocumentStore doc = DocumentStore.instance(); if (doc != null) { DocumentData data = doc.getDocumentData("1"); ByteArrayDocumentData byteData = null; if (data instanceof ByteArrayDocumentData) { byteData = (ByteArrayDocumentData) data; } else { throw new IllegalArgumentException("Couldnt get the bytes from the pdf document, unkown class " + data.getClass().getName()); } bytes = byteData.getData(); } } catch (Exception ex) { log.error("Error when trying to get the content of the pdf in bytes with the message #0", ex.getMessage()); ex.printStackTrace(); } finally { emptyFacesContext.restore(); } return bytes; } } 16:06:15,373 ERROR [STDERR] java.lang.IllegalArgumentException: URI scheme is not "file" 16:06:15,373 ERROR [STDERR] at java.io.File.<init>(Unknown Source) 16:06:15,373 ERROR [STDERR] at org.jboss.seam.mock.MockServletContext.<init>(MockServletContext.java:59) 16:06:15,373 ERROR [STDERR] at org.jboss.seam.mock.MockExternalContext.<init>(MockExternalContext.java:50) 16:06:15,373 ERROR [STDERR] at com.pickupphoto.web.util.EmptyFacesContext.<init>(EmptyFacesContext.java:13) 16:06:15,373 ERROR [STDERR] at com.pickupphoto.web.handlers.CreateFreeBusinessCards.createPDFData(CreateFreeBusinessCards.java:95) 16:06:15,374 ERROR [STDERR] at com.pickupphoto.web.handlers.CreateFreeBusinessCards.onNewUserCreated(CreateFreeBusinessCards.java:79) 16:06:15,374 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 16:06:15,374 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 16:06:15,374 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 16:06:15,374 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source) 16:06:15,374 ERROR [STDERR] at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) 16:06:15,374 ERROR [STDERR] at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:32) 16:06:15,374 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:56) 16:06:15,374 ERROR [STDERR] at org.jboss.seam.transaction.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:28) 16:06:15,374 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) 16:06:15,374 ERROR [STDERR] at org.jboss.seam.core.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:77) 16:06:15,374 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) 16:06:15,374 ERROR [STDERR] at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44) 16:06:15,374 ERROR [STDERR] at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) 16:06:15,375 ERROR [STDERR] at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107) 16:06:15,375 ERROR [STDERR] at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185) 16:06:15,375 ERROR [STDERR] at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103) 16:06:15,375 ERROR [STDERR] at com.charles.web.handlers.CreateFreeBusinessCards_$$_javassist_seam_13.onNewUserCreated(CreateFreeBusinessCards_$$_javassist_seam_13.java) 16:06:15,375 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 16:06:15,375 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 16:06:15,375 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 16:06:15,375 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source) 16:06:15,375 ERROR [STDERR] at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) 16:06:15,375 ERROR [STDERR] at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144) 16:06:15,375 ERROR [STDERR] at org.jboss.seam.Component.callComponentMethod(Component.java:2253) 16:06:15,375 ERROR [STDERR] at org.jboss.seam.core.Events.raiseEvent(Events.java:85) 16:06:15,375 ERROR [STDERR] at org.jboss.seam.async.AsynchronousEvent$1.process(AsynchronousEvent.java:33) 16:06:15,375 ERROR [STDERR] at org.jboss.seam.async.Asynchronous$ContextualAsynchronousRequest.run(Asynchronous.java:80) 16:06:15,376 ERROR [STDERR] at org.jboss.seam.async.AsynchronousEvent.execute(AsynchronousEvent.java:27) 16:06:15,376 ERROR [STDERR] at org.jboss.seam.async.ThreadPoolDispatcher$RunnableAsynchronous.run(ThreadPoolDispatcher.java:142) 16:06:15,376 ERROR [STDERR] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 16:06:15,376 ERROR [STDERR] at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 16:06:15,376 ERROR [STDERR] at java.util.concurrent.FutureTask.run(Unknown Source) 16:06:15,376 ERROR [STDERR] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source) 16:06:15,376 ERROR [STDERR] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) 16:06:15,376 ERROR [STDERR] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 16:06:15,376 ERROR [STDERR] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 16:06:15,376 ERROR [STDERR] at java.lang.Thread.run(Unknown Source)
I am using JBOSS 5.1, Seam 2.2 and Richfaces 3.3.3 Final. Thanks a lot for your help.
Sincerely
Charles.