Ai galera.
Mesmo problema aqui, tô usando Tomcat 7.02 e agora o VRaptor 3.2, o meu upload estava funcionando desde a versão 3.1 do VRaptor, li o tópico e me certifiquei que o commons-fileupload e commons-io estavam na /lib, atualizei o jar do Vraptor para 3.2.1:
http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.2.1-SNAPSHOT/vraptor-3.2.1-20101021.130049-4.jar
Mesmo assim, o nome da foto (foto.nome) está chegando null no Controller:
<form action="<c:url value="/foto/${imovel.codImovel}/"/>" method="post" enctype="multipart/form-data">
<p>Upload de Imagem<br />
Nome: <input type="text" name="foto.nome" /><br/>
<input type="file" name="imagem"/>
<br>Descrição:<br>
<textarea name="foto.descricao" rows="3" cols="40"></textarea><br>
<button type="submit">Enviar</button>
</form>
@Post
@Path("/foto/{imovel.codImovel}/")
public void upload(final UploadedFile imagem, final Imovel imovel, final Foto foto) {
final Integer qtdeMaximaUpload = Integer.parseInt(this.parameterLoader.getParameter("qtde.maxima.upload"));
validator.onErrorRedirectTo(this).adiciona(imovel.getCodImovel());
validator.checking(new Validations() { // esta é a linha 54
{
if (that(imagem, is(notNullValue()), "imagem", "imagem.nula")) {
that(imagem.getContentType(), startsWith("image"), "imagem", "nao.eh.imagem");
}
that(!foto.getNome().isEmpty(), "img.nome", "imgNome.obrigatorio"); // esta é a linha 59
that(!(fotoDAO.getTotalFotos(imovel) >= qtdeMaximaUpload), "img.qtd", "qtd.exceed");
}
});
validator.onErrorRedirectTo(this).adiciona(imovel.getCodImovel());
imagens.salva(imagem,imovel,foto);
// Retornando mensagem de sucesso na inclusão
result.include("mensagem", "Imagem adicionada com sucesso");
result.use(Results.logic()).redirectTo(FotoController.class).adiciona(imovel.getCodImovel());
}
Caused by: java.lang.NullPointerException
at br.com.imobiliaria.controller.FotoController$1.<init>(FotoController.java:59)
at br.com.imobiliaria.controller.FotoController.upload(FotoController.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
... 85 more