我们最近将JasperReports版本从5.2.0升级到6.2.2。之后,报告生成失败并出现以下堆栈溢出错误。
java.lang.StackOverflowError
at net.sf.jasperreports.engine.util.StyleResolver.getPadding(StyleResolver.java:1533) ~[jasperreports-javaflow-6.2.2.jar:6.2.2]
at net.sf.jasperreports.engine.base.JRBaseLineBox.getPadding(JRBaseLineBox.java:228) ~[jasperreports-javaflow-6.2.2.jar:6.2.2]
at net.sf.jasperreports.engine.util.StyleResolver.getPadding(StyleResolver.java:1541) ~[jasperreports-javaflow-6.2.2.jar:6.2.2]
at net.sf.jasperreports.engine.base.JRBaseLineBox.getPadding(JRBaseLineBox.java:228) ~[jasperreports-javaflow-6.2.2.jar:6.2.2]
at net.sf.jasperreports.engine.util.StyleResolver.getPadding(StyleResolver.java:1541) ~[jasperreports-javaflow-6.2.2.jar:6.2.2]
at net.sf.jasperreports.engine.base.JRBaseLineBox.getPadding(JRBaseLineBox.java:228) ~[jasperreports-javaflow-
..........................
经过一些研究后,我发现了以下有趣的细节。
我们在代码中定义了两个样式模板,一个在平台级别,另一个是项目特定的。
PlatformStyles.jrtx:
style name="genericTextStyle" vAlign="Middle" fontName="DejaVu Sans" fontSize="11"
ProjectStyles.jrtx:
style name="projectTextStyle" style="genericTextStyle" isDefault="true" fontName="SansSerif" fontSize="8"
以上代码(样式模板)在JasperReports 5.2.0的早期版本中按预期工作。运行报告时,相同的代码导致上述错误。
最后,我刚从ProjectStyles.jrtx文件中删除了isDefault="true"
,之后生成的报告没有任何错误。
即使我尝试使用最新版本的JasperReports 6.3.1,仍面临同样的问题!
这是JasperReports升级中的错误还是提供了一种新方法?