我正在使用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+中不存在。我一直在寻找,但无法找出是否/如何改变这种行为,并开始认为我需要更新我的插件版本。
有没有办法更改插件调用的函数,或者我是否需要更改struts的版本以获得我期望的行为?是否可以为插件编写适配器?
答案 0 :(得分:0)
经过一些更多的故障排除后,我发现https://stackoverflow.com/a/37864625/892327使用现有代码制作了适配器,我从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
已返回,通过更改Error generating JasperReport in Development mode上找到的正在运行的Java版本来“修复”。
因为我正在使用在Java 6上运行的遗留系统,所以我放弃了,因为原始问题是基于JRE而不是糟糕的Jasperreports库或struts插件。