【问题标题】:java.lang.NoSuchMethodError while uploading file上传文件时出现 java.lang.NoSuchMethodError
【发布时间】:2012-05-29 14:01:26
【问题描述】:

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

列表项 = 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; 在 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) 在 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) 在 org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) 在 org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 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)

谁能告诉我如何从这个问题中恢复?

【问题讨论】:

    标签: java jakarta-ee file-upload


    【解决方案1】:

    您使用了错误的 jar。您的类路径引用的内容与您认为的不同。检查您的 Jboss 库和类路径中是否有名称相似但版本不同的 jar。然后做一个完整的 clean + build 循环,删除 jboss tmp 目录,然后在服务器上做一个 clean + publish。这是另一个SO answer

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        我知道这是一个老问题,但我的回答可能会对某人有所帮助, 这可能是由于几个原因造成的

        1. 如 Bonzho 所述,您的 WEB-INF/lib 文件夹中可能缺少公共文件上传 jar
        2. commons file-upload 随最新的 tomcat 和 jboss 服务器一起提供,因此您无需在项目外部使用该 jar。但是假设您已经使用过它,那么您可以尝试将其从类路径中删除并进行干净的构建,这很可能会起作用
        3. 但有时您可能仍会收到错误提示 java.lang.NoSuchMethodError: 这可能是因为 Eclipse 未显示来自您使用的 commons-fileupload jar 的旧导入错误,因此请查看您的类项目并确保 import 语句是 import org.apache.tomcat.util.http.fileupload.*import org.apache.commons.fileupload* 不是两者都

        使用 pom 始终是一个好习惯。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-05-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-01-28
            • 2013-05-30
            • 2016-09-28
            相关资源
            最近更新 更多