2010-01-28 7 views
2

Apache retourne cette erreur en essayant de télécharger un fichier (je ne gardais les premières lignes des causes STACKTRACE et racines):Apache commons -> File Upload - error> parseRequest()

HTTP Status 500 - 
type Exception report 

message 

description The server encountered an internal error() that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: Exception in JSP: /upload.jsp:40 

    37:  
    38:  try { 
    39: 
    40:   items = upload.parseRequest(request); 
    41:  } catch (FileUploadException e) { 
    42:   out.println(e); 
    43:  } 

Stacktrace: 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 

root cause 

javax.servlet.ServletException: org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(Lorg/apache/commons/fileupload/RequestContext;)Ljava/util/List; 

root cause 

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) 

Voici mon Code:

if(ServletFileUpload.isMultipartContent(request)){ 
FileItemFactory factory = new DiskFileItemFactory(); 
    ServletFileUpload upload = new ServletFileUpload(factory); 
    List items = null; 


    try { 

     items = upload.parseRequest(request); 
    } catch (FileUploadException e) { 
     out.println(e); 
    } 
} 

Je ne l'obtenir, on dirait qu'il ne peut pas trouver la méthode parseRequest(), mais l'instanciation de ServletFileUpload fonctionne très bien, il semble que le paquet est là, mais ...

Tout ce que je brigade des stupéfiants? Toutes les suggestions ont été appréciées! :)

Répondre

6

Ceci est en effet un signe de pollution des voies de classe. Vous avez différentes versions du fichier JAR communs fileupload qui s'étend sur le classpath. Vous devez nettoyer le classpath en supprimant ou en remplaçant les plus anciens. Dans le cas d'une application Web JSP/Servlet, les chemins par défaut couverts par le chemin de classe sont généralement Webapp/WEB-INF/lib, Webapp/WEB-INF/classes, Appserver/lib et JRE/lib. Cela dit, la pile indique que vous avez écrit du code Java brut dans les fichiers JSP en utilisant le old fashioned scriptlets. Je recommande fortement de ne pas le faire, mais juste d'utiliser une vraie classe Java (dans ce cas une servlet) pour gérer le téléchargement du fichier.

+0

vous aviez raison, une version plus ancienne de l'upload-commons se trouvait dans le dossier lib de tomcat. Tu as raison aussi je ne devrais pas coder comme ça, mais dans ce cas j'ai juste besoin d'ajouter un petit processus à une plate-forme existante en utilisant leur API, et sa seule page donc ... je n'ai pas dérangé, mais tu as raison , c'est faux :) – Piero

0

L'erreur noSuchMethod peut être due à une incompatibilité entre la version du fichier jar que vous avez compilé et le fichier jar dans le classpath runtime. C'est quelque chose à vérifier.