Olá galera. Estou utilizando Vraptor 3.4.1 para desenvolver um pequeno sistema e encontrei um problema no framework. Estou fazendo upload de um arquivo, ele faz numa boa, mas quando eu não faço (chega null no servidor), e ele cai no validator (que não tem nada referente ao arquivo de upload) ele detecta qua não foi inserido o arquivo e gera uma mensagem automaticamente. Eu não quero que isso aconteça, quero poder tratar isso manualmente. A mensagem de validação que ele retorna é: “file Invalid upload” e o log me mostra isso: 14:45:05,402 INFO [CommonsUploadMultipartInterceptor] Request contains multipart data. Try to parse with commons-upload.
14:45:05,534 WARN [UploadedFileConverter] 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.
deixa eu tentar entender:
vc tem um controller que quando vc manda um arquivo ele funciona ok, mas quando vc não manda dá invalid upload?
Tudo isso no mesmo formulário?
Exatamente. Ele da Invalid Upload automaticamente. Não tenho nenhuma regra no meu validator (tenho somente as regras para o resto do formulário) que diz para ele tratar isso, mas mesmo assim ele trata. No mesmo formulário.
aparece alguma exception no log?
Não, mostra somente essa mensagem de log:
14:45:05,402 INFO [CommonsUploadMultipartInterceptor] Request contains multipart data. Try to parse with commons-upload.
14:45:05,534 WARN [UploadedFileConverter] 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.
vc tá com o commons-fileupload no classpath?
Sim.
[code]
commons-io
commons-io
2.4
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3</version>
</dependency>
[/code]
Abaixo estão os métodos que estou utilizando. Quando entra no validate, é lançada (pelo proprio vraptor) a mensagem de validação para a página: “invalid Upload”
@Path("/save")
public void saveCategoria(Categoria entidade, UploadedFile file) {
validator.validate(entidade);
validate(entidade);
validateUpload(file);
validator.onErrorUsePageOf(this).form();
String pathDaImagem = uploadDaImagem(file);
entidade.setImagem(pathDaImagem);
getRepository().save(entidade);
result.redirectTo(this).list();
}
@Override
protected void validate(final Categoria entidade) {
validator.checking(new Validations(){{
that(entidade.getDescricao() != null,"","categoria.descricaoVazio");
that(entidade.getNome() != null,"","categoria.nomeVazio");
}});
}
cria esse arquivo no seu projeto:
https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/converter/UploadedFileConverter.java
Valeu Lucas, funcionou. O Vraptor 3.5 já possui essa atualização? Pensando em migrar para ele.
É uma mudança recente… mas posso gerar um snapshot com essa alteração pra vc. Te ajuda?
Humm, entendo. Consegui fazer funcionar, mas se não der muito trabalho para gerar o snapshot, eu agradeço. Também seve para a galera que for utilizar o upload e encontrar o mesmo problema.
Tá lá: https://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.5.2-SNAPSHOT/
vlw, obrigado pela ajuda.
Estou com o mesmo problema Lucas meu arquivo chega null no Controller, criei a classe conforme você pede mais em cima, mas continuo com o mesmo erro e estou usando essa versão vraptor-3.5.2-20130709.125703-4.jar, tenho os .jar do commons
use a versão 3.5.3, ligue o log de debug do VRaptor e veja se tem algo relacionado ao upload nele.
o seu formulário tá com enctype=“multipart/form-data”?
Oi Lucas, valeu pela resposta cara, mas ontem mesmo consegui resolver.
Pode me informar o que foi feito para resolver?
Estou recebendo o null no meu arquivo, no projeto.