2

在我本地的 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 不可用”)

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

4

1 回答 1

0

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

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

绝对是西北方面的问题。

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

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

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

于 2018-08-19T09:41:40.180 回答