来自 sun.awt.FontConfiguration.getVersion 的 NPE 在 Linux 系统上使用 Apache FOP JDK 11
NPE from sun.awt.FontConfiguration.getVersion using Apache FOP JDK 11 on Linux system
我正在使用 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)
我的字体是 Google/RedHat 的 LiberationSans,我已经将它们放在文件系统中并配置在一个名为 LiberationSans.xconf 的文件中。我已确保这些文件是全局可读访问的 (775) 并且归 运行 JBoss 实例的用户所有。
<?xml version="1.0"?>
<!-- LiberationSans -->
<fop version="1.0">
<renderers>
<renderer mime="application/pdf">
<fonts>
<font embed-url="/apps/fonts/LiberationSans-Regular.ttf" embedding-mode="subset">
<font-triplet name="LiberationSans" style="normal" weight="normal"/>
</font>
<font embed-url="/apps/fonts/LiberationSans-Bold.ttf" embedding-mode="subset">
<font-triplet name="LiberationSans" style="normal" weight="bold"/>
</font>
</fonts>
</renderer>
<renderer mime="image/png">
<fonts>
<font embed-url="/apps/fonts/LiberationSans-Regular.ttf" embedding-mode="subset">
<font-triplet name="LiberationSans" style="normal" weight="normal"/>
</font>
<font embed-url="/apps/fonts/LiberationSans-Bold.ttf" kerning="yes" embedding-mode="subset">
<font-triplet name="LiberationSans" style="normal" weight="bold"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>
在我的本地 windows 机器上一切正常,但我的部署是通过 Eclipse/JBoss 插件进行的,因此可能存在一些问题。 Linux 服务器上的部署是通过 jboss-cli.
如果我可以提供任何其他可能有帮助的内容,请告诉我。如果我们必须从 FOP 迁移,我希望这是最后的手段。
原来问题不是我无法访问字体,Linux OS 要求我通过 yum 安装 fontconfig。
yum install fontconfig
我不确定为什么 Oracle JDK 11 加上缺少的 Linux 实用程序是问题,因为它现在可以在我的生产环境中使用 Oracle JDK 1.8 并且没有安装 fontconfig .
我正在使用 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)
我的字体是 Google/RedHat 的 LiberationSans,我已经将它们放在文件系统中并配置在一个名为 LiberationSans.xconf 的文件中。我已确保这些文件是全局可读访问的 (775) 并且归 运行 JBoss 实例的用户所有。
<?xml version="1.0"?>
<!-- LiberationSans -->
<fop version="1.0">
<renderers>
<renderer mime="application/pdf">
<fonts>
<font embed-url="/apps/fonts/LiberationSans-Regular.ttf" embedding-mode="subset">
<font-triplet name="LiberationSans" style="normal" weight="normal"/>
</font>
<font embed-url="/apps/fonts/LiberationSans-Bold.ttf" embedding-mode="subset">
<font-triplet name="LiberationSans" style="normal" weight="bold"/>
</font>
</fonts>
</renderer>
<renderer mime="image/png">
<fonts>
<font embed-url="/apps/fonts/LiberationSans-Regular.ttf" embedding-mode="subset">
<font-triplet name="LiberationSans" style="normal" weight="normal"/>
</font>
<font embed-url="/apps/fonts/LiberationSans-Bold.ttf" kerning="yes" embedding-mode="subset">
<font-triplet name="LiberationSans" style="normal" weight="bold"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>
在我的本地 windows 机器上一切正常,但我的部署是通过 Eclipse/JBoss 插件进行的,因此可能存在一些问题。 Linux 服务器上的部署是通过 jboss-cli.
如果我可以提供任何其他可能有帮助的内容,请告诉我。如果我们必须从 FOP 迁移,我希望这是最后的手段。
原来问题不是我无法访问字体,Linux OS 要求我通过 yum 安装 fontconfig。
yum install fontconfig
我不确定为什么 Oracle JDK 11 加上缺少的 Linux 实用程序是问题,因为它现在可以在我的生产环境中使用 Oracle JDK 1.8 并且没有安装 fontconfig .