2017-08-16 141 views
0

這個錯誤讓我不知所措,所以任何幫助表示感謝。因此,我正在處理一個使用JSF的Web應用程序,在那裏需要生成一個報告,以便用戶可以下載它。但是,每當我嘗試生成報告時,我都會得到這個堆棧跟蹤:無法使用JasperReports生成PDF報告

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) 

錯誤似乎相當直接。看起來像這個類class net.sf.jasperreports.engine.util.JRStyledTextParser丟失,但它實際上是在我的類路徑。我無法找到一種方法來完成這項工作!我使用Maven作爲依賴管理器,所以這裏是我的依賴關係:

<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> 

再次,任何幫助表示讚賞。

+0

NoClassDefFoundError通常由於缺少類的依賴關係(例如,無法解析的導入)而無法加載類,而不是類本身不存在。我的意思是,可能不是JRStylesTextParser不在類路徑中,而是依賴於它所依賴的另一個類缺失。我會把拋出的調試斷點放在該類的後面,或者查看該類的源代碼來檢查它的所有類依賴關係是否也存在於類路徑中。 –

+0

嘿,感謝您花時間回答。我查看了JRStyleTextParser的源代碼,並且可以解析所有的導入。我甚至在我的代碼中複製並粘貼它們以確保。任何其他想法如何解決這個問題? –

+0

你試過調試嗎?你有沒有嘗試從簡單的應用程序運行相同的代碼(例如,使用靜態主類的簡單類)? –

回答

2

因此,基於您的pom,您正在使用Jasper Reports 5.0.0版本。根據所討論類的this version,導致此錯誤的靜態塊不會記錄或打印靜態初始化期間可能拋出的任何錯誤。

你有兩個選擇:

  1. 看看源我聯繫,看看您是否能確定什麼可能在靜態初始化塊拋出一個異常,修復它,然後繼續
  2. 升級你的碧玉報告版本至至少 6.3.0。從該類的this version開始,他們至少已經開始打印潛在問題的堆棧跟蹤。這應該讓您更好地瞭解實際的錯誤。
+0

升級每一個依賴項,並添加一些沒有在Jasper Reports官方文檔中列出的新項目爲我修復:) –