简体   繁体   English

java.lang.NoSuchMethodError:org.apache.poi.xssf.usermodel.XSSFWorkbook。 <init> (Ljava / IO / InputStream的;)V

[英]java.lang.NoSuchMethodError: org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(Ljava/io/InputStream;)V

I have included the dom4j-1-6.jar,poi 3.9 jar,poi ooxml schemas 3.9 jar,poi ooxml 3.9 jar,xmlbeans-2.3.0.jar in my class path.i have used syntax like below 我在我的类路径中包含了dom4j-1-6.jar,poi 3.9 jar,poi ooxml模式3.9 jar,poi ooxml 3.9 jar,xmlbeans-2.3.0.jar我使用了如下语法

InputStream ExcelFileToRead = new FileInputStream(relative+"/"+docName);
         XSSFWorkbook  wb_hssf  = new XSSFWorkbook(ExcelFileToRead);

Im getting the following error, 我收到以下错误,

java.lang.NoSuchMethodError: org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(Ljava/io/InputStream;)V
    at com.admin.upload_images.doPost(upload_images.java:1057)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:182)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)

There's an Apache POI FAQ entry covering virtually this case , which you should read. 实际上有一个涉及此案例Apache POI FAQ条目 ,您应该阅读。 Basically though, at runtime, you are not using the POI jars you compiled against. 不过基本上,在运行时,您不会使用针对其编译的POI jar。 Instead, you are somehow using a different version. 相反,您正在以某种方式使用其他版本。 This could be because you deployed different jars, it could be because your runtime or container or framework shipped other POI jars, or some other mistake. 这可能是因为您部署了不同的jar,也可能是因为您的运行时,容器或框架附带了其他POI jar或其他错误。 As per this POI FAQ all POI jars must be from the same version too. 按照此POI常见问题解答,所有POI罐也必须来自相同版本。

So, you need to review your classpath at runtime, with the help of the snippet from the FAQ if you can't spot what's wrong, then remove the mis-matched POI jars so you only have the ones you used at compile time. 因此,如果您无法发现问题所在,则需要在FAQ代码段帮助下在运行时查看类路径,然后删除不匹配的POI jar,以便仅保留在编译时使用的POI jar。 Your code will then work 您的代码将可以正常工作

However... There are a few other issues with your code! 但是,您的代码还有其他一些问题! One is that you're using an InputStream when you have a file. 一种是拥有文件时使用的是InputStream。 This, as explained in the Apache POI docs is bad as it uses lots more memory. 正如Apache POI文档中所述 ,这是不好的,因为它使用了更多的内存。 Change it to use a File instead, eg with this 更改它以使用文件代替,例如与此

Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));

Secondly, Apache POI 3.9 is a bit old now, and there have been a huge number of bug fixes since then , so you should upgrade to the latest version (3.11 or 3.12 beta 1 as of writing) 其次,Apache POI 3.9现在有点旧,并且从那时起已有大量错误修复 ,因此您应该升级到最新版本(撰写本文时为3.11或3.12 beta 1)

As the exception suggest even though you are include a version in which the method exists, the build is considering an older version in which the method does not exists. 作为例外建议,即使您包括该方法存在的版本,该构建也正在考虑该方法不存在的较旧版本。 To test this check your maven dependency tree and remove the older versions. 要进行测试,请检查您的maven依赖关系树并删除较旧的版本。 It could also be possible that an older version is comming from the container as well so check it properly. 容器中可能还会出现较旧的版本,因此请正确检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.NoSuchMethodError:org.apache.poi.util.IOUtils.copy(Ljava / io / InputStream; Ljava / io / OutputStream;)V - java.lang.NoSuchMethodError: org.apache.poi.util.IOUtils.copy(Ljava/io/InputStream;Ljava/io/OutputStream;)V java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook - java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook java.lang.NoSuchMethodError:org.apache.poi.util.IOUtils.copy(Ljava / io / InputStream; Ljava / io / OutputStream;) - java.lang.NoSuchMethodError: org.apache.poi.util.IOUtils.copy(Ljava/io/InputStream;Ljava/io/OutputStream;) java.lang.NoSuchMethodError:org.apache.poi.ss.usermodel.Workbook.sheetIterator()Ljava / util / Iterator; - java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Workbook.sheetIterator()Ljava/util/Iterator; 如何避免Apache POI中的java.lang.NoSuchMethodError:org.apache.poi.util.IOUtils.copy(Ljava / io / InputStream; Ljava / io / OutputStream;) - How to avoid java.lang.NoSuchMethodError: org.apache.poi.util.IOUtils.copy(Ljava/io/InputStream;Ljava/io/OutputStream;) in Apache POI java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook AND java.lang.ClassNotFoundException: org.apache.poi.xssf.usermodel.XSSF - java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook AND java.lang.ClassNotFoundException: org.apache.poi.xssf.usermodel.XSSF java.lang.NoSuchMethodError:org.apache.poi.ss.usermodel.Font.setBold(Z)V - java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Font.setBold(Z)V java.lang.NoSuchMethodError:org.apache.poi.hssf.usermodel.HSSFSheet.setColumnWidth(II)V - java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFSheet.setColumnWidth(II)V java.lang.NoSuchMethodError:com.paypal.core.BaseService。 <init> (Ljava / io / InputStream;)V - java.lang.NoSuchMethodError: com.paypal.core.BaseService.<init>(Ljava/io/InputStream;)V 如何解决java.lang.VerifyError:org / apache / poi / xssf / usermodel / XSSFWorkbook? - How to resolve the java.lang.VerifyError: org/apache/poi/xssf/usermodel/XSSFWorkbook?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM