Struts2-jasperreports-plugin 无法与较新版本的 japserreports 一起使用

Struts2-jasperreports-plugin not functioning with newer version of japserreports

我正在使用 struts 2.3.4.1 并使用 struts2-jasperreports-plugin 来显示预编译的报告。字体一直给我带来问题,我发现这些问题应该已在 Jasperreports 6 中修复(特别是 Calibri 的问题)。因为我使用的是遗留系统 运行 java 6,所以我可以使用的最后一个版本是 6.2.2。但是当我尝试显示我的报告时,我得到 java.lang.NoSuchMethodError: net.sf.jasperreports.engine.util.JRLoader.loadObject(Ljava/lang/String;)Ljava/lang/Object; org.apache.struts2.views.jasperreports.JasperReportsResult.doExecute(JasperReportsResult.java:323),这似乎是由 struts2-jasperreports-plugin 调用的函数,在 jasperreports 6+ 中不存在。我一直在四处寻找,但找不到 if/how 来改变这种行为,我开始认为我需要更新我的插件版本。

有没有办法更改插件调用的函数,或者我是否需要更改 struts 的版本才能获得我期望的行为?是否可以为插件编写适配器?

经过更多的故障排除后,我找到了 in which an adapter was made using existing code, which I got from https://web.archive.org/web/20180523111530/http://grepcode.com/file/repo1.maven.org/maven2/net.sf.jasperreports/jasperreports/6.1.0/net/sf/jasperreports/engine/util/JRLoader.java/,并添加了缺少的 loadObject(String fileName) 函数作为 loadFromFile(String fileName) 的适配器。这清除了 NoSuchMethodError。

然而,原来的问题java.lang.ArrayIndexOutOfBoundsException: 0 sun.font.ExtendedTextSourceLabel.createCharinfo(ExtendedTextSourceLabel.java:592又回来了,这是"fixed"通过改变Java的版本我是运行,在Error generating JasperReport in Development mode找到。

因为我正在使用在 Java 6 上运行的遗留系统,所以我已经放弃了,因为最初的问题是基于 JRE 而不是坏的 Jasperreports 库或 struts 插件。