java.lang.NoSuchMethodError: org.apache.pi.hssf.usermodel.HSSFSheet.setColumnWidth(II)V
Je suis en train de générer Jasper rapport Excel.Je suis l'exception, comme
java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFSheet.setColumnWidth(II)V
at net.sf.jasperreports.engine.export.JRXlsExporter.setColumnWidth(JRXlsExporter.java:212)
at net.sf.jasperreports.engine.export.JRXlsAbstractExporter.setColumnWidths(JRXlsAbstractExporter.java:654)
at net.sf.jasperreports.engine.export.JRXlsAbstractExporter.exportPage(JRXlsAbstractExporter.java:527)
at net.sf.jasperreports.engine.export.JRXlsAbstractExporter.exportReportToStream(JRXlsAbstractExporter.java:423)
at net.sf.jasperreports.engine.export.JRXlsAbstractExporter.exportReport(JRXlsAbstractExporter.java:207)
at com.pagesolutions.controller.ReportingController.doGet(ReportingController.java:177)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Mon code Java
if(formatType.matches("XLS")){
String jrxml = "/home/madhu/report1.jrxml";
list = (List<Reports>) session.getAttribute("customersList");
//InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(jrxml);
try {
//jasperReport = JasperCompileManager.compileReport(jrxml);
//jasperDesign = JRXmlLoader.load(jrxml);
jasperReport = JasperCompileManager.compileReport(jrxml);
JRDataSource datasource = new JRBeanCollectionDataSource(list, true);
jasperPrint = JasperFillManager.fillReport(jasperReport, null, datasource);
String output="/home/madhu/reports/report.xls";
//JasperExportManager.exportReportToPdfFile(jasperPrint, output);
JRXlsExporter exporterXLS = new JRXlsExporter();
exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
exporterXLS.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
exporterXLS.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, output);
exporterXLS.exportReport();
ServletOutputStream servletOutputStream = response.getOutputStream();
String fileName = "report.xls";
FileInputStream fileToDownload = new FileInputStream(output);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename="+ fileName);
ByteArrayOutputStream output1 = new ByteArrayOutputStream();
int readBytes = 0;
byte[] buffer = new byte[10000];
while ((readBytes = fileToDownload.read(buffer, 0, 10000)) != -1) {
servletOutputStream.write(buffer, 0, readBytes);
}
output1.flush();
output1.close();
fileToDownload.close();
} catch (JRException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
J'ai déjà ajouté poi-3.2-FINAL.jar fichier dans ma lib, mais encore obtenir l'exception ci-dessus
Quelqu'un peut-il m'aider s'il vous plaît....
- Pourriez-vous fournir un full stack trace de l'exception?
- me ressemble que vous appelez setColumnWidth avec un paramètre, alors qu'il faut être deux.
- J'ai donné une pile complète de la piste s'il vous plaît chek
- La version de Jasper Reports utilisez-vous? Semble que c'est impompatible avec POI version.
- Madhu du code n'est pas l'appel de la méthode particulière, mais Jasper-Rapport-Cadre.
Vous devez vous connecter pour publier un commentaire.
Si le projet est construit, mais vous obtenez cette erreur lors de l'exécution, il ne peut signifier qu'une chose: vous êtes à la construction et à la gestion avec les différentes versions de la bibliothèque. La version que vous avez construit contre cette méthode alors que l'on vous a couru avec ne pas. Elle pouvait également arriver que vous disposez de plusieurs versions sur le chemin de la classe et le mauvais est chargé en premier. Je ne sais pas comment vous construire votre projet, mais si vous êtes en utilisant une sorte de dépendance envers le gestionnaire, l'analyse de la structure en double PI versions. Si vous ne l'utilisez pas tout de dépendance gestionnaire de... bien... assurez-vous manuellement que les bibliothèques de match lors de la compilation et de l'exécution, mais vous devriez vraiment passer à un outil de construction qui fait cela pour vous afin que Jasper peut automatiquement faire glisser dans la bonne version, il dépend.
Remarque importante:
Depuis Jasper dépend déjà de PI, il n'y a aucune raison pour que votre projet de déclarer que la dépendance à nouveau. C'est seulement d'avoir des ennuis de la variété que vous voyez maintenant. Vous venez de déclarer votre dépendance à Jasper et laissez votre dépendance gestionnaire de glisser dans la bonne version de POI. En quelque sorte, d'une incompréhension fondamentale de la gestion de la dépendance est courante, même chez les anciens développeurs.
Si, d'autre part, d'une autre bibliothèque dépendent également traîne dans une autre version de POI, vous avez besoin de trouver des versions compatibles des deux tiers des bibliothèques (de sorte qu'ils ont besoin de la même POI), ou de l'exclusion explicite de PI à partir de l'un d'eux, croiser les doigts et espérer pour le mieux.
Je viens de corriger cette erreur sur ma demande. La mise à niveau vers la dernière version de POI (3.15 de cette écriture) était la MAUVAISE chose à faire.
De Jasperreports 6.3.1, il nécessite Apache POI 3.10.1. J'ai trouvé cela en regardant la Jasperreports référentiel POM fichier, trouve ici:
http://repo2.maven.org/maven2/net/sf/jasperreports/jasperreports/6.3.1/jasperreports-6.3.1.pom
Si vous utilisez une version différente de Jasper, il suffit de changer votre version dans l'URL et vérifier le fichier pom. Recherche pour PVE et il vous dira quelle version est nécessaire.
Dès que j'ai rétrogradé de PI 3.15 à 3.10.1 mes erreurs s'en alla, et j'ai eu une belle .fichier xls pour mes efforts. J'avais été coincé sur depuis un certain temps et il est bon de l'avoir enfin travailler!
Mise à jour de votre Apache POI version la plus récente (la dernière version stable est la 3.11). La Version 3.2 est très ancienne. Version actuelle contient ce setColumnWidth(int, int) méthode qui était absent dans la version 3.2 d'
J'ai changé le pot avec du 'poi-3.11.jar" et "jxls-reader-1.0.6.jar'