所以我正在从一个非常旧的版本升级jasper报告。这是从3.7.6到6.3.0,所以是的,很多变化。在大多数情况下,它没有我预期的那么糟糕。需要更新文件解析器和导出器周围的一些弃用的东西,但大多数一切工作和报告的可视化布局是相同的。
我遇到并且无法解决的唯一问题是设置默认样式。我们在一些报告中这样做,并给我一个我无法理解的错误。
<?xml version="1.0"?>
<!DOCTYPE jasperTemplate
PUBLIC "-//JasperReports//DTD Template//EN"
"http://jasperreports.sourceforge.net/dtds/jaspertemplate.dtd">
<jasperTemplate>
<style name="gothamBase" fontName="Monospaced" forecolor="#5d5c5c" vAlign="Top"></style>
<style name="gothamMedium" style="gothamBase" fontSize="12" isDefault="true" ></style>
</jasperTemplate>
所以这是一个给我带来问题的风格的例子。当我们尝试编译引用它的报告时,我得到:
threw exception [Handler processing failed; nested exception is java.lang.StackOverflowError] with root cause
java.lang.StackOverflowError
at net.sf.jasperreports.engine.base.JRBaseStyle.getStyle(JRBaseStyle.java:338)
at net.sf.jasperreports.engine.util.StyleResolver.getBaseStyle(StyleResolver.java:109)
at net.sf.jasperreports.engine.util.StyleResolver.getFontName(StyleResolver.java:1191)
at net.sf.jasperreports.engine.base.JRBaseStyle.getFontName(JRBaseStyle.java:594)
at net.sf.jasperreports.engine.util.StyleResolver.getFontName(StyleResolver.java:1194)
at net.sf.jasperreports.engine.base.JRBaseStyle.getFontName(JRBaseStyle.java:594)
at net.sf.jasperreports.engine.util.StyleResolver.getFontName(StyleResolver.java:1194)
at net.sf.jasperreports.engine.base.JRBaseStyle.getFontName(JRBaseStyle.java:594)
at net.sf.jasperreports.engine.util.StyleResolver.getFontName(StyleResolver.java:1194)
at net.sf.jasperreports.engine.base.JRBaseStyle.getFontName(JRBaseStyle.java:594)
at net.sf.jasperreports.engine.util.StyleResolver.getFontName(StyleResolver.java:1194)
at net.sf.jasperreports.engine.base.JRBaseStyle.getFontName(JRBaseStyle.java:594)
at net.sf.jasperreports.engine.util.StyleResolver.getFontName(StyleResolver.java:1194)
at net.sf.jasperreports.engine.base.JRBaseStyle.getFontName(JRBaseStyle.java:594)
at net.sf.jasperreports.engine.util.StyleResolver.getFontName(StyleResolver.java:1194)
at net.sf.jasperreports.engine.base.JRBaseStyle.getFontName(JRBaseStyle.java:594)
at net.sf.jasperreports.engine.util.StyleResolver.getFontName(StyleResolver.java:1194)
at net.sf.jasperreports.engine.base.JRBaseStyle.getFontName(JRBaseStyle.java:594)
为了排除其他因素,我将报告删除,只有对具有上述样式的模板的引用它才为空。我从模板文件中删除了所有其他样式。
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="title" pageWidth="792" pageHeight="612" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="792" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<template><![CDATA["styles.jrtx"]]></template>
</jasperReport>
即使在缩小范围之后仍然存在问题。出于某种原因,当该样式也引用父样式时,它不喜欢我设置默认样式。但是看看jasper文档,我在这里做的是有效的。
我发现了这个http://community.jaspersoft.com/questions/535452/javalangstackoverflowerror,它有类似的错误。但是我们没有使用javaflow。只是为了确保我已经将更改添加到log4j,以便javaflow不在调试,这没有改变任何东西。还尝试从我们的pom中排除javaflow,也没有运气。
任何帮助?