Vraptor + upload (Resolvido)

12 respostas
Lagaffe

Oi Pessoal,

Estou usando o upload do vraptor explicado na documentação.
Quando informo um arquivo no form tudo ocorre bem como previsto.
Porém quando deixo a informação em branco, ou seja não tenho arquivo para fazer upload, o que pode ocorrer dependendo do caso, a validação é acionada. Me parece que o VRaptor adiciona uma mensagem no objeto Validator: “Invalid upload”.
Existe uma forma da validação aceitar o UploadedFile nulo? Ou estou fazendo algo errado?

Obrigado.

12 Respostas

Lucas_Cavalcanti

se vc não selecionar nenhum arquivo no input file deveria ir como null…

Lagaffe

Isso mesmo, ele vem como nulo e aparentemente o VRaptor adiciona uma mensagem no objeto Validator: “Invalid upload”.

Só que no meu caso não poderia adicionar essa mensagem, em alguns casos eu não anexo imagem.

Lucas_Cavalcanti

ele só adiciona essa mensagem se vc manda um arquivo muito grande…

habilita o log do vraptor e ve se não dá outra mensagem mais útil…

Lagaffe
00:56:26,110 DEBUG VRaptor:81 - VRaptor received a new request

00:56:26,110 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor ResourceLookupInterceptor

00:56:26,110 DEBUG DefaultResourceTranslator:51 - trying to access /imagem/gravar

00:56:26,111 DEBUG DefaultResourceTranslator:61 - found resource [DefaultResourceMethod: ImagemController.gravarImagemController.gravar(Imagem, UploadedFile)]

00:56:26,112 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor HibernateTransactionInterceptor

00:56:26,115 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor FlashInterceptor

00:56:26,116 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor CommonsUploadMultipartInterceptor

00:56:26,116  INFO CommonsUploadMultipartInterceptor:93 - Request contains multipart data. Try to parse with commons-upload.

00:56:26,175 DEBUG CommonsUploadMultipartInterceptor:175 - Using repository /var/folders/QW/QWzSirLAGCiCI8EsqMbCgU+++TI/-Tmp- for file upload

00:56:26,205 DEBUG CommonsUploadMultipartInterceptor:102 - Found 9 attributes in the multipart form submission. Parsing them.

00:56:26,239 DEBUG CommonsUploadMultipartInterceptor:119 - A file field was empty: arquivoImagem

00:56:26,239 DEBUG CommonsUploadMultipartInterceptor:111 - imagem.mensagem is a field

00:56:26,241 DEBUG CommonsUploadMultipartInterceptor:111 - <a href="http://imagem.id">imagem.id</a> is a field

00:56:26,241 DEBUG CommonsUploadMultipartInterceptor:111 - imagem.endereco is a field

00:56:26,241 DEBUG CommonsUploadMultipartInterceptor:111 - <a href="http://imagem.pagina.id">imagem.pagina.id</a> is a field

00:56:26,241 DEBUG CommonsUploadMultipartInterceptor:111 - <a href="http://imagem.cliente.id">imagem.cliente.id</a> is a field

00:56:26,242 DEBUG CommonsUploadMultipartInterceptor:111 - imagem.dataInclusao is a field

00:56:26,242 DEBUG CommonsUploadMultipartInterceptor:111 - imagem.dataAlteracao is a field

00:56:26,242 DEBUG CommonsUploadMultipartInterceptor:111 - imagem.status is a field

00:56:26,262 DEBUG VRaptorRequest:86 - Setting imagem.mensagem with [Lagaffe]

00:56:26,263 DEBUG VRaptorRequest:86 - Setting <a href="http://imagem.id">imagem.id</a> with []

00:56:26,263 DEBUG VRaptorRequest:86 - Setting imagem.endereco with []

00:56:26,263 DEBUG VRaptorRequest:86 - Setting <a href="http://imagem.pagina.id">imagem.pagina.id</a> with [1]

00:56:26,263 DEBUG VRaptorRequest:86 - Setting <a href="http://imagem.cliente.id">imagem.cliente.id</a> with [1]

00:56:26,264 DEBUG VRaptorRequest:86 - Setting imagem.dataInclusao with [21/08/2012]

00:56:26,264 DEBUG VRaptorRequest:86 - Setting imagem.dataAlteracao with []

00:56:26,264 DEBUG VRaptorRequest:86 - Setting imagem.status with [ESPERA]

00:56:26,265 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor ExceptionHandlerInterceptor

00:56:26,265 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor InstantiateInterceptor

00:56:26,265 DEBUG IogiParametersProvider:56 - IogiParametersProvider is up

00:56:26,266 DEBUG LazyInterceptorHandler:58 - Invoking interceptor ParametersInstantiatorInterceptor

00:56:26,267 DEBUG ParanamerNameProvider:51 - Found parameter names with paranamer for ImagemController.gravar(Imagem, UploadedFile) as [imagem, arquivoImagem]

00:56:26,268 DEBUG IogiParametersProvider:69 - getParametersFor() called with parameters Parameters(Parameter(imagem.dataAlteracao -> ), Parameter(imagem.dataInclusao -> 21/08/2012), Parameter(<a href="http://imagem.id">imagem.id</a> -> ), Parameter(<a href="http://imagem.pagina.id">imagem.pagina.id</a> -> 1), Parameter(imagem.endereco -> ), Parameter(imagem.mensagem -> Lagaffe), Parameter(imagem.status -> ESPERA), Parameter(<a href="http://imagem.cliente.id">imagem.cliente.id</a> -> 1)) and targets [Target(name=imagem, type=class br.com.pagina.modelo.Imagem), Target(name=arquivoImagem, type=interface br.com.caelum.vraptor.interceptor.multipart.UploadedFile)].

00:56:26,269 DEBUG ParanamerNameProvider:51 - Found parameter names with paranamer for Imagem() as []

00:56:26,270 DEBUG ParanamerNameProvider:51 - Found parameter names with paranamer for Cliente() as []

00:56:26,276 DEBUG ParanamerNameProvider:51 - Found parameter names with paranamer for Pagina() as []

00:56:26,282  WARN UploadedFileConverter:51 - There was an error when uploading the file {}. Please verify if commons-fileupload jars are in your classpath or you are using a Servlet 3 Container.

00:56:26,298 DEBUG ParametersInstantiatorInterceptor:88 - There are conversion errors: [ValidationMessage{category=arquivoImagem, message=Invalid upload, parameters=null}]

00:56:26,298 DEBUG ParametersInstantiatorInterceptor:90 - Parameter values for [DefaultResourceMethod: ImagemController.gravarImagemController.gravar(Imagem, UploadedFile)] are [br.com.pagina.modelo.Imagem@38af98ac, null]

00:56:26,299 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor ExecuteMethodInterceptor

00:56:26,299 DEBUG ExecuteMethodInterceptor:60 - Invoking ImagemController.gravar(Imagem, UploadedFile)

00:56:26,330 DEBUG JSR303Validator:69 - there are 0 violations at bean br.com.pagina.modelo.Imagem@38af98ac.

00:56:26,331 DEBUG ParanamerNameProvider:51 - Found parameter names with paranamer for ImagemController.gravar(Imagem, UploadedFile) as [imagem, arquivoImagem]

00:56:26,342 DEBUG CglibProxifier:74 - a proxy for interface br.com.caelum.vraptor.view.LogicResult is created as class br.com.caelum.vraptor.view.LogicResult$$EnhancerByCGLIB$$9fe938e1

00:56:26,374 DEBUG CglibProxifier:74 - a proxy for class br.com.pagina.controller.ImagemController is created as class br.com.pagina.controller.ImagemController$$EnhancerByCGLIB$$25c236c

00:56:26,376 DEBUG CglibProxifier:74 - a proxy for class br.com.pagina.controller.ImagemController is created as class br.com.pagina.controller.ImagemController$$EnhancerByCGLIB$$25c236c

00:56:26,377 DEBUG DefaultLogicResult:88 - Executing ImagemController.formulario()

00:56:26,377 DEBUG DefaultLogicResult:100 - Forwarding to /WEB-INF/jsp/imagem/formulario.jsp

00:56:26,378 DEBUG DefaultStaticContentHandler:68 - Deferring request to container: /pagina/WEB-INF/jsp/imagem/formulario.jsp

00:56:26,389 DEBUG VRaptor:95 - VRaptor ended the request

00:56:26,696 DEBUG VRaptor:81 - VRaptor received a new request

00:56:26,696 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor ResourceLookupInterceptor

00:56:26,697 DEBUG VRaptor:95 - VRaptor ended the request

Obs.: o jar “commons-fileupload” está no projeto.

Lucas_Cavalcanti

Talvez esteja acontecendo um erro de conversão nos outros atributos… tenta apagar os outros inputs do form e deixar só o input file

Lagaffe

Dexei só o input file e o problema continua :frowning:

Log sem arquivo:

11:38:05,404 DEBUG VRaptor:81 - VRaptor received a new request
11:38:05,405 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor ResourceLookupInterceptor
11:38:05,405 DEBUG DefaultResourceTranslator:51 - trying to access /imagem/gravar
11:38:05,406 DEBUG DefaultResourceTranslator:61 - found resource [DefaultResourceMethod: ImagemController.gravarImagemController.gravar(Imagem, UploadedFile)]
11:38:05,406 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor HibernateTransactionInterceptor
11:38:05,412 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor ExceptionHandlerInterceptor
11:38:05,412 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor CommonsUploadMultipartInterceptor
11:38:05,412 INFO CommonsUploadMultipartInterceptor:93 - Request contains multipart data. Try to parse with commons-upload.
11:38:05,413 DEBUG CommonsUploadMultipartInterceptor:175 - Using repository /var/folders/QW/QWzSirLAGCiCI8EsqMbCgU+++TI/-Tmp- for file upload
11:38:05,413 DEBUG CommonsUploadMultipartInterceptor:102 - Found 1 attributes in the multipart form submission. Parsing them.
11:38:05,414 DEBUG CommonsUploadMultipartInterceptor:119 - A file field was empty: arquivoImagem
11:38:05,414 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor FlashInterceptor
11:38:05,414 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor InstantiateInterceptor
11:38:05,414 DEBUG IogiParametersProvider:56 - IogiParametersProvider is up
11:38:05,415 DEBUG LazyInterceptorHandler:58 - Invoking interceptor ParametersInstantiatorInterceptor
11:38:05,415 DEBUG ParanamerNameProvider:51 - Found parameter names with paranamer for ImagemController.gravar(Imagem, UploadedFile) as [imagem, arquivoImagem]
11:38:05,416 DEBUG IogiParametersProvider:69 - getParametersFor() called with parameters Parameters() and targets [Target(name=imagem, type=class br.com.pagina.modelo.Imagem), Target(name=arquivoImagem, type=interface br.com.caelum.vraptor.interceptor.multipart.UploadedFile)].
11:38:05,416 DEBUG ParanamerNameProvider:51 - Found parameter names with paranamer for Imagem() as []
11:38:05,417 WARN UploadedFileConverter:51 - There was an error when uploading the file {}. Please verify if commons-fileupload jars are in your classpath or you are using a Servlet 3 Container.
11:38:05,418 DEBUG ParametersInstantiatorInterceptor:88 - There are conversion errors: [ValidationMessage{category=arquivoImagem, message=Invalid upload, parameters=null}]
11:38:05,419 DEBUG ParametersInstantiatorInterceptor:90 - Parameter values for [DefaultResourceMethod: ImagemController.gravarImagemController.gravar(Imagem, UploadedFile)] are [br.com.pagina.modelo.Imagem@1786b2ca, null]
11:38:05,419 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor ExecuteMethodInterceptor
11:38:05,419 DEBUG ExecuteMethodInterceptor:60 - Invoking ImagemController.gravar(Imagem, UploadedFile)
11:38:05,420 DEBUG ParanamerNameProvider:51 - Found parameter names with paranamer for ImagemController.gravar(Imagem, UploadedFile) as [imagem, arquivoImagem]
11:38:05,421 DEBUG CglibProxifier:74 - a proxy for interface br.com.caelum.vraptor.view.LogicResult is created as class br.com.caelum.vraptor.view.LogicResult$$EnhancerByCGLIB$$4e58f788
11:38:05,422 DEBUG DefaultLogicResult:123 - redirecting to class ImagemController
11:38:05,422 DEBUG CglibProxifier:74 - a proxy for class br.com.pagina.controller.ImagemController is created as class br.com.pagina.controller.ImagemController$$EnhancerByCGLIB$$b0cbe213
11:38:05,423 DEBUG CglibProxifier:74 - a proxy for class br.com.pagina.controller.ImagemController is created as class br.com.pagina.controller.ImagemController$$EnhancerByCGLIB$$b0cbe213
11:38:05,424 DEBUG DefaultLogicResult:138 - redirecting to /pagina/imagem/nova
11:38:05,426 DEBUG VRaptor:95 - VRaptor ended the request

log informando um arquivo:

11:42:50,124 DEBUG VRaptor:81 - VRaptor received a new request
11:42:50,165 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor ResourceLookupInterceptor
11:42:50,166 DEBUG DefaultResourceTranslator:51 - trying to access /imagem/gravar
11:42:50,166 DEBUG DefaultResourceTranslator:61 - found resource [DefaultResourceMethod: ImagemController.gravarImagemController.gravar(Imagem, UploadedFile)]
11:42:50,167 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor HibernateTransactionInterceptor
11:42:50,170 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor ExceptionHandlerInterceptor
11:42:50,170 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor CommonsUploadMultipartInterceptor
11:42:50,170 INFO CommonsUploadMultipartInterceptor:93 - Request contains multipart data. Try to parse with commons-upload.
11:42:50,171 DEBUG CommonsUploadMultipartInterceptor:175 - Using repository /var/folders/QW/QWzSirLAGCiCI8EsqMbCgU+++TI/-Tmp- for file upload
11:42:50,172 DEBUG CommonsUploadMultipartInterceptor:102 - Found 1 attributes in the multipart form submission. Parsing them.
11:42:50,173 DEBUG CommonsUploadMultipartInterceptor:115 - arquivoImagem is a file
11:42:50,224 DEBUG VRaptorRequest:86 - Setting arquivoImagem with [arquivoImagem]
11:42:50,225 DEBUG CommonsUploadMultipartInterceptor:165 - Uploaded file: arquivoImagem with [uploadedFile uploadedCompleteName=Lagaffe.gif uploadedName=Lagaffe.gif contentType=image/gif]
11:42:50,225 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor FlashInterceptor
11:42:50,225 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor InstantiateInterceptor
11:42:50,226 DEBUG IogiParametersProvider:56 - IogiParametersProvider is up
11:42:50,226 DEBUG LazyInterceptorHandler:58 - Invoking interceptor ParametersInstantiatorInterceptor
11:42:50,227 DEBUG ParanamerNameProvider:51 - Found parameter names with paranamer for ImagemController.gravar(Imagem, UploadedFile) as [imagem, arquivoImagem]
11:42:50,227 DEBUG IogiParametersProvider:69 - getParametersFor() called with parameters Parameters(Parameter(arquivoImagem -> arquivoImagem)) and targets [Target(name=imagem, type=class br.com.pagina.modelo.Imagem), Target(name=arquivoImagem, type=interface br.com.caelum.vraptor.interceptor.multipart.UploadedFile)].
11:42:50,228 DEBUG ParanamerNameProvider:51 - Found parameter names with paranamer for Imagem() as []
11:42:50,238 DEBUG ParametersInstantiatorInterceptor:90 - Parameter values for [DefaultResourceMethod: ImagemController.gravarImagemController.gravar(Imagem, UploadedFile)] are [br.com.pagina.modelo.Imagem@1d2fa9ae, [uploadedFile uploadedCompleteName=Lagaffe.gif uploadedName=Lagaffe.gif contentType=image/gif]]
11:42:50,239 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor ExecuteMethodInterceptor
11:42:50,239 DEBUG ExecuteMethodInterceptor:60 - Invoking ImagemController.gravar(Imagem, UploadedFile)
11:42:54,806 DEBUG CglibProxifier:74 - a proxy for interface br.com.caelum.vraptor.view.LogicResult is created as class br.com.caelum.vraptor.view.LogicResult$$EnhancerByCGLIB$$4e58f788
11:42:54,812 DEBUG CglibProxifier:74 - a proxy for class br.com.pagina.controller.ImagemController is created as class br.com.pagina.controller.ImagemController$$EnhancerByCGLIB$$b0cbe213

Lagaffe

Eu mudei do iogi para o ognl e o problema desapareceu!

Lucas_Cavalcanti

cadastra um bug lá no VRaptor por favor:

Lagaffe

Pronto, cadastrado.

Obrigado Lucas.

Lucas_Cavalcanti

tento resolver assim que possível… se quiser implementar você mesmo, é muito bem-vindo =)

G

O problema é que o vraptor sempre espera um arquivo. Analisando o código do UploadedFileConverter, há a validação:

if (upload == null) throw new ConversionError("Invalid upload");

Talvez seja necessário remover esse IF e fazer a validação do upload de outra forma.

G

Fixed.

Criado 20 de agosto de 2012
Ultima resposta 20 de set. de 2012
Respostas 12
Participantes 3