Solucionado (ver solução)
Solucionado
(ver solução)
11
respostas

Tratamento upload com tamanho maior que o limite

Boa noite.

Estou encontrando problemas para tratar os casos em que o arquivo enviado tem tamanho maior que o estabelecido na configuração de limites.

Quando o arquivo excede pouco o tamanho limite o validator.onErrorRedirectTo pega o erro e trata; porém, quando a diferença aumenta o sistema cai – ao menos no navegador recebo a mensagem de dizendo que houve falha no carregamento da página (Conexão reiniciada).

Segue a mensagem do debug pouco antes do lançamento da exceção:

19:02:08,656 DEBUG [CommonsUploadMultipartObserver] Setting file sizes: total=52428800, file=20971520
19:02:08,712 DEBUG [DefaultResult       ] including attribute vmessages: br.com.caelum.vraptor.validator.Messages@64c2b0e2
19:02:08,712  WARN [CommonsUploadMultipartObserver] There was some problem parsing this multipart request, or someone is not sending a RFC1867 compatible multipart request.
org.apache.commons.fileupload.FileUploadBase$FileSizeLimitExceededException: The field arquivo exceeds its maximum permitted size of 20971520 bytes.
    at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl$FileItemStreamImpl$1.raiseError(FileUploadBase.java:787)
    at org.apache.commons.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:78)
    at org.apache.commons.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:137)

Fiz a configuração dos tamanhos limites tanto como anotação no método:

@UploadSizeLimit(sizeLimit=40 * 1024 * 1024, fileSizeLimit=40 * 1024 * 1024)
public void adiciona(MaterialComplementar mc, UploadedFile arquivo) throws IOException {

Quanto pela classe de especialização:

@Specializes
@ApplicationScoped
public class CustomMultipartConfig extends DefaultMultipartConfig {

O erro é o mesmo.

Os testes estão bem enxutos, pra evitar qualquer dúvida não há nenhum código de salvamento do arquivo em arquivo ou banco. O problema ocorre antes disso. Segue o método do controller:

public void adiciona(MaterialComplementar mc, UploadedFile arquivo) throws IOException {

    if (arquivo == null) {
        validator.add(new SimpleMessage("arquivo", "Não foi informado um arquivo para upload"));
    }
    validator.onErrorRedirectTo(this).form();

    // ...

    result.redirectTo(this).form();
}

Nos últimos testes, o limite de tamanho por aquivo estava em 20M. Ao enviar um arquivo de 31M o validator tratou, já um de 39M deu zebra, a casa caiu.

Em suma : o validator não trata o erro.

Por favor mestres, uma ajuda.

Desde já agradeço.

11 respostas

Algumas outras informações importantes:

Versão do VRaptor: 4.2.0-RC3

commons-fileupload: 1.3.1

Java: 1.8.0_101

Oi Rodrigo, no lado do servidor aparece alguma mensagem relativa a memória ou algo parecido? Parece estranho que um aumento tão pequeno de tamanho derrube o servidor.

Oi Alberto.

Não aparece nada referente a memória. No stacktrace consta que o tamanho foi ultrapassado, só. No fim da pilha de erros não aparece nenhuma mensagem mais significativa. Como eu disse, deixei o código super limpo pra não correr o risco de estar fazendo algo errado.

É Rodrigo, não estou conseguindo ver o problema não. Acho que eu precisaria rodar o código para testar... Em relação a saber se o servidor caiu mesmo, você precisa ver se seu tomcat, ou qq que seja o servidor, ainda está de pé depois do upload do arquivo maior.

Caso seja possível, posta o link do projeto no github.

Oi Rodrigo

Você consegue colocar o VRaptor e FileUpload como debug no log4j e mandar os logs dessa request aqui?

Se precisar, aqui tem um how to de como ativar os logs:

http://www.vraptor.org/en/docs/dependencies-and-prerequisites/#logging

Fora isso, fiquei na dúvida sobre uma coisa. A aplicação cai, ou só a request que termina lançando um 500?

Oi Turini.

Coloquei VRaptor e FileUpload como DEBUG e gerei log para dois senários: um para o caso em que o validator trata o erro e redireciona para a página que solicitei (método form do controller corrente). O segundo para o caso em que o validator "não trata".

O problema ocorre no método "adiciona", que no final faz um redirect para "form". No segundo senário o redirect não acontece. O navegador não mostra aquela página clássica do HTTP Status 500). Mostra uma página informando que a conexão foi reiniciada (no Chrome: ERR_CONNECTION_RESET).

O senário é o seguinte: limitei o tamanho de arquivos para upload em 3Mb. Percebi que para aquivos de até 6Mb o erro é tratado e o redirecionamento ocorre como previsto. Com arquivos a partir de 8Mb a casa cai.

Segue os logs:

Senário 1:

02:33:08,195 DEBUG [DefaultControllerTranslator] trying to access /materiaisComplementares/adiciona
02:33:08,195 DEBUG [DefaultControllerTranslator] found controller [DefaultControllerMethod: public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException]
02:33:08,196  INFO [CommonsUploadMultipartObserver] Request contains multipart data. Try to parse with commons-upload.
02:33:08,196 DEBUG [CommonsUploadMultipartObserver] Using repository /tmp for file upload
02:33:08,196 DEBUG [CommonsUploadMultipartObserver] Setting file sizes: total=41943040, file=3145728
02:33:08,220 DEBUG [DefaultResult       ] including attribute vmessages: br.com.caelum.vraptor.validator.Messages@4d4d7c9d
02:33:08,220  WARN [CommonsUploadMultipartObserver] There was some problem parsing this multipart request, or someone is not sending a RFC1867 compatible multipart request.
org.apache.commons.fileupload.FileUploadBase$FileSizeLimitExceededException: The field arquivo exceeds its maximum permitted size of 3145728 bytes.
    at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl$FileItemStreamImpl$1.raiseError(FileUploadBase.java:787)
    at org.apache.commons.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:78)
    at org.apache.commons.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:137)
    at java.io.FilterInputStream.read(FilterInputStream.java:107)
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:100)
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:70)
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:347)
    at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115)
    at br.com.caelum.vraptor.observer.upload.CommonsUploadMultipartObserver.upload(CommonsUploadMultipartObserver.java:81)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
    at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
    at br.com.caelum.vraptor.observer.RequestHandlerObserver.handle(RequestHandlerObserver.java:92)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
    at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
    at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:123)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    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:141)
    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:522)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
    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)
02:33:08,221 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.pucminas.sistrevi.controller.MateriaisComplementaresController
02:33:08,221 DEBUG [CDIBasedContainer   ] beans for class br.pucminas.sistrevi.controller.MateriaisComplementaresController is [Managed Bean [class br.pucminas.sistrevi.controller.MateriaisComplementaresController] with qualifiers [@Any @Default]]
02:33:08,221 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException as [materialComplementar, arquivo]
02:33:08,222 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException as [materialComplementar, arquivo]
02:33:08,222 DEBUG [IogiParametersProvider] IogiParametersProvider is up
02:33:08,222 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException as [materialComplementar, arquivo]
02:33:08,222 DEBUG [IogiParametersProvider] getParametersFor() called with parameters Parameters() and targets [Target(name=materialComplementar, type=class br.pucminas.sistrevi.model.MaterialComplementar), Target(name=arquivo, type=interface br.com.caelum.vraptor.observer.upload.UploadedFile)].
02:33:08,223 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public br.pucminas.sistrevi.model.MaterialComplementar(java.lang.String,byte[],java.lang.String,java.lang.String) as [descricao, arquivo, contentType, nomeArquivo]
02:33:08,223 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public br.pucminas.sistrevi.model.MaterialComplementar() as []
02:33:08,223 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class java.lang.String
02:33:08,223 DEBUG [CDIBasedContainer   ] beans for class java.lang.String is []
02:33:08,224 DEBUG [DefaultConverters   ] found converter br.com.caelum.vraptor.observer.upload.UploadedFileConverter to br.com.caelum.vraptor.observer.upload.UploadedFile
02:33:08,224 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.com.caelum.vraptor.observer.upload.UploadedFileConverter
02:33:08,224 DEBUG [CDIBasedContainer   ] beans for class br.com.caelum.vraptor.observer.upload.UploadedFileConverter is [Managed Bean [class br.com.caelum.vraptor.observer.upload.UploadedFileConverter] with qualifiers [@Any @Default]]
02:33:08,224 DEBUG [ParametersInstantiator] Conversion errors: []
02:33:08,224 DEBUG [ParametersInstantiator] Parameter values for [DefaultControllerMethod: public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException] are [br.pucminas.sistrevi.model.MaterialComplementar@5c1a30a5, null]
02:33:08,224 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.pucminas.sistrevi.access.AutenticacaoInterceptor
02:33:08,224 DEBUG [CDIBasedContainer   ] beans for class br.pucminas.sistrevi.access.AutenticacaoInterceptor is [Managed Bean [class br.pucminas.sistrevi.access.AutenticacaoInterceptor] with qualifiers [@Any @Default]]
02:33:08,224 DEBUG [AspectStyleInterceptorHandler] Invoking interceptor AutenticacaoInterceptor$Proxy$_$$_WeldClientProxy
02:33:08,225 DEBUG [CDIBasedContainer   ] asking cdi to get instance for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack
02:33:08,225 DEBUG [CDIBasedContainer   ] beans for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack is [Managed Bean [class br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack] with qualifiers [@Any @Default]]
02:33:08,225 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor
02:33:08,225 DEBUG [CDIBasedContainer   ] beans for class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor is [Managed Bean [class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor] with qualifiers [@Any @Default]]
02:33:08,225 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor$Proxy$_$$_WeldClientProxy
02:33:08,225 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.com.caelum.vraptor.jpa.JPATransactionInterceptor
02:33:08,225 DEBUG [CDIBasedContainer   ] beans for class br.com.caelum.vraptor.jpa.JPATransactionInterceptor is [Managed Bean [class br.com.caelum.vraptor.jpa.JPATransactionInterceptor] with qualifiers [@Any @Default]]
02:33:08,225 DEBUG [AspectStyleInterceptorHandler] Invoking interceptor JPATransactionInterceptor$Proxy$_$$_WeldClientProxy
02:33:08,225 DEBUG [CDIBasedContainer   ] asking cdi to get instance for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack
02:33:08,226 DEBUG [CDIBasedContainer   ] beans for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack is [Managed Bean [class br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack] with qualifiers [@Any @Default]]
02:33:08,226 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.com.caelum.vraptor.interceptor.FlashInterceptor
02:33:08,226 DEBUG [CDIBasedContainer   ] beans for class br.com.caelum.vraptor.interceptor.FlashInterceptor is [Managed Bean [class br.com.caelum.vraptor.interceptor.FlashInterceptor] with qualifiers [@Any @Default]]
02:33:08,226 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor$Proxy$_$$_WeldClientProxy
02:33:08,227 DEBUG [ExecuteMethod       ] Invoking public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException
02:33:08,227 DEBUG [DefaultResult       ] including attribute errors: [I18nMessage{category=upload, message=file.upload.exception, severity=ERROR, parameters=[Ljava.lang.Object;@32007ef}]
02:33:08,227 DEBUG [DefaultResult       ] including attribute materialComplementar: br.pucminas.sistrevi.model.MaterialComplementar@5c1a30a5
02:33:08,227 DEBUG [DefaultResult       ] including attribute arquivo: null
02:33:08,228 DEBUG [DefaultValidator    ] there are errors on result: [I18nMessage{category=upload, message=file.upload.exception, severity=ERROR, parameters=[Ljava.lang.Object;@32007ef}]
02:33:08,228 DEBUG [CDIBasedContainer   ] asking cdi to get instance for interface br.com.caelum.vraptor.view.LogicResult
02:33:08,228 DEBUG [CDIBasedContainer   ] beans for interface br.com.caelum.vraptor.view.LogicResult is [Managed Bean [class br.com.caelum.vraptor.view.DefaultLogicResult] with qualifiers [@Any @Default]]
02:33:08,228 DEBUG [JavassistProxifier  ] Class br.com.caelum.vraptor.view.LogicResult is proxy: false
02:33:08,228 DEBUG [JavassistProxifier  ] a proxy for interface br.com.caelum.vraptor.view.LogicResult was created as class br.com.caelum.vraptor.view.LogicResult_$$_jvstde6_8
02:33:08,228 DEBUG [DefaultLogicResult  ] redirecting to class MateriaisComplementaresController
02:33:08,228 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController is proxy: false
02:33:08,228 DEBUG [JavassistProxifier  ] a proxy for class br.pucminas.sistrevi.controller.MateriaisComplementaresController was created as class br.pucminas.sistrevi.controller.MateriaisComplementaresController_$$_jvstde6_9
02:33:08,228 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController is proxy: false
02:33:08,228 DEBUG [JavassistProxifier  ] a proxy for class br.pucminas.sistrevi.controller.MateriaisComplementaresController was created as class br.pucminas.sistrevi.controller.MateriaisComplementaresController_$$_jvstde6_9
02:33:08,228 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController is proxy: false
02:33:08,228 DEBUG [DefaultRouter       ] Selected route for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.form() is [FixedMethodStrategy: /materiaisComplementares/form                                     form                                                                   ALL]
02:33:08,228 DEBUG [DefaultRouter       ] Returning URL /materiaisComplementares/form for [FixedMethodStrategy: /materiaisComplementares/form                                     form                                                                   ALL]
02:33:08,228 DEBUG [DefaultLogicResult  ] redirecting to /sistrevi/materiaisComplementares/form
02:33:08,229 DEBUG [DefaultInterceptorStack] All registered interceptors have been called. End of VRaptor Request Execution.
02:33:08,229 DEBUG [ForwardToDefaultView] Request already dispatched and commited somewhere else, not forwarding.
02:33:08,229 DEBUG [VRaptor             ] VRaptor ended the request
02:33:08,234 DEBUG [DefaultControllerTranslator] trying to access /materiaisComplementares/form
02:33:08,234 DEBUG [DefaultControllerTranslator] found controller [DefaultControllerMethod: public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.form()]
02:33:08,234 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.pucminas.sistrevi.controller.MateriaisComplementaresController
02:33:08,234 DEBUG [CDIBasedContainer   ] beans for class br.pucminas.sistrevi.controller.MateriaisComplementaresController is [Managed Bean [class br.pucminas.sistrevi.controller.MateriaisComplementaresController] with qualifiers [@Any @Default]]
02:33:08,235 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.form() as []
02:33:08,236 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.pucminas.sistrevi.access.AutenticacaoInterceptor
02:33:08,236 DEBUG [CDIBasedContainer   ] beans for class br.pucminas.sistrevi.access.AutenticacaoInterceptor is [Managed Bean [class br.pucminas.sistrevi.access.AutenticacaoInterceptor] with qualifiers [@Any @Default]]
02:33:08,236 DEBUG [AspectStyleInterceptorHandler] Invoking interceptor AutenticacaoInterceptor$Proxy$_$$_WeldClientProxy
02:33:08,236 DEBUG [CDIBasedContainer   ] asking cdi to get instance for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack
02:33:08,236 DEBUG [CDIBasedContainer   ] beans for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack is [Managed Bean [class br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack] with qualifiers [@Any @Default]]
02:33:08,236 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor
02:33:08,236 DEBUG [CDIBasedContainer   ] beans for class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor is [Managed Bean [class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor] with qualifiers [@Any @Default]]
02:33:08,236 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor$Proxy$_$$_WeldClientProxy
02:33:08,236 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.com.caelum.vraptor.jpa.JPATransactionInterceptor
02:33:08,236 DEBUG [CDIBasedContainer   ] beans for class br.com.caelum.vraptor.jpa.JPATransactionInterceptor is [Managed Bean [class br.com.caelum.vraptor.jpa.JPATransactionInterceptor] with qualifiers [@Any @Default]]
02:33:08,236 DEBUG [AspectStyleInterceptorHandler] Invoking interceptor JPATransactionInterceptor$Proxy$_$$_WeldClientProxy
02:33:08,236 DEBUG [CDIBasedContainer   ] asking cdi to get instance for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack
02:33:08,236 DEBUG [CDIBasedContainer   ] beans for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack is [Managed Bean [class br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack] with qualifiers [@Any @Default]]
02:33:08,237 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.com.caelum.vraptor.interceptor.FlashInterceptor
02:33:08,237 DEBUG [CDIBasedContainer   ] beans for class br.com.caelum.vraptor.interceptor.FlashInterceptor is [Managed Bean [class br.com.caelum.vraptor.interceptor.FlashInterceptor] with qualifiers [@Any @Default]]
02:33:08,237 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor$Proxy$_$$_WeldClientProxy
02:33:08,237 DEBUG [DefaultResult       ] including attribute materialComplementar: br.pucminas.sistrevi.model.MaterialComplementar@5c1a30a5
02:33:08,237 DEBUG [DefaultResult       ] including attribute arquivo: null
02:33:08,237 DEBUG [DefaultResult       ] including attribute vmessages: br.com.caelum.vraptor.validator.Messages@4d4d7c9d
02:33:08,237 DEBUG [DefaultResult       ] including attribute errors: [I18nMessage{category=upload, message=file.upload.exception, severity=ERROR, parameters=[Ljava.lang.Object;@32007ef}]
02:33:08,238 DEBUG [MethodValidator     ] method [DefaultControllerMethod: public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.form()] has no parameters, skipping
02:33:08,238 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.form() as []
02:33:08,238 DEBUG [ExecuteMethod       ] Invoking public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.form()
inicio do form
Hibernate: 
    select
        curso0_.id as id1_0_,
        curso0_.titulo as titulo2_0_ 
    from
        cursos curso0_
02:33:08,240 DEBUG [DefaultResult       ] including attribute cursos: [br.pucminas.sistrevi.model.Curso@360b6f21, br.pucminas.sistrevi.model.Curso@554175b3, br.pucminas.sistrevi.model.Curso@5266053a, br.pucminas.sistrevi.model.Curso@595ecd34, br.pucminas.sistrevi.model.Curso@3441c359]
02:33:08,241 DEBUG [DefaultResult       ] including attribute vmessages: br.com.caelum.vraptor.validator.Messages@4d4d7c9d
02:33:08,241 DEBUG [DefaultInterceptorStack] All registered interceptors have been called. End of VRaptor Request Execution.
02:33:08,242 DEBUG [ForwardToDefaultView] forwarding to the dafault page for this logic
02:33:08,242 DEBUG [CDIBasedContainer   ] asking cdi to get instance for interface br.com.caelum.vraptor.view.PageResult
02:33:08,242 DEBUG [CDIBasedContainer   ] beans for interface br.com.caelum.vraptor.view.PageResult is [Managed Bean [class br.com.caelum.vraptor.view.DefaultPageResult] with qualifiers [@Any @Default]]
02:33:08,243 DEBUG [DefaultPathResolver ] Resolving path for [DefaultControllerMethod: public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.form()]
02:33:08,243 DEBUG [DefaultPathResolver ] Returning path /WEB-INF/jsp/materiaisComplementares/form.jsp for [DefaultControllerMethod: public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.form()]
02:33:08,243 DEBUG [DefaultPageResult   ] forwarding to /WEB-INF/jsp/materiaisComplementares/form.jsp
02:33:08,243 DEBUG [DefaultStaticContentHandler] Deferring request to container: /sistrevi/WEB-INF/jsp/materiaisComplementares/form.jsp 
02:33:08,245 DEBUG [LinkToHandler       ] getting key {ControllerClass br.pucminas.sistrevi.controller.IndexController}
02:33:08,245 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.IndexController$linkTo$sistrevi is proxy: false
02:33:08,245 DEBUG [JavassistProxifier  ] a proxy for interface br.pucminas.sistrevi.controller.IndexController$linkTo$sistrevi was created as class br.pucminas.sistrevi.controller.IndexController$linkTo$sistrevi_$$_jvstde6_4
02:33:08,245 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.IndexController is proxy: false
02:33:08,245 DEBUG [DefaultRouter       ] Selected route for public void br.pucminas.sistrevi.controller.IndexController.index() is [FixedMethodStrategy: /                                                                 index                                                                  ALL]
02:33:08,245 DEBUG [DefaultRouter       ] Returning URL / for [FixedMethodStrategy: /                                                                 index                                                                  ALL]
02:33:08,245 DEBUG [LinkToHandler       ] getting key {ControllerClass br.pucminas.sistrevi.controller.UsuariosController}
02:33:08,245 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.UsuariosController$linkTo$sistrevi is proxy: false
02:33:08,245 DEBUG [JavassistProxifier  ] a proxy for interface br.pucminas.sistrevi.controller.UsuariosController$linkTo$sistrevi was created as class br.pucminas.sistrevi.controller.UsuariosController$linkTo$sistrevi_$$_jvstde6_5
02:33:08,245 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.UsuariosController is proxy: false
02:33:08,245 DEBUG [DefaultRouter       ] Selected route for public void br.pucminas.sistrevi.controller.UsuariosController.lista() is [FixedMethodStrategy: /usuarios/lista                                                   lista                                                                  ALL]
02:33:08,245 DEBUG [DefaultRouter       ] Returning URL /usuarios/lista for [FixedMethodStrategy: /usuarios/lista                                                   lista                                                                  ALL]
02:33:08,245 DEBUG [LinkToHandler       ] getting key {ControllerClass br.pucminas.sistrevi.controller.MateriaisComplementaresController}
02:33:08,245 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController$linkTo$sistrevi is proxy: false
02:33:08,245 DEBUG [JavassistProxifier  ] a proxy for interface br.pucminas.sistrevi.controller.MateriaisComplementaresController$linkTo$sistrevi was created as class br.pucminas.sistrevi.controller.MateriaisComplementaresController$linkTo$sistrevi_$$_jvstde6_6
02:33:08,246 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController is proxy: false
02:33:08,246 DEBUG [DefaultRouter       ] Selected route for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.form() is [FixedMethodStrategy: /materiaisComplementares/form                                     form                                                                   ALL]
02:33:08,246 DEBUG [DefaultRouter       ] Returning URL /materiaisComplementares/form for [FixedMethodStrategy: /materiaisComplementares/form                                     form                                                                   ALL]
02:33:08,246 DEBUG [LinkToHandler       ] getting key {ControllerClass br.pucminas.sistrevi.controller.LoginController}
02:33:08,246 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.LoginController$linkTo$sistrevi is proxy: false
02:33:08,246 DEBUG [JavassistProxifier  ] a proxy for interface br.pucminas.sistrevi.controller.LoginController$linkTo$sistrevi was created as class br.pucminas.sistrevi.controller.LoginController$linkTo$sistrevi_$$_jvstde6_7
02:33:08,246 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.LoginController is proxy: false
02:33:08,246 DEBUG [DefaultRouter       ] Selected route for public void br.pucminas.sistrevi.controller.LoginController.desloga() is [FixedMethodStrategy: /login/desloga                                                    desloga                                                                ALL]
02:33:08,246 DEBUG [DefaultRouter       ] Returning URL /login/desloga for [FixedMethodStrategy: /login/desloga                                                    desloga                                                                ALL]
02:33:08,246 DEBUG [LinkToHandler       ] getting key {ControllerClass br.pucminas.sistrevi.controller.MateriaisComplementaresController}
02:33:08,246 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController$linkTo$sistrevi is proxy: false
02:33:08,246 DEBUG [JavassistProxifier  ] a proxy for interface br.pucminas.sistrevi.controller.MateriaisComplementaresController$linkTo$sistrevi was created as class br.pucminas.sistrevi.controller.MateriaisComplementaresController$linkTo$sistrevi_$$_jvstde6_6
02:33:08,247 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController is proxy: false
02:33:08,247 DEBUG [DefaultRouter       ] Selected route for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.filtraPorCurso(br.pucminas.sistrevi.model.MaterialComplementar) is [FixedMethodStrategy: /materiaisComplementares/filtraPorCurso                           filtraPorCurso                                                         ALL]
02:33:08,247 DEBUG [DefaultRouter       ] Returning URL /materiaisComplementares/filtraPorCurso for [FixedMethodStrategy: /materiaisComplementares/filtraPorCurso                           filtraPorCurso                                                         ALL]
02:33:08,247 DEBUG [LinkToHandler       ] getting key {ControllerClass br.pucminas.sistrevi.controller.MateriaisComplementaresController}
02:33:08,247 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController$linkTo$sistrevi is proxy: false
02:33:08,248 DEBUG [JavassistProxifier  ] a proxy for interface br.pucminas.sistrevi.controller.MateriaisComplementaresController$linkTo$sistrevi was created as class br.pucminas.sistrevi.controller.MateriaisComplementaresController$linkTo$sistrevi_$$_jvstde6_6
02:33:08,248 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController is proxy: false
02:33:08,248 DEBUG [DefaultRouter       ] Selected route for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException is [FixedMethodStrategy: /materiaisComplementares/adiciona                                 adiciona                                                               ALL]
02:33:08,248 DEBUG [DefaultRouter       ] Returning URL /materiaisComplementares/adiciona for [FixedMethodStrategy: /materiaisComplementares/adiciona                                 adiciona                                                               ALL]
02:33:08,249 DEBUG [VRaptor             ] VRaptor ended the request

Senário 2 (onde o erro não é tratado):

02:36:04,558 DEBUG [DefaultControllerTranslator] trying to access /materiaisComplementares/adiciona
02:36:04,559 DEBUG [DefaultControllerTranslator] found controller [DefaultControllerMethod: public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException]
02:36:04,559  INFO [CommonsUploadMultipartObserver] Request contains multipart data. Try to parse with commons-upload.
02:36:04,559 DEBUG [CommonsUploadMultipartObserver] Using repository /tmp for file upload
02:36:04,559 DEBUG [CommonsUploadMultipartObserver] Setting file sizes: total=41943040, file=3145728
02:36:04,593 DEBUG [DefaultResult       ] including attribute vmessages: br.com.caelum.vraptor.validator.Messages@28feddbf
02:36:04,593  WARN [CommonsUploadMultipartObserver] There was some problem parsing this multipart request, or someone is not sending a RFC1867 compatible multipart request.
org.apache.commons.fileupload.FileUploadBase$FileSizeLimitExceededException: The field arquivo exceeds its maximum permitted size of 3145728 bytes.
    at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl$FileItemStreamImpl$1.raiseError(FileUploadBase.java:787)
    at org.apache.commons.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:78)
    at org.apache.commons.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:137)
    at java.io.FilterInputStream.read(FilterInputStream.java:107)
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:100)
    at org.apache.commons.fileupload.util.Streams.copy(Streams.java:70)
    at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:347)
    at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115)
    at br.com.caelum.vraptor.observer.upload.CommonsUploadMultipartObserver.upload(CommonsUploadMultipartObserver.java:81)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
    at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
    at br.com.caelum.vraptor.observer.RequestHandlerObserver.handle(RequestHandlerObserver.java:92)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
    at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
    at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
    at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
    at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:123)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    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:141)
    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:522)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
    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)
02:36:04,594 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.pucminas.sistrevi.controller.MateriaisComplementaresController
02:36:04,594 DEBUG [CDIBasedContainer   ] beans for class br.pucminas.sistrevi.controller.MateriaisComplementaresController is [Managed Bean [class br.pucminas.sistrevi.controller.MateriaisComplementaresController] with qualifiers [@Any @Default]]
02:36:04,595 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException as [materialComplementar, arquivo]
02:36:04,595 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException as [materialComplementar, arquivo]
02:36:04,596 DEBUG [IogiParametersProvider] IogiParametersProvider is up
02:36:04,596 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException as [materialComplementar, arquivo]
02:36:04,596 DEBUG [IogiParametersProvider] getParametersFor() called with parameters Parameters() and targets [Target(name=materialComplementar, type=class br.pucminas.sistrevi.model.MaterialComplementar), Target(name=arquivo, type=interface br.com.caelum.vraptor.observer.upload.UploadedFile)].
02:36:04,596 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public br.pucminas.sistrevi.model.MaterialComplementar(java.lang.String,byte[],java.lang.String,java.lang.String) as [descricao, arquivo, contentType, nomeArquivo]
02:36:04,597 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for public br.pucminas.sistrevi.model.MaterialComplementar() as []
02:36:04,597 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class java.lang.String
02:36:04,597 DEBUG [CDIBasedContainer   ] beans for class java.lang.String is []
02:36:04,597 DEBUG [DefaultConverters   ] found converter br.com.caelum.vraptor.observer.upload.UploadedFileConverter to br.com.caelum.vraptor.observer.upload.UploadedFile
02:36:04,597 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.com.caelum.vraptor.observer.upload.UploadedFileConverter
02:36:04,597 DEBUG [CDIBasedContainer   ] beans for class br.com.caelum.vraptor.observer.upload.UploadedFileConverter is [Managed Bean [class br.com.caelum.vraptor.observer.upload.UploadedFileConverter] with qualifiers [@Any @Default]]
02:36:04,597 DEBUG [ParametersInstantiator] Conversion errors: []
02:36:04,597 DEBUG [ParametersInstantiator] Parameter values for [DefaultControllerMethod: public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException] are [br.pucminas.sistrevi.model.MaterialComplementar@8cbba52, null]
02:36:04,598 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.pucminas.sistrevi.access.AutenticacaoInterceptor
02:36:04,598 DEBUG [CDIBasedContainer   ] beans for class br.pucminas.sistrevi.access.AutenticacaoInterceptor is [Managed Bean [class br.pucminas.sistrevi.access.AutenticacaoInterceptor] with qualifiers [@Any @Default]]
02:36:04,598 DEBUG [AspectStyleInterceptorHandler] Invoking interceptor AutenticacaoInterceptor$Proxy$_$$_WeldClientProxy
02:36:04,598 DEBUG [CDIBasedContainer   ] asking cdi to get instance for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack
02:36:04,598 DEBUG [CDIBasedContainer   ] beans for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack is [Managed Bean [class br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack] with qualifiers [@Any @Default]]
02:36:04,598 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor
02:36:04,598 DEBUG [CDIBasedContainer   ] beans for class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor is [Managed Bean [class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor] with qualifiers [@Any @Default]]
02:36:04,599 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor$Proxy$_$$_WeldClientProxy
02:36:04,599 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.com.caelum.vraptor.jpa.JPATransactionInterceptor
02:36:04,599 DEBUG [CDIBasedContainer   ] beans for class br.com.caelum.vraptor.jpa.JPATransactionInterceptor is [Managed Bean [class br.com.caelum.vraptor.jpa.JPATransactionInterceptor] with qualifiers [@Any @Default]]
02:36:04,599 DEBUG [AspectStyleInterceptorHandler] Invoking interceptor JPATransactionInterceptor$Proxy$_$$_WeldClientProxy
02:36:04,599 DEBUG [CDIBasedContainer   ] asking cdi to get instance for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack
02:36:04,599 DEBUG [CDIBasedContainer   ] beans for interface br.com.caelum.vraptor.interceptor.SimpleInterceptorStack is [Managed Bean [class br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack] with qualifiers [@Any @Default]]
02:36:04,600 DEBUG [CDIBasedContainer   ] asking cdi to get instance for class br.com.caelum.vraptor.interceptor.FlashInterceptor
02:36:04,600 DEBUG [CDIBasedContainer   ] beans for class br.com.caelum.vraptor.interceptor.FlashInterceptor is [Managed Bean [class br.com.caelum.vraptor.interceptor.FlashInterceptor] with qualifiers [@Any @Default]]
02:36:04,600 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor$Proxy$_$$_WeldClientProxy
02:36:04,600 DEBUG [ExecuteMethod       ] Invoking public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.adiciona(br.pucminas.sistrevi.model.MaterialComplementar,br.com.caelum.vraptor.observer.upload.UploadedFile) throws java.io.IOException
02:36:04,601 DEBUG [DefaultResult       ] including attribute errors: [I18nMessage{category=upload, message=file.upload.exception, severity=ERROR, parameters=[Ljava.lang.Object;@67510dc1}]
02:36:04,601 DEBUG [DefaultResult       ] including attribute materialComplementar: br.pucminas.sistrevi.model.MaterialComplementar@8cbba52
02:36:04,601 DEBUG [DefaultResult       ] including attribute arquivo: null
02:36:04,601 DEBUG [DefaultValidator    ] there are errors on result: [I18nMessage{category=upload, message=file.upload.exception, severity=ERROR, parameters=[Ljava.lang.Object;@67510dc1}]
02:36:04,601 DEBUG [CDIBasedContainer   ] asking cdi to get instance for interface br.com.caelum.vraptor.view.LogicResult
02:36:04,601 DEBUG [CDIBasedContainer   ] beans for interface br.com.caelum.vraptor.view.LogicResult is [Managed Bean [class br.com.caelum.vraptor.view.DefaultLogicResult] with qualifiers [@Any @Default]]
02:36:04,601 DEBUG [JavassistProxifier  ] Class br.com.caelum.vraptor.view.LogicResult is proxy: false
02:36:04,601 DEBUG [JavassistProxifier  ] a proxy for interface br.com.caelum.vraptor.view.LogicResult was created as class br.com.caelum.vraptor.view.LogicResult_$$_jvstde6_8
02:36:04,602 DEBUG [DefaultLogicResult  ] redirecting to class MateriaisComplementaresController
02:36:04,602 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController is proxy: false
02:36:04,602 DEBUG [JavassistProxifier  ] a proxy for class br.pucminas.sistrevi.controller.MateriaisComplementaresController was created as class br.pucminas.sistrevi.controller.MateriaisComplementaresController_$$_jvstde6_9
02:36:04,602 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController is proxy: false
02:36:04,602 DEBUG [JavassistProxifier  ] a proxy for class br.pucminas.sistrevi.controller.MateriaisComplementaresController was created as class br.pucminas.sistrevi.controller.MateriaisComplementaresController_$$_jvstde6_9
02:36:04,602 DEBUG [JavassistProxifier  ] Class br.pucminas.sistrevi.controller.MateriaisComplementaresController is proxy: false
02:36:04,602 DEBUG [DefaultRouter       ] Selected route for public void br.pucminas.sistrevi.controller.MateriaisComplementaresController.form() is [FixedMethodStrategy: /materiaisComplementares/form                                     form                                                                   ALL]
02:36:04,602 DEBUG [DefaultRouter       ] Returning URL /materiaisComplementares/form for [FixedMethodStrategy: /materiaisComplementares/form                                     form                                                                   ALL]
02:36:04,602 DEBUG [DefaultLogicResult  ] redirecting to /sistrevi/materiaisComplementares/form
02:36:04,603 DEBUG [DefaultInterceptorStack] All registered interceptors have been called. End of VRaptor Request Execution.
02:36:04,603 DEBUG [ForwardToDefaultView] Request already dispatched and commited somewhere else, not forwarding.
02:36:04,603 DEBUG [VRaptor             ] VRaptor ended the request

Comparando os dois logs percebi no segundo não há uma parte que consta no primeiro. Me refiro ao trecho que começa a partir da seguinte linha:

02:33:08,234 DEBUG [DefaultControllerTranslator] trying to access /materiaisComplementares/form

Obrigado

ah, agora tudo faz sentido!

O Chrome: ERR_CONNECTION_RESET acontece pq o seu servidor está abortando o upload.

O tomcat tem um atributo chamado "maxSwallowSize" com o valor default bem pequeno:

The maximum number of request body bytes (excluding transfer encoding overhead) that will be swallowed by Tomcat for an aborted upload. An aborted upload is when Tomcat knows that the request body is going to be ignored but the client still sends it. If Tomcat does not swallow the body the client is unlikely to see the response. If not specified the default of 2097152 (2 megabytes) will be used. A value of less than zero indicates that no limit should be enforced.

Experimenta configurar um número maior e ver se funciona?

solução!

ps: eu nao consigo testar agora, mas acho que basta você colocar -1 (unlimited) no conf/server.xml de dentro do seu tomcat:

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" 
    maxSwallowSize="-1"/>

experimenta e nos diz se funcionou? Não esqueça de dar um clean em tudo antes de rodar (;

Cara, queria te dizer que funcionou, mas continua o mesmo erro.

ps: não esqueci do clean.

Turini, me perdoe o descuido no teste - devo ter feito algo errado na primeira tentativa. Tua sugestão foi a solução.

Como o fórum fica pra posteridade e possivelmente outros terão o mesmo problema, acho legal compartilhar uma questão sobre a configuração do Tomcat - nesse caso, para quem usa Eclipse. Por default a configuração dessa IDE diz que as configurações originais do Tomcat não serão alteradas, que será utilizada uma config específica para o workspace. Nesse caso, quanto a solução apresentada pelo Turini, seria necessário fazer o ajuste no server.xml que está nesse local. Um caminho aproximado ao que segue:

/<caminho>/workspace/Servers/<Tomcat v...>server.xml

Oi Rodrigo

Mil perdões pela demora, só cheguei na sua mensagem agora. Que bom que funcionou!

Obrigado com compartilhar essa informação adicional, sem dúvida será útil para mais alunos.

Um abraço e bons estudos