上传文件时出现java.lang.NoSuchMethodError

时间:2012-05-29 14:01:26

标签: java java-ee file-upload

我正在开发一个具有图像上传模块的应用程序。我编写了以下代码来获取多部分表单数据。

  

List items = servletFileUpload.parseRequest(request);

我正在使用commons-fileupload-1.2.1.jar来实现此目的。当我在jboss-5.1.0.GA服务器上部署构建时,它会在上传任何文件时出错。错误如下:

  

java.lang.NoSuchMethodError:   org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(Lorg /阿帕奇/公地/文件上传/ RequestContext的;)Ljava / util的/列表;           在org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)           在com.bworld.action.UploadSubscriptionImage.processRequest(UploadSubscriptionImage.java:46)           在com.bworld.action.UploadSubscriptionImage.doPost(UploadSubscriptionImage.java:145)           在javax.servlet.http.HttpServlet.service(HttpServlet.java:637)           在javax.servlet.http.HttpServlet.service(HttpServlet.java:717)           在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)           在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)           在org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)           在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)           在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)           在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)           at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)           在org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)           在org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)           at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)           at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)           在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)           at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)           在org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)           在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)           在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)           在org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)           在org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:598)           在org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:447)           在java.lang.Thread.run(Thread.java:679)

任何人都可以告诉我如何从这个问题中恢复过来吗?

4 个答案:

答案 0 :(得分:1)

您使用的是错误的jar。您的类路径引用的内容与您认为的不同。检查您的Jboss lib和类路径是否有类似名称但不同版本的jar。然后执行完整的清理+构建周期,删除jboss tmp目录,并在服务器上执行clean + publish。这是另一个SO answer

答案 1 :(得分:1)

您的WEB-INF / lib文件夹中缺少您的commons文件上传jar或者它已经由JBoss提供,您不应该在WEB-INF / lib中复制它

相关:http://techblog.bozho.net/?p=866

答案 2 :(得分:0)

我知道这是一个老问题,但我的回答可能对某人有帮助, 这可能因为几个原因而导致

  1. 公共文件上传jar可能在您的WEB-INF / lib文件夹中缺失,如Bonzho所述
  2. commons文件上传附带最新的tomcat和jboss服务器,因此您无需在项目外部使用该jar。但是假设你已经使用过它,那么你可以尝试从类路径中删除它并进行干净的构建,这应该最有可能工作
  3. 但有时您可能仍会收到错误说java.lang.NoSuchMethodError:因为eclipse没有显示来自您使用的commons-fileupload jar的旧导入的错误,所以会发生这种情况。项目,并确保 import语句为import org.apache.tomcat.util.http.fileupload.*import org.apache.commons.fileupload*,而非
  4. 使用pom始终是一个好习惯。

答案 3 :(得分:0)

使用commons-fileupload 1.3.3版本。我使用并解决了这个