gpc / rendering

Provides rendering of GSPs as PDFs, JPEGs, GIFs and PNGs
http://gpc.github.com/rendering
Apache License 2.0
31 stars 45 forks source link

Plugin not working Grails 2.2.3 - Error java.io.IOException: Stream closed #11

Open polaskj opened 11 years ago

polaskj commented 11 years ago

After upgrading my project from 2.1.2 to 2.2.3 (cleaning and retesting old functionality) plugin is throwing IOException but eventually renders pdf

[ controller logic @ end of action ] def args = [template:"pdf", model:[myDomainInstance:myDomainInstance]] pdfRenderingService.render(args+[controller:this],response)

[ Stacktrace ]

| Error java.io.IOException: Stream closed | Error at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:151) | Error at java.io.BufferedInputStream.read1(BufferedInputStream.java:273) | Error at java.io.BufferedInputStream.read(BufferedInputStream.java:334) | Error at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283) | Error at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325) | Error at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177) | Error at java.io.InputStreamReader.read(InputStreamReader.java:184) | Error at org.xhtmlrenderer.css.parser.Lexer.zzRefill(Lexer.java:1634) | Error at org.xhtmlrenderer.css.parser.Lexer.yylex(Lexer.java:1865) | Error at org.xhtmlrenderer.css.parser.CSSParser.next(CSSParser.java:1798) | Error at org.xhtmlrenderer.css.parser.CSSParser.la(CSSParser.java:1810) | Error at org.xhtmlrenderer.css.parser.CSSParser.stylesheet(CSSParser.java:159) | Error at org.xhtmlrenderer.css.parser.CSSParser.parseStylesheet(CSSParser.java:89) | Error at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:78) | Error at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:95) | Error at org.xhtmlrenderer.context.StylesheetFactoryImpl.getStylesheet(StylesheetFactoryImpl.java:174) | Error at org.xhtmlrenderer.context.StyleReference.readAndParseAll(StyleReference.java:123) | Error at org.xhtmlrenderer.context.StyleReference.setDocumentContext(StyleReference.java:107) | Error at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:175) | Error at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:142) | Error at org.xhtmlrenderer.pdf.ITextRenderer$setDocument.call(Unknown Source) | Error at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) | Error at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) | Error at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120) | Error at grails.plugin.rendering.pdf.PdfRenderingService.doRender(PdfRenderingService.groovy:36) | Error at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | Error at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) | Error at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | Error at java.lang.reflect.Method.invoke(Method.java:601) | Error at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1259) | Error at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:272) | Error at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:52) | Error at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49) | Error at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) | Error at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) | Error at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:43) | Error at grails.plugin.rendering.pdf.PdfRenderingService.render(PdfRenderingService.groovy) | Error at grails.plugin.rendering.RenderingService$render$1.callCurrent(Unknown Source) | Error at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49) | Error at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) | Error at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) | Error at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:37) | Error at grails.plugin.rendering.pdf.PdfRenderingService.render(PdfRenderingService.groovy) | Error at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:35) | Error at grails.plugin.rendering.pdf.PdfRenderingService.render(PdfRenderingService.groovy) | Error at grails.plugin.rendering.RenderingService$render$0.callCurrent(Unknown Source) | Error at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:49) | Error at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) | Error at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) | Error at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:65) | Error at grails.plugin.rendering.pdf.PdfRenderingService.render(PdfRenderingService.groovy) | Error at grails.plugin.rendering.RenderingService$render.call(Unknown Source) | Error at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) | Error at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) | Error at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120) | Error at edu.harvard.hums.BatchListController.print(BatchListController.groovy:237) | Error at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | Error at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) | Error at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | Error at java.lang.reflect.Method.invoke(Method.java:601) | Error at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1259) | Error at org.codehaus.groovy.grails.web.servlet.mvc.MixedGrailsControllerHelper.invoke(MixedGrailsControllerHelper.java:69) | Error at grails.plugin.cache.web.ProxyAwareMixedGrailsControllerHelper.invoke(ProxyAwareMixedGrailsControllerHelper.java) | Error at org.codehaus.groovy.grails.web.servlet.mvc.AbstractGrailsControllerHelper.handleAction(AbstractGrailsControllerHelper.java:343) | Error at grails.plugin.cache.web.ProxyAwareMixedGrailsControllerHelper.handleAction(ProxyAwareMixedGrailsControllerHelper.java) | Error at org.codehaus.groovy.grails.web.servlet.mvc.AbstractGrailsControllerHelper.executeAction(AbstractGrailsControllerHelper.java:226) | Error at grails.plugin.cache.web.ProxyAwareMixedGrailsControllerHelper.executeAction(ProxyAwareMixedGrailsControllerHelper.java) | Error at org.codehaus.groovy.grails.web.servlet.mvc.AbstractGrailsControllerHelper.handleURI(AbstractGrailsControllerHelper.java:192) | Error at grails.plugin.cache.web.ProxyAwareMixedGrailsControllerHelper.handleURI(ProxyAwareMixedGrailsControllerHelper.java) | Error at org.codehaus.groovy.grails.web.servlet.mvc.AbstractGrailsControllerHelper.handleURI(AbstractGrailsControllerHelper.java:116) | Error at grails.plugin.cache.web.ProxyAwareMixedGrailsControllerHelper.handleURI(ProxyAwareMixedGrailsControllerHelper.java) | Error at org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController.handleRequest(SimpleGrailsController.java:72) | Error at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) | Error at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(GrailsDispatcherServlet.java:328) | Error at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) | Error at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) | Error at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) | Error at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) | Error at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195) | Error at grails.plugin.cache.web.filter.simple.MemoryPageFragmentCachingFilter.doFilter(MemoryPageFragmentCachingFilter.java) | Error at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63) | Error at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) | Error at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:70) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749) | Error at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487) | Error at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412) | Error at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339) | Error at org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingInfo(WebUtils.java:314) | Error at org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingInfo(WebUtils.java:279) | Error at org.codehaus.groovy.grails.web.util.WebUtils.forwardRequestForUrlMappingInfo(WebUtils.java:270) | Error at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterInternal(UrlMappingsFilter.java:222) | Error at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.obtainContent(GrailsPageFilter.java:206) | Error at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsPageFilter.java:152) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at javax.servlet.FilterChain$doFilter.call(Unknown Source) | Error at org.grails.plugin.resource.DevModeSanityFilter.doFilter(DevModeSanityFilter.groovy:44) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369) | Error at org.springframework.security.web.authentication.switchuser.SwitchUserFilter.doFilter(SwitchUserFilter.java:178) | Error at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) | Error at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) | Error at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) | Error at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) | Error at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) | Error at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) | Error at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) | Error at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) | Error at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:119) | Error at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) | Error at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) | Error at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) | Error at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) | Error at org.codehaus.groovy.grails.plugins.springsecurity.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:40) | Error at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) | Error at org.codehaus.groovy.grails.plugins.springsecurity.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:79) | Error at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) | Error at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) | Error at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) | Error at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168) | Error at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) | Error at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:69) | Error at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:66) | Error at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) | Error at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) | Error at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) | Error at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) | Error at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) | Error at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) | Error at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) | Error at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) | Error at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) | Error at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) | Error at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) | Error at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) | Error at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009) | Error at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) | Error at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) | Error at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) | Error at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) | Error at java.lang.Thread.run(Thread.java:722)

bavicj commented 11 years ago

having the same problem with grails 2.2.3

polaskj commented 11 years ago

Hi bavicj,

I ended up getting the issue resolved after a few hours of hacking it. I cant remember exactly what the problem was but here is a snippet of what i ended up with. Maybe this will be of some help to you. (grails 2.2.3)

.... ACTION: def args = [template:"/batchList/pdf", model:[batchListInstance:batchListInstance]] pdfRenderingService.render(args,response)

GSP: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

....
PaulWaldo commented 9 years ago

@polaskj, I am currently experiencing the same problem. I'm running grails 2.4.4. My research to date shows that Stream Closed is due to unreadable files embedded in the HTML.

My HTML has this in it <link rel="stylesheet" href="/Invoicer/assets/bootstrap.css?compile=false" /> and gives me the Stream Closed problem. When I remove the line, all renders fine. My working hypothesis is that somehow Spring Security is preventing the rendering plugin from accessing the file.

KerchumA222 commented 8 years ago

I am having the same issue using Grails 3.1.0.RC1 and rendering:2.0.0-SNAPSHOT. Also using bootstrap. When the Bootstrap reference is removed it no longer throws the exception. Even with the exception being thrown the PDF still renders but contains no styles (all are contained in the same css file by asset-pipeline).

EDIT: When using a CDN for the Bootstrap files I get past this exception and to the "TableBox" issue. That leads me to believe its a compatibility issue with asset-pipeline or spring-security. My security config allows everyone access to assets, so it is configured correctly.

msaccone commented 8 years ago

Hi all, take a look to the workaround described #33 , it might be fine for your needs