2012-05-29 73 views
4

我正在開發一個具有圖片上傳模塊的應用程序。我寫了下面的代碼來獲取多部分表單數據。上傳文件時java.lang.NoSuchMethodError

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/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)

任何人都可以請告訴我如何從這個問題中恢復?

回答

1

您正在使用錯誤的jar。你的類路徑引用了一些與你想象的不同的東西。檢查你的Jboss庫和classpath是否有類似的名字,但版本不同。然後做一個完整的clean + build週期,刪除jboss tmp目錄,然後在服務器上做一個clean +發佈。這裏是另一個SO answer

1

你的公共文件上傳罐子是從你的WEB-INF/lib文件夾丟失或它已通過JBoss的運輸和你不應該在複製它的WEB-INF/lib目錄

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

0

我知道這是一個老問題,但我的回答可以幫助別人, 這可能會導致由於幾個原因

  1. 公共文件上傳罐子可能會在你的WEB-INF/lib文件夾被失蹤Bonzho提到
  2. commons file-upload隨附最新的tomcat和jboss服務器,因此您不需要在項目的外部使用該jar。但可以說你已經使用它,那麼你可以嘗試從類路徑中刪除它,並做一個乾淨的生成,應該很可能工作
  3. 但有時你可能仍然會得到說錯誤java.lang.NoSuchMethodError:可以發生,因爲日食不顯示該從公地文件上傳罐子你使用,以便通過你的項目的類別,並確保 import語句或者是import org.apache.tomcat.util.http.fileupload.*import org.apache.commons.fileupload*不能同時

來到舊的進口錯誤使用pom總是一個好習慣。

0

使用commons-fileupload 1.3.3版本。我使用並解決了這個問題