Impossible de capturer IllegalStateException
Bonjour
J'essaie d'envoyer un fichier lourd depuis mon formulaire, c'est-à-dire un fichier qui dépasse définit dans mon web.xml mais le message d'erreur que j'ai prévu pour ça ne s'affiche pas dans ma page jsp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| private String validationImage( HttpServletRequest request, String chemin ) throws FormValidationException {
/*
* Récupération du contenu du champ image du formulaire. Il faut ici
* utiliser la méthode getPart().
*/
String nomFichier = null;
InputStream contenuFichier = null;
try {
Part part = request.getPart( CHAMP_IMAGE );
nomFichier = getNomFichier( part );
/*
* Si la méthode getNomFichier() a renvoyé quelque chose, il s'agit
* donc d'un champ de type fichier (input type="file").
*/
if ( nomFichier != null && !nomFichier.isEmpty() ) {
/*
* Antibug pour Internet Explorer, qui transmet pour une raison
* mystique le chemin du fichier local à la machine du client...
*
* Ex : C:/dossier/sous-dossier/fichier.ext
*
* On doit donc faire en sorte de ne sélectionner que le nom et
* l'extension du fichier, et de se débarrasser du superflu.
*/
nomFichier = nomFichier.substring( nomFichier.lastIndexOf( '/' ) + 1 )
.substring( nomFichier.lastIndexOf( '\\' ) + 1 );
/* Récupération du contenu du fichier */
contenuFichier = part.getInputStream();
/* Extraction du type MIME du fichier depuis l'InputStream */
MimeUtil.registerMimeDetector( "eu.medsea.mimeutil.detector.MagicMimeMimeDetector" );
Collection<?> mimeTypes = MimeUtil.getMimeTypes( contenuFichier );
/*
* Si le fichier est bien une image, alors son en-tête MIME
* commence par la chaîne "image"
*/
if ( mimeTypes.toString().startsWith( "image" ) ) {
/* Écriture du fichier sur le disque */
ecrireFichier( contenuFichier, nomFichier, chemin );
} else {
throw new FormValidationException( "Le fichier envoyé doit être une image." );
}
}
} catch ( NullPointerException e ) {
/*
* Exception retournée si la taille des données dépasse les limites
* définies dans la section <multipart-config> de la déclaration de
* notre servlet d'upload dans le fichier web.xml
*/
throw new FormValidationException( "Le fichier ne doit pas être vide." );
}
catch ( IllegalStateException e ) {
/*
* Exception retournée si la taille des données dépasse les limites
* définies dans la section <multipart-config> de la déclaration de
* notre servlet d'upload dans le fichier web.xml
*/
e.printStackTrace();
throw new FormValidationException( "Le fichier envoyé ne doit pas dépasser 1Mo." );
} catch ( IOException e ) {
/*
* Exception retournée si une erreur au niveau des répertoires de
* stockage survient (répertoire inexistant, droits d'accès
* insuffisants, etc.)
*/
e.printStackTrace();
throw new FormValidationException( "Erreur de configuration du serveur." );
} catch ( ServletException e ) {
/*
* Exception retournée si la requête n'est pas de type
* multipart/form-data.
*/
e.printStackTrace();
throw new FormValidationException(
"Ce type de requête n'est pas supporté, merci d'utiliser le formulaire prévu pour envoyer votre fichier." );
}
return nomFichier;
} |
J'arrive pourtant à voir l'exception dans mon netbeans grâce au e.printStackTrace():
Citation:
java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (431748586) exceeds the configured maximum (52428800)
at org.apache.catalina.connector.Request.parseParts(Request.java:2804)
at org.apache.catalina.connector.Request.parseParameters(Request.java:3073)
at org.apache.catalina.connector.Request.getParameter(Request.java:1095)
at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:380)
at org.netbeans.modules.web.monitor.server.MonitorRequestWrapper.getParameter(MonitorRequestWrapper.java:199)
at forms.CreationProduitForm.getValeurChamp(CreationProduitForm.java:255)
at forms.CreationProduitForm.creerProduit(CreationProduitForm.java:54)
at servlets.AjoutProduit.doPost(AjoutProduit.java:52)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (431748586) exceeds the configured maximum (52428800)
at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:811)
at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256)
at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280)
at org.apache.catalina.connector.Request.parseParts(Request.java:2734)
... 33 more
java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (431748586) exceeds the configured maximum (52428800)
at org.apache.catalina.connector.Request.parseParts(Request.java:2804)
at org.apache.catalina.connector.Request.parseParameters(Request.java:3073)
at org.apache.catalina.connector.Request.getParameter(Request.java:1095)
at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:380)
at org.netbeans.modules.web.monitor.server.MonitorRequestWrapper.getParameter(MonitorRequestWrapper.java:199)
at forms.CreationProduitForm.getValeurChamp(CreationProduitForm.java:255)
at forms.CreationProduitForm.creerProduit(CreationProduitForm.java:54)
at servlets.AjoutProduit.doPost(AjoutProduit.java:52)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (431748586) exceeds the configured maximum (52428800)
at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:811)
at org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256)
at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280)
at org.apache.catalina.connector.Request.parseParts(Request.java:2734)
... 33 more
J'arrive aussi à afficher les messages d'erreur lorsque par exemple le champ est vide, ou lorsque le répertoire de destination est inexistant, mais pour le dépassement de taille de fichier, le message d'erreur "Le fichier envoyé ne doit pas dépasser 1Mo" ne s'affiche pas.
Merci