Java Can';t使用JasperReports生成PDF报告

Java Can';t使用JasperReports生成PDF报告,java,jasper-reports,Java,Jasper Reports,这个错误让我大吃一惊,所以我非常感谢你的帮助。问题是,我正在处理一个使用JSF的web应用程序,其中需要生成一个报告,以便用户可以下载它。但是,每当我尝试生成报告时,都会得到以下堆栈跟踪: java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser net.sf.jasperreports.engine.fill.JRBaseF

这个错误让我大吃一惊,所以我非常感谢你的帮助。问题是,我正在处理一个使用JSF的web应用程序,其中需要生成一个报告,以便用户可以下载它。但是,每当我尝试生成报告时,都会得到以下堆栈跟踪:

java.lang.NoClassDefFoundError: Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser
    net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:110)
    net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:69)
    net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:57)
    net.sf.jasperreports.engine.fill.JRFiller.createBandReportFiller(JRFiller.java:200)
    net.sf.jasperreports.engine.fill.JRFiller.createReportFiller(JRFiller.java:215)
    net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:84)
    net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:456)
    net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:863)
    br.com.ead.jasper.RelatorioUtil.geraRelatorio(RelatorioUtil.java:43)
    br.com.ead.web.RelatorioBean.gerarRelatorio(RelatorioBean.java:31)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    javax.el.BeanELResolver.invoke(BeanELResolver.java:158)
    javax.el.CompositeELResolver.invoke(CompositeELResolver.java:79)
    org.apache.el.parser.AstValue.getValue(AstValue.java:159)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
    com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    org.primefaces.component.filedownload.FileDownloadActionListener.processAction(FileDownloadActionListener.java:53)
    javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813)
    javax.faces.component.UICommand.broadcast(UICommand.java:300)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    br.com.ead.filter.CharsetFilter.doFilter(CharsetFilter.java:26)
    br.com.ead.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:42)
    br.com.ead.filter.LoginFilterProfessor.doFilter(LoginFilterProfessor.java:35)

再次感谢您的帮助。

基于您的pom,您正在使用5.0.0版Jasper Reports。根据所讨论的类的类型,导致此错误的静态块不会记录或打印在静态初始化期间可能引发的任何错误

您有两个选择:

  • 查看我链接的源代码,看看是否可以确定在静态初始化块中引发异常的原因,修复它,然后继续
  • 将jasper reports版本升级到至少6.3.0。在所讨论的类中,他们至少已经开始打印底层问题的堆栈跟踪。这应该能让你更好地了解实际的误差是什么

  • 因此,基于您的pom,您正在使用5.0.0版Jasper Reports。根据所讨论的类的类型,导致此错误的静态块不会记录或打印在静态初始化期间可能引发的任何错误

    您有两个选择:

  • 查看我链接的源代码,看看是否可以确定在静态初始化块中引发异常的原因,修复它,然后继续
  • 将jasper reports版本升级到至少6.3.0。在所讨论的类中,他们至少已经开始打印底层问题的堆栈跟踪。这应该能让你更好地了解实际的误差是什么

  • NoClassDefFoundError通常是由于类缺少依赖项(例如,无法解析的导入)而无法加载类,而不是类本身不存在。我的意思是,可能不是类路径中没有JRStylesTextParser,而是缺少它所依赖的另一个类。我会在被抛出的类上设置调试断点以跟随线程,或者查看该类的源代码以检查其所有类依赖项是否也存在于类路径中。嘿,感谢您花时间回答。我研究了JRStyleTextParser的源代码,所有导入都可以解析。我甚至将它们复制并粘贴到我的代码中以确保安全。关于如何解决这个问题还有其他想法吗?你试过调试吗?您是否尝试从简单应用程序(例如,带有静态main的简单类)运行相同的代码?这是整个堆栈跟踪吗?当静态块中出现错误时,通常会抛出这种有点混乱的NoClassDefFoundError。@JeffersonAvares您应该发布小jrxml来重现问题NoClassDefFoundError通常是由于类缺少依赖项而无法加载类(例如,无法解决的导入),不是因为课堂本身不在场。我的意思是,可能不是类路径中没有JRStylesTextParser,而是缺少它所依赖的另一个类。我会在被抛出的类上设置调试断点以跟随线程,或者查看该类的源代码以检查其所有类依赖项是否也存在于类路径中。嘿,感谢您花时间回答。我研究了JRStyleTextParser的源代码,所有导入都可以解析。我甚至将它们复制并粘贴到我的代码中以确保安全。关于如何解决这个问题还有其他想法吗?你试过调试吗?您是否尝试从简单应用程序(例如,带有静态main的简单类)运行相同的代码?这是整个堆栈跟踪吗?当静态块出现问题时,通常会抛出这个有点混乱的NoClassDefFoundError。@JeffersonAvares您应该发布小jrxml来重现一个问题升级每个依赖项并添加一些Jasper Reports官方文档中未列出的新依赖项为我修复:)升级每个依赖项并添加了一些未在Jasper Reports官方文档中列出的新项目,为我解决了这一问题:)
    <dependencies>
    
            <!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.8</version>
            </dependency>
    
    
            <!-- https://mvnrepository.com/artifact/org.primefaces/primefaces -->
            <dependency>
                <groupId>org.primefaces</groupId>
                <artifactId>primefaces</artifactId>
                <version>5.0</version>
            </dependency>
    
    
            <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>4.3.11.Final</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.23</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.0.1</version>
                <scope>provided</scope>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports -->
            <dependency>
                <groupId>net.sf.jasperreports</groupId>
                <artifactId>jasperreports</artifactId>
                <version>5.0.0</version>
            </dependency>
    
    
            <dependency>
                <groupId>com.sun.faces</groupId>
                <artifactId>jsf-api</artifactId>
                <version>2.2.9</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-pdfa -->
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itext-pdfa</artifactId>
                <version>5.5.11</version>
            </dependency>
    
    
            <dependency>
                <groupId>com.sun.faces</groupId>
                <artifactId>jsf-impl</artifactId>
                <version>2.2.9</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.primefaces.extensions/all-themes -->
            <dependency>
                <groupId>org.primefaces.extensions</groupId>
                <artifactId>all-themes</artifactId>
                <version>1.0.8</version>
            </dependency>
    
    
            <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/javax.servlet.jsp.jstl-api -->
            <dependency>
                <groupId>javax.servlet.jsp.jstl</groupId>
                <artifactId>javax.servlet.jsp.jstl-api</artifactId>
                <version>1.2.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>4.2.6.RELEASE</version>
            </dependency>
    
    
            <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.2</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
            <dependency>
                <groupId>commons-beanutils</groupId>
                <artifactId>commons-beanutils</artifactId>
                <version>1.9.3</version>
            </dependency>
    
    
            <!-- https://mvnrepository.com/artifact/commons-collections/commons-collections -->
            <dependency>
                <groupId>commons-collections</groupId>
                <artifactId>commons-collections</artifactId>
                <version>3.2.2</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/commons-digester/commons-digester -->
            <dependency>
                <groupId>commons-digester</groupId>
                <artifactId>commons-digester</artifactId>
                <version>2.1</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.5.11</version>
            </dependency>
    
    
    
    
            <!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-servlet-api -->
            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-servlet-api</artifactId>
                <version>9.0.0.M26</version>
            </dependency>
    
            <dependency>
                <groupId>xml-apis</groupId>
                <artifactId>xml-apis</artifactId>
                <version>1.4.01</version>
            </dependency>
    
    
    
            <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-web-api</artifactId>
                <version>7.0</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>