Issue Details (XML | Word | Printable)

Key: CONF-9659
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Major Major
Assignee: Paul Curren [Atlassian]
Reporter: Paul Curren [Atlassian]
Votes: 2
Watchers: 3
Operations

If you were logged in you would be able to see more operations.
Confluence

PDF space export failing in Resin 3.x due to incorrect handling of HttpServletRequest

Created: 08/Oct/07 12:03 AM   Updated: 02/Sep/08 05:27 AM
Component/s: Export Page / Space, PDF Generation
Affects Version/s: 2.6-dr1, 2.6.0
Fix Version/s: 2.6.2

Time Tracking:
Not Specified

Environment: CAC
Issue Links:
Blocker
 
Cause
 
Reference

Participants: Gum Shoes, Ivan Benko [Atlassian], Matt Ryall [Atlassian], Paul Curren [Atlassian] and Rosie Jameson [Atlassian]
Since last comment: 44 weeks, 3 days ago
Internal Complexity: 5
Resolution Date: 07/Nov/07 04:37 PM
Internal Value: 8
Labels:


 Description  « Hide
This problem is raised from the support issue - https://support.atlassian.com/browse/CSP-11863

The initial problem was a failure during PDF export which looked like -

2007-10-03 21:26:09,006 ERROR [Export Space task] [core.task.longrunning.AbstractLongRunningTask] doInTransactionWithoutResult 
Error during export
 -- url: /spaces/doexportspace.action | userName: pcurren | action: doexportspace
com.atlassian.confluence.importexport.ImportExportException: java.lang.NullPointerException
        at com.atlassian.confluence.importexport.impl.PdfExporter.generateXslFo(PdfExporter.java:178)
        at com.atlassian.confluence.importexport.impl.PdfExporter.doExportEntity(PdfExporter.java:97)
        at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.exportSpace(AbstractRendererExporterImpl.java:127)
        at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.doExport(AbstractRendererExporterImpl.java:109)
        at com.atlassian.confluence.importexport.impl.PdfExporter.doExport(PdfExporter.java:63)
        at com.atlassian.confluence.importexport.DefaultImportExportManager.exportAs(DefaultImportExportManager.java:112)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
        at $Proxy49.exportAs(Unknown Source)
        at com.atlassian.confluence.importexport.actions.ExportSpaceLongRunningTask$2.doInTransactionWithoutResult(ExportSpaceLongRunningTask.java:8
5)
        at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:114)
        at com.atlassian.confluence.importexport.actions.ExportSpaceLongRunningTask.runInternal(ExportSpaceLongRunningTask.java:61)
        at com.atlassian.confluence.util.longrunning.ConfluenceAbstractLongRunningTask.run(ConfluenceAbstractLongRunningTask.java:21)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
        at com.caucho.server.connection.AbstractHttpRequest.getContextPath(AbstractHttpRequest.java:506)
        at javax.servlet.http.HttpServletRequestWrapper.getContextPath(HttpServletRequestWrapper.java:108)
        at javax.servlet.http.HttpServletRequestWrapper.getContextPath(HttpServletRequestWrapper.java:108)
        at javax.servlet.http.HttpServletRequestWrapper.getContextPath(HttpServletRequestWrapper.java:108)
        at javax.servlet.http.HttpServletRequestWrapper.getContextPath(HttpServletRequestWrapper.java:108)
        at javax.servlet.http.HttpServletRequestWrapper.getContextPath(HttpServletRequestWrapper.java:108)
        at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:403)
        at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350)
        at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.exportResource(AbstractRendererExporterImpl.java:208)
        at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.exportImages(AbstractRendererExporterImpl.java:151)
        at com.atlassian.confluence.importexport.impl.PdfExporter.generateXslFo(PdfExporter.java:174)
        ... 22 more

This is due to the HttpServletRequest instance being stored within the ThreadLocal and accessed by the LongRunningTask thread as it performed the export. When resin returns the HttpServletRequest to the pool some internal details are nulled (such as the context).

This was worked around by wrapping the request in a compatible class which takes a copy of the necessary data.

The ServletContextHoldingRequest also needed to be modified. It was returning an HttpSession instance anonymous class which resin was later trying to cast to it's own SessionImpl class. (ServletContextHoldingRequest was modified to hold the HttpSession instance from the real request.)

Once this was all hacked around, a new problem was being exposed -

2007-10-08 13:26:57,004 ERROR [Export Space task] [core.task.longrunning.AbstractLongRunningTask] doInTransactionWithoutResult Error during export
 -- url: /spaces/doexportspace.action | userName: pcurren | action: doexportspace
com.atlassian.confluence.importexport.ImportExportException: Error while generating PDF!
        at com.atlassian.confluence.importexport.impl.PdfExporter.foToPdf(PdfExporter.java:137)
        at com.atlassian.confluence.importexport.impl.PdfExporter.doExportEntity(PdfExporter.java:98)
        at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.exportSpace(AbstractRendererExporterImpl.java:127)
        at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.doExport(AbstractRendererExporterImpl.java:109)
        at com.atlassian.confluence.importexport.impl.PdfExporter.doExport(PdfExporter.java:63)
        at com.atlassian.confluence.importexport.DefaultImportExportManager.exportAs(DefaultImportExportManager.java:112)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
        at $Proxy49.exportAs(Unknown Source)
        at com.atlassian.confluence.importexport.actions.ExportSpaceLongRunningTask$2.doInTransactionWithoutResult(ExportSpaceLongRunningTask.java:87)
        at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:114)
        at com.atlassian.confluence.importexport.actions.ExportSpaceLongRunningTask.runInternal(ExportSpaceLongRunningTask.java:63)
        at com.atlassian.confluence.util.longrunning.ConfluenceAbstractLongRunningTask.run(ConfluenceAbstractLongRunningTask.java:21)
        at java.lang.Thread.run(Thread.java:613)
Caused by: javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: file:///Users/pcurren/Atlassian/data/confluence/cac/temp/export_10082007_131342/CONF256-20071008-13_13_42.fo:16961:0: Error(16961/0): fo:list-block is missing child elements. 
Required Content Model: marker* (list-item)+
        at com.icl.saxon.IdentityTransformer.transform(IdentityTransformer.java:61)
        at com.atlassian.confluence.importexport.impl.PdfExporter.foToPdf(PdfExporter.java:132)
        ... 22 more
Caused by: org.apache.fop.fo.ValidationException: file:///Users/pcurren/Atlassian/data/confluence/cac/temp/export_10082007_131342/CONF256-20071008-13_13_42.fo:16961:0: Error(16961/0): fo:list-block is missing child elements. 
Required Content Model: marker* (list-item)+
        at org.apache.fop.fo.FONode.missingChildElementError(FONode.java:408)
        at org.apache.fop.fo.flow.ListBlock.endOfNode(ListBlock.java:105)
        at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.endElement(FOTreeBuilder.java:379)
        at org.apache.fop.fo.FOTreeBuilder.endElement(FOTreeBuilder.java:195)
        at com.caucho.xml.XmlParser.addElement(XmlParser.java:2608)
        at com.caucho.xml.XmlParser.parseElement(XmlParser.java:641)
        at com.caucho.xml.XmlParser.parseNode(XmlParser.java:367)
        at com.caucho.xml.XmlParser.parseInt(XmlParser.java:242)
        at com.caucho.xml.AbstractParser.parse(AbstractParser.java:633)
        at com.icl.saxon.IdentityTransformer.transform(IdentityTransformer.java:59)
        ... 23 more

At this point, I've decided to resolved the support request in a different way, and gift these three problems to the bug fix team



 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
Paul Curren [Atlassian] added a comment - 08/Oct/07 12:39 AM
Ignore the second stack trace.

This is an unrelated problem. The old task list macro renders task lists with no items as an empty 'ul'. This is giving the PDF conversion process trouble.



Gum Shoes added a comment - 11/Oct/07 03:02 PM
Don't know if this is the right place for this but we are having PDF problems with 2.6.0 also. Simple pages can be exported but as soon as you try to an image, such as:
!image:silkicons^sport_soccer.png!

This happens:

 Cause:
com.atlassian.confluence.importexport.ImportExportException: java.lang.NullPointerException
 at com.atlassian.confluence.importexport.impl.PdfExporter.generateXslFo(PdfExporter.java:178)
caused by: java.lang.NullPointerException
 at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:657)

Stack Trace: [hide]

com.atlassian.confluence.importexport.ImportExportException: java.lang.NullPointerException
	at com.atlassian.confluence.importexport.impl.PdfExporter.generateXslFo(PdfExporter.java:178)
	at com.atlassian.confluence.importexport.impl.PdfExporter.doExportEntity(PdfExporter.java:97)
	at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.exportPage(AbstractRendererExporterImpl.java:137)
	at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.doExport(AbstractRendererExporterImpl.java:105)
	at com.atlassian.confluence.importexport.impl.PdfExporter.doExport(PdfExporter.java:63)
	at com.atlassian.confluence.importexport.DefaultImportExportManager.exportAs(DefaultImportExportManager.java:112)
	at sun.reflect.GeneratedMethodAccessor6563.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
        ...

Matt Ryall [Atlassian] added a comment - 11/Oct/07 06:39 PM
That looks like a very similar issue, Mr Shoes.

Which application server are you using?


Gum Shoes added a comment - 12/Oct/07 03:58 PM
Apache Tomcat/6.0.13, java 1.6.0_02-b05

Paul Curren [Atlassian] added a comment - 06/Nov/07 10:06 PM - edited
CONF-9896 discusses a proper redesign of space export to fix this issue.

Note: the fix for this issue will not be merged to trunk. CONF-9869 will be made on trunk instead of this.


Gum Shoes added a comment - 04/Dec/07 10:22 AM
Just upgraded to 2.6.2 and I still can't PDF any page with images on it. I get exactly the same error as with 2.6.0.

Paul Curren [Atlassian] added a comment - 04/Dec/07 04:50 PM
Hi there.

I suspect this may be a different issue but to confirm, could you send the snippet of your log that follows what you showed us previously.
i.e. I need the bit that follows Caused by: java.lang.NullPointerException to find the root problem.

Thanks,


Gum Shoes added a comment - 04/Dec/07 04:57 PM
com.atlassian.confluence.importexport.ImportExportException: java.lang.NullPointerException
	at com.atlassian.confluence.importexport.impl.PdfExporter.generateXslFo(PdfExporter.java:178)
	at com.atlassian.confluence.importexport.impl.PdfExporter.doExportEntity(PdfExporter.java:97)
	at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.exportPage(AbstractRendererExporterImpl.java:137)
	at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.doExport(AbstractRendererExporterImpl.java:105)
	at com.atlassian.confluence.importexport.impl.PdfExporter.doExport(PdfExporter.java:63)
	at com.atlassian.confluence.importexport.DefaultImportExportManager.exportAs(DefaultImportExportManager.java:112)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
	at $Proxy49.exportAs(Unknown Source)
	at com.atlassian.confluence.importexport.actions.ExportPageAction.execute(ExportPageAction.java:111)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:168)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.intercept(DefaultWorkflowInterceptor.java:55)
	at com.atlassian.confluence.core.ConfluenceWorkflowInterceptor.intercept(ConfluenceWorkflowInterceptor.java:39)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.atlassian.confluence.core.ConfluenceValidationInterceptor.intercept(ConfluenceValidationInterceptor.java:16)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.util.LoggingContextInterceptor.intercept(LoggingContextInterceptor.java:48)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.security.actions.PermissionCheckInterceptor.intercept(PermissionCheckInterceptor.java:47)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.pages.actions.PageAwareInterceptor.intercept(PageAwareInterceptor.java:114)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.spaces.actions.SpaceAwareInterceptor.intercept(SpaceAwareInterceptor.java:67)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.core.actions.LastModifiedInterceptor.intercept(LastModifiedInterceptor.java:39)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.core.ConfluenceAutowireInterceptor.intercept(ConfluenceAutowireInterceptor.java:25)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.xwork.interceptors.XWorkTransactionInterceptor.intercept(XWorkTransactionInterceptor.java:98)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:115)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:229)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:199)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
	at com.atlassian.confluence.util.profiling.ProfilingPageFilter.parsePage(ProfilingPageFilter.java:124)
	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:54)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.atlassian.core.filters.ServletContextThreadLocalFilter.doFilter(ServletContextThreadLocalFilter.java:21)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.atlassian.confluence.util.LoggingContextFilter.doFilter(LoggingContextFilter.java:46)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.atlassian.confluence.util.UserThreadLocalFilter.doFilter(UserThreadLocalFilter.java:44)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:192)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:110)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.atlassian.confluence.util.ClusterHeaderFilter.doFilter(ClusterHeaderFilter.java:35)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.atlassian.johnson.filters.JohnsonFilter.doFilter(JohnsonFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
	at com.atlassian.spring.filter.FlushingSpringSessionInViewFilter.doFilterInternal(FlushingSpringSessionInViewFilter.java:29)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.atlassian.util.profiling.filters.ProfilingFilter.doFilter(ProfilingFilter.java:140)
	at com.atlassian.core.filters.ProfilingAndErrorFilter.doFilter(ProfilingAndErrorFilter.java:27)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.atlassian.confluence.util.RequestCacheThreadLocalFilter.doFilter(RequestCacheThreadLocalFilter.java:25)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.atlassian.core.filters.gzip.GzipFilter.doFilter(GzipFilter.java:61)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.atlassian.core.filters.AbstractEncodingFilter.doFilter(AbstractEncodingFilter.java:37)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
	at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:657)
	at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:325)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557)
	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481)
	at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.exportResource(AbstractRendererExporterImpl.java:209)
	at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.exportImages(AbstractRendererExporterImpl.java:151)
	at com.atlassian.confluence.importexport.impl.PdfExporter.generateXslFo(PdfExporter.java:174)
	... 110 more

Paul Curren [Atlassian] added a comment - 04/Dec/07 06:09 PM
OK thanks.

This is a different issue that isn't fixed by this fix I'm afraid. However, it's from the same root cause. That is, attempting to do work with classes belonging to Tomcat out-with the HTTP request thread.

There is a work around you can try which is to disable long running tasks so that the export all happens during the request. This can sometimes time out depending on how big your export and your server configuration.

So, find your WEB-INF/web.xml, and add tomcat to the unsupportedContainersForExportLongRunningTask parameter e.g.

    <context-param>
        <param-name>unsupportedContainersForExportLongRunningTask</param-name>
        <param-value>websphere,jboss,tomcat</param-value>
    </context-param>

I hope that helps. There's not much more we can about fixing the problem in 2.6 - it was a bad implementation. We have redesigned this functionality in 2.7 which will be released in the next couple of weeks.


Gum Shoes added a comment - 05/Dec/07 11:10 AM
Sadly that does not work either; I shall wait for 2.7.