Eu estava seguindo a apostila da caelum sobre vraptor e na parte do upload ele nao funciona
http://www.caelum.com.br/apostila-vraptor-hibernate/apendice-download-e-upload/
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.ServletContext;
import org.apache.commons.io.IOUtils;
import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import br.com.caelum.vraptor.ioc.Component;
import br.com.loja.modelo.Produto;
@Component
public class Imagens {
private File pastaImagens;
public Imagens(ServletContext context) {
String caminhoImagens = context.getRealPath("/WEB-INF/imagens");
pastaImagens = new File(caminhoImagens);
pastaImagens.mkdir();
}
public void salva(UploadedFile imagem, Produto produto) {
File destino = new File(pastaImagens, produto.getId() + ".imagem");
try {
IOUtils.copy(imagem.getFile(), new FileOutputStream(destino));
} catch (IOException e) {
throw new RuntimeException("Erro ao copiar imagem", e);
}
}
public File mostra(Produto produto) {
return new File(pastaImagens, produto.getId() + ".imagem");
}
}
import java.io.File;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import br.com.loja.imagens.Imagens;
import br.com.loja.modelo.Produto;
@Resource
public class ImagensController {
private final Imagens imagens;
private final Result result;
public ImagensController(Imagens imagens, Result result) {
this.imagens = imagens;
this.result = result;
}
@Post("/produtos/{produto.id}/imagem")
public void upload(Produto produto, UploadedFile imagem) {
imagens.salva(imagem, produto);
result.redirectTo(ProdutosController.class)
.edita(produto.getId());
}
@Get("/produtos/{produto.id}/imagem")
public File download(Produto produto) {
return imagens.mostra(produto);
}
}
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<form action="altera">
<fieldset>
<legend>Editar Produto</legend>
<input type="hidden" name="produto.id"
value="${produto.id }" />
<label for="nome">Nome:</label>
<input id="nome" type="text" name="produto.nome"
value="${produto.nome }"/>
<label for="descricao">Descrição:</label>
<textarea id="descricao" name="produto.descricao">
${produto.descricao }
</textarea>
<label for="preco">Preço:</label>
<input id="preco" type="text" name="produto.preco"
value="${produto.preco }"/>
<button type="submit">Enviar</button>
</fieldset>
</form>
<form action=
"<c:url value="/produtos/${produto.id }/imagem"/>"
method="POST" enctype="multipart/form-data">
<fieldset>
<legend>Upload de Imagem</legend>
<input type="file" name="jpg" />
<img src="<c:url value="/produtos/${produto.id}/imagem"/>"
width="100" height="100"/>
<button type="submit">Enviar</button>
</fieldset>
</form>
Quando seleciono o arquivo e coloco enviar da esse erro
type Exception report
message exception raised, check root cause for details: java.lang.NullPointerException
description The server encountered an internal error that prevented it from fulfilling this request.
exception
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.NullPointerException
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:96)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.multipart.Servlet3MultipartInterceptor.intercept(Servlet3MultipartInterceptor.java:152)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
br.com.caelum.vraptor.ioc.guice.GuiceProvider.provideForRequest(GuiceProvider.java:82)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
root cause
java.lang.NullPointerException
br.com.loja.imagens.Imagens.salva(Imagens.java:32)
br.com.loja.controller.ImagensController.upload(ImagensController.java:27)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:96)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.multipart.Servlet3MultipartInterceptor.intercept(Servlet3MultipartInterceptor.java:152)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
br.com.caelum.vraptor.ioc.guice.GuiceProvider.provideForRequest(GuiceProvider.java:82)
EDIT:
O problema esta em
imagem.getfile
a questao e que eu nao sei como resolver.