加载可用字体时,Jasper退出PDF并出现错误

时间:2018-08-06 06:52:30

标签: jasper-reports netweaver

在我本地的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或border这样的旧属性)
  • 如果删除了字体,本地实例将因不同的错误而崩溃(通常是“字体对JVM不可用”)

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

1 个答案:

答案 0 :(得分:0)

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

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

肯定是问题在西北。

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

此解析器随项目中使用的Oracle JVM一起提供,因此我们无需添加其他库,实际上是基于JavaDocs的默认解析器。

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