在 Linux 系统上使用 Apache FOP JDK 11 来自 sun.awt.FontConfiguration.getVersion 的 NPE

jav*_*eak 9 apache-fop jboss-eap-7 java-11 oraclelinux

我正在使用 Apache FOP(v 2.3 和测试 v 2.5)。我最近从 Oracle JDK 8 升级到 Oracle JDK 11。我在 Oracle Linux(RedHat 衍生版本)上使用 JBoss EAP 7.2。使用 JDK 8 时一切正常,但只是升级到 JDK 11 就导致我的 XML -> PDF 和 XML -> PNG 的 FOP XSLT 创建以下堆栈跟踪(FOP 版本并不重要,因为会产生相同的错误)。

Caused by: java.lang.NullPointerException
        at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262)
        at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225)
        at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107)
        at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:719)
Run Code Online (Sandbox Code Playgroud)

我的字体是 Google/RedHat 的 LiberationSans,我已将它们放在文件系统上并在名为 LiberationSans.xconf 的文件中进行配置。我已确保这些文件是全局可读的 (775),并且由运行 JBoss 实例的用户拥有。

Caused by: java.lang.NullPointerException
        at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262)
        at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225)
        at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107)
        at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:719)
Run Code Online (Sandbox Code Playgroud)

在我的本地 Windows 计算机上一切正常,但我的部署是通过 Eclipse/JBoss 插件进行的,因此可能存在一些问题。Linux 服务器上的部署是通过 jboss-cli 进行的。

如果我可以提供任何其他可能有帮助的信息,请告诉我。如果我们必须放弃 FOP,我希望这是最后的手段。

jav*_*eak 19

事实证明,问题并不是我无法访问字体,而是 Linux 操作系统要求我通过 yum 安装 fontconfig。

yum install fontconfig
Run Code Online (Sandbox Code Playgroud)

我不确定为什么 Oracle JDK 11 加上缺少的 Linux 实用程序会出现问题,因为它现在可以在我的生产环境中使用 Oracle JDK 1.8 并且没有安装 fontconfig。

  • 一些简约的发行版(即 Alpine)可能还需要一些字体包,例如“ttf-dejavu”。 (2认同)