Issue Details (XML | Word | Printable)

Key: GLIFFY-841
Type: Bug Bug
Status: Tested Tested
Resolution: Fixed
Priority: Critical Critical
Assignee: Shannon Krebs
Reporter: Hendrik Volkmer
Votes: 0
Watchers: 0
Operations

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

Spaces in diagram name generate error when trying to export Confluence page as PDF

Created: 25/Aug/08 04:21 AM   Updated: 13/Oct/08 01:10 PM
Component/s: None
Affects Version/s: Gliffy Plugin for Confluence - 1.4.0
Fix Version/s: Gliffy Plugin for Confluence - 1.5.0
Security Level: Anyone may view

Environment: Confluence 2.8.0, Gliffy 1.4.0


 Description  « Hide
When trying to export a Conluence page as PDF we get the following error if the diagramm name contains spaces. If it doesn't contain spaces it works perfectly well.

Cause:
com.atlassian.confluence.importexport.ImportExportException: Error while generating PDF!
at com.atlassian.confluence.importexport.impl.PdfExporter.foToPdf(PdfExporter.java:137)
caused by: javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: The entity name must immediately follow the '&' in the entity reference.
at com.icl.saxon.IdentityTransformer.transform(IdentityTransformer.java:61)
caused by: org.xml.sax.SAXParseException: The entity name must immediately follow the '&' in the entity reference.
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
Stack Trace: [hide]

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.exportPage(AbstractRendererExporterImpl.java:109)
at com.atlassian.confluence.importexport.impl.AbstractRendererExporterImpl.doExport(AbstractRendererExporterImpl.java:79)
at com.atlassian.confluence.importexport.impl.PdfExporter.doExport(PdfExporter.java:63)
at com.atlassian.confluence.importexport.DefaultImportExportManager.exportAs(DefaultImportExportManager.java:112)
at sun.reflect.GeneratedMethodAccessor4884.invoke(Unknown Source)
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:296)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:177)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy58.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:54)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
at com.atlassian.confluence.pages.actions.CommentAwareInterceptor.intercept(CommentAwareInterceptor.java:43)
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:97)
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:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
at com.atlassian.confluence.util.profiling.ProfilingPageFilter.parsePage(ProfilingPageFilter.java:141)
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:54)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.confluence.jmx.JmxFilter.doFilter(JmxFilter.java:109)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.core.filters.ServletContextThreadLocalFilter.doFilter(ServletContextThreadLocalFilter.java:21)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.confluence.util.LoggingContextFilter.doFilter(LoggingContextFilter.java:49)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.confluence.util.UserThreadLocalFilter.doFilter(UserThreadLocalFilter.java:44)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:192)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.seraph.filter.TrustedApplicationsFilter.doFilter(TrustedApplicationsFilter.java:114)
at com.atlassian.confluence.util.AbstractBootstrapHotSwappingFilter.doFilter(AbstractBootstrapHotSwappingFilter.java:28)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:110)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.confluence.util.ClusterHeaderFilter.doFilter(ClusterHeaderFilter.java:35)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:72)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170)
at com.atlassian.spring.filter.FlushingSpringSessionInViewFilter.doFilterInternal(FlushingSpringSessionInViewFilter.java:29)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.util.profiling.filters.ProfilingFilter.doFilter(ProfilingFilter.java:142)
at com.atlassian.core.filters.ProfilingAndErrorFilter.doFilter(ProfilingAndErrorFilter.java:27)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.confluence.core.datetime.RequestTimeThreadLocalFilter.doFilter(RequestTimeThreadLocalFilter.java:34)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.confluence.util.RequestCacheThreadLocalFilter.doFilter(RequestCacheThreadLocalFilter.java:25)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.gzipfilter.GzipFilter.doFilterInternal(GzipFilter.java:94)
at com.atlassian.gzipfilter.GzipFilter.doFilter(GzipFilter.java:64)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.atlassian.core.filters.AbstractEncodingFilter.doFilter(AbstractEncodingFilter.java:33)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:613)
Caused by: javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: The entity name must immediately follow the '&' in the entity reference.
at com.icl.saxon.IdentityTransformer.transform(IdentityTransformer.java:61)
at com.atlassian.confluence.importexport.impl.PdfExporter.foToPdf(PdfExporter.java:132)
... 124 more
Caused by: org.xml.sax.SAXParseException: The entity name must immediately follow the '&' in the entity reference.
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at com.icl.saxon.IdentityTransformer.transform(IdentityTransformer.java:59)
... 125 more
Referer URL: [... Some output removed ...]

Build Information:
buildNumber: 1318
upTime: 1 month, 13 days, 14 hours, 37 minutes, 39 seconds
devMode: false
version: 2.8.0
home: /var/confluence
Unique ID: 0x0000011BF927054DC0A8520AA843A462ACF7EE5508BE01ABC21D217D6DA47351

Server Information:
Application Server: Apache Tomcat/5.5.23
Servlet Version: 2.4
Database Dialect: com.atlassian.hibernate.dialect.MySQLDialect
Database Driver Name: com.mysql.jdbc.Driver
Database Driver Version: 3.1
Database Name: MySQL
Database Version: 5.0.45
Database Transaction Isolation: Repeatable read Database Latency: 1
Memory Information:
Total Memory: 1012 MB
Used Memory: 672 MB
Free Memory: 340 MB
System Information:
userName: admin
favouriteColour: Myrtle
time: 11:17:08
javaVm: Java HotSpot(TM) Server VM
operatingSystemArchitecture: i386
date: Montag, 25 Aug 2008
operatingSystem: Mac OS X 10.5.2
jvmVersion: 1.0
userTimezone: Europe/Berlin
fileSystemEncoding: MacRoman
jvmImplementationVersion: 1.5.0_13-119
appServer: Apache Tomcat
javaVendor: Apple Inc.
javaVersion: 1.5.0_13
javaRuntime: Java(TM) 2 Runtime Environment, Standard Edition
jvmVendor: Sun Microsystems Inc.
Cluster Information:
Not clustered.
Enabled Plugins:

[... Some output removed ...]

Gliffy Plugin for Confluence (com.gliffy.integration.confluence, Version: 1.4.0)

[... Some output removed ...]

Request
Information:
URL: http://localhost:9080/500page.jsp

  • Scheme: http
  • Server: localhost
  • Port: 9080
  • URI: /500page.jsp
  • - Context Path:
  • - Servlet Path: /500page.jsp
  • - Path Info:
  • - Query String: pageId=10487111&type=TYPE_PDF
    foofoo

Attributes:

  • javax.servlet.forward.request_uri : /pages/doexportpage.action
  • javax.servlet.forward.context_path :
  • javax.servlet.forward.servlet_path : /pages/doexportpage.action
  • javax.servlet.forward.path_info : /500page.jsp
  • javax.servlet.forward.query_string : pageId=10487111&type=TYPE_PDF
  • javax.servlet.error.message :
  • javax.servlet.error.exception : com.atlassian.confluence.importexport.ImportExportException: Error while generating PDF!
  • os_securityfilter_already_filtered : true
  • _sitemesh_using_stream : false
  • com.atlassian.johnson.filters.JohnsonFilter_already_filtered : true
  • javax.servlet.error.request_uri : /pages/doexportpage.action
  • com.atlassian.gzipfilter.GzipFilter_already_filtered : true
  • javax.servlet.error.status_code : 500
  • _sitemesh_filterapplied : true
  • javax.servlet.error.servlet_name : action
  • webwork.valueStack : com.opensymphony.xwork.util.OgnlValueStack@2d2afe
  • atlassian.core.seraph.original.url : /pages/doexportpage.action?pageId=10487111&type=TYPE_PDF
  • loginfilter.already.filtered : true
  • Confluence-Request-Time : 1219655828734
  • javax.servlet.jsp.jspException : com.atlassian.confluence.importexport.ImportExportException: Error while generating PDF!
  • sessioninview.FILTERED : true
    Parameters:
  • type = TYPE_PDF
  • pageId = 10487111
    Confluence User:
  • anonymous

Logging:
0 log statements generated by this request.



 All   Comments   Change History      Sort Order: Ascending order - Click to sort in descending order
Shannon Krebs added a comment - 29/Aug/08 02:24 AM
I can't seem to produce the exception you are seeing with the 1.4.0 release on confluence 2.8.

(Although while testing this error I have noticed that if you include an '&' in the diagram name it doesn't show up in the export. No exception, just a warning in the log. So its possible some other special characters may break the export as well.)

Out of curiosity, what character encoding is your confluence server setup with?


Hendrik Volkmer added a comment - 29/Aug/08 02:34 AM
We use UTF-8 encoding.

Shannon Krebs added a comment - 29/Aug/08 02:39 AM
Do your document names normally have any other special characters in them that would need to be encoded for use in xml?

Hendrik Volkmer added a comment - 29/Aug/08 02:48 AM
I just checked which diagramms cause the problem and it are indeed diagrams with Umlauts in their names. So not spaces, but Umlauts seem to be the problem - sorry for the confusion.

I just reproduced the error with diagrams using ß, ä, ü, ö in the name.

These characters shouldn't need special encoding with UTF-8 in XML, should they?


Shannon Krebs added a comment - 29/Aug/08 02:52 AM
no I think your right, it is probably the url to the exported image causing the problem. Atleast now I think I know where to look...

Shannon Krebs added a comment - 05/Sep/08 09:21 PM
The attachment names are now url encoded before being sent to the export writer.