【问题标题】:Jasper quits PDF generation with Error while loading available fontsJasper 在加载可用字体时退出 PDF 生成并出现错误
【发布时间】:2018-08-06 06:52:30
【问题描述】:

在我的本地 jBoss 机器上,生成 PDF 工作正常。但是,当我尝试发布(到目前为止似乎如此)时,NetWeaver 上的任何内容基本上都部署了相同的应用程序代码,生成崩溃并出现此错误:

08-06-18:00:46:45 [HTTP Worker [@802492534]] ERROR [JRStyledTextParser:paveljanicek] Error while loading available fonts
net.sf.jasperreports.engine.JRRuntimeException: javax.xml.parsers.ParserConfigurationException
    at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.<init>(SimpleFontExtensionHelper.java:156)
    at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.getInstance(SimpleFontExtensionHelper.java:131)
    at net.sf.jasperreports.engine.fonts.FontExtensionsRegistry.ensureFontExtensions(FontExtensionsRegistry.java:80)
    at net.sf.jasperreports.engine.fonts.FontExtensionsRegistry.getExtensions(FontExtensionsRegistry.java:57)
    at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getExtensions(DefaultExtensionsRegistry.java:130)
    at net.sf.jasperreports.engine.util.JRStyledTextParser.<clinit>(JRStyledTextParser.java:86)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:111)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:69)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:57)
    at net.sf.jasperreports.engine.fill.JRFiller.createBandReportFiller(JRFiller.java:219)
    at net.sf.jasperreports.engine.fill.JRFiller.createReportFiller(JRFiller.java:234)
    at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:134)

最糟糕的是,我想不出如何重现这个错误。这是我已经在目标机器上检查过的:

  • 字体已安装并可供应用访问
  • jasper 报告可以访问 jasperreports-fonts.jar

在我的本地机器上:

  • PDF 生成时会出现警告(我使用的是 issplitAllowed 或边框等旧属性)
  • 如果字体被删除,本地实例崩溃并出现不同的错误(主要是“字体对 JVM 不可用”)

有谁知道要检查什么,在哪里看?

【问题讨论】:

  • 该错误可能是由于 NetWeaver 环境中使用的 SAX 解析器不知道 apache.org/xml/features/disallow-doctype-decl 功能(由 JasperReports 设置)引起的。我对 NetWeaver 一无所知,但请尝试在您的应用程序中包含一个 Xerces (2) jar。
  • 看起来,它是由 NW 引起的。 NW内部有补丁,所以我们将尝试在晚上升级目标机器。会让你知道结果

标签: jasper-reports netweaver


【解决方案1】:

NW 使用默认的 XML 解析器,它不支持设置安全功能“http://apache.org/xml/features/disallow-doctype-decl”。此功能由 Jasper 样式表解析器从 6.4.2 版本开始设置

快速的解决方案是使用不同的 XML 解析器,通过在 NW 属性中将系统属性“javax.xml.parsers.DocumentBuilderFactory”设置为适当的 XML 解析器来支持上述功能。

问题肯定在 NW 方面。

但是,我确实找到了一个在设置 XML 功能时更宽容的 Oracle 等效 XML 解析器(仍然基于 Xerces):com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

这个解析器是项目中使用的Oracle JVM自带的,所以我们不需要添加额外的库,实际上是基于JavaDocs的默认解析器。

Netweaver JVM 决定使用 oracle.xml.jaxp.JXDocumentBuilderFactory 作为默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多