java.lang.NoSuchMethod上传文件时出错



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

列表项 = 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/apache/commons/fileupload/RequestContext;)Ljava/util/List; at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126) at com.bworld.action.UploadSubscriptionImage.processRequest(UploadSubscriptionImage.java:46) at com.bworld.action.UploadSubscriptionImage.doPost(UploadSubscriptionImage.java:145) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) at 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) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:679)

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

你用错了罐子。 您的类路径引用的内容与您认为的不同。 检查你的 Jboss 库和类路径中是否有名称相似但版本不同的 jar。 然后执行完整的清理 + 构建周期,删除 jboss tmp 目录,并在服务器上执行清理 + 发布。 这是另一个 SO 答案

您的 WEB-INF/lib

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

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

我知道

这是一个老问题,但我的回答可能会帮助某人,这可能是由于很少的原因造成的

  1. 共享资源文件上传jar可能在您的WEB-INF/lib文件夹中丢失,如Bonzho所提到的
  2. 共享资源文件上传附带了最新的Tomcat和JBoss服务器,因此您无需在项目中外部使用该jar。 但是假设你已经使用了它,那么你可以尝试从类路径中删除它并进行一个干净的构建,这很可能有效
  3. 但有时您可能仍然会收到错误,指出java.lang.NoSuchMethodError:这可能是因为Eclipse没有显示来自您使用的commons-fileupload jar的旧导入的错误,因此请浏览项目的类并确保import 语句要么import org.apache.tomcat.util.http.fileupload.*,要么import org.apache.commons.fileupload*不是两者兼而有之

使用绒球总是一个好习惯。

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

最新更新