Oi Garcia!!!
Desculpe a demora, além desta zica tô resolvendo outra para persistir um contato.
Testei a sua dica, mas continuo tomando NullPointerException:
15:26:03,961 DEBUG [DefaultRequestExecution] executing stack DefaultRequestExecution
15:26:03,964 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor MultipartInterceptor
15:26:03,964 DEBUG [MultipartInterceptor] Trying to parse multipart request.
15:26:03,974 DEBUG [MultipartInterceptor] Using repository [/tmp] for file upload
15:26:04,029 DEBUG [MultipartInterceptor] Found [1] attributes in the multipart form submission. Parsing them.
15:26:04,073 DEBUG [VRaptorRequest ] Setting imagem with [escuela_n1.jpg]
15:26:04,073 DEBUG [MultipartItemsProcessor] Uploaded file: imagem with [uploadedFile uploadedCompleteName=escuela_n1.jpg uploadedName=escuela_n1.jpg contentType=image/jpeg]
15:26:04,089 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
15:26:04,090 DEBUG [DefaultResourceTranslator] trying to access /imovel/7/imagem
15:26:04,090 DEBUG [VRaptorRequest ] Setting imovel.idImovel with [7]
15:26:04,090 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: ImagemController.uploadImagemController.upload(Imovel, UploadedFile)]
15:26:04,096 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor
15:26:04,098 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InterceptorListPriorToExecutionExtractor
15:26:04,111 DEBUG [InstantiatedInterceptorHandler] Invoking interceptor JPATransactionInterceptor
15:26:04,112 DEBUG [InstantiatedInterceptorHandler] Invoking interceptor NoCacheInterceptor
15:26:04,112 DEBUG [InstantiatedInterceptorHandler] Invoking interceptor InstantiateInterceptor
15:26:04,157 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor
15:26:04,157 DEBUG [AsmBasedTypeCreator ] Trying to make class for ImagemController$upload$[telefone removido]$8
15:26:04,158 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for ImagemController.upload(Imovel, UploadedFile) as [imovel, imagem]
15:26:04,158 DEBUG [AsmBasedTypeCreator ] Parameter names found for creating type are: [Imovel, Imagem]
15:26:04,158 DEBUG [AsmBasedTypeCreator ] Method for field 'Imovel' being defined for type Lbr/com/imobiliaria/bean/Imovel;
15:26:04,158 DEBUG [AsmBasedTypeCreator ] Method for field 'Imagem' being defined for type Lbr/com/caelum/vraptor/interceptor/multipart/UploadedFile;
15:26:04,159 DEBUG [AsmBasedTypeCreator ] Methods: [public void ImagemController$upload$[telefone removido]$8.setImovel(br.com.imobiliaria.bean.Imovel), public br.com.imobiliaria.bean.Imovel ImagemController$upload$[telefone removido]$8.getImovel(), public void ImagemController$upload$[telefone removido]$8.setImagem(br.com.caelum.vraptor.interceptor.multipart.UploadedFile), public br.com.caelum.vraptor.interceptor.multipart.UploadedFile ImagemController$upload$[telefone removido]$8.getImagem()]
15:26:04,159 DEBUG [AsmBasedTypeCreator ] Fields: [private br.com.imobiliaria.bean.Imovel ImagemController$upload$[telefone removido]$8.Imovel_, private br.com.caelum.vraptor.interceptor.multipart.UploadedFile ImagemController$upload$[telefone removido]$8.Imagem_]
15:26:04,160 DEBUG [CacheBasedTypeCreator] cached generic type for method [DefaultResourceMethod: ImagemController.uploadImagemController.upload(Imovel, UploadedFile)]
15:26:04,160 DEBUG [OgnlParametersProvider] Applying imagem with [escuela_n1.jpg]
15:26:04,167 DEBUG [OgnlParametersProvider] Applying imovel.idImovel with [7]
15:26:04,173 DEBUG [OgnlParametersProvider] cant find property for expression imovel.idImovel ignoring
15:26:04,173 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for ImagemController.upload(Imovel, UploadedFile) as [imovel, imagem]
15:26:04,173 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: ImagemController.uploadImagemController.upload(Imovel, UploadedFile)] are [br.com.imobiliaria.bean.Imovel@1ed957d, [uploadedFile uploadedCompleteName=escuela_n1.jpg uploadedName=escuela_n1.jpg contentType=image/jpeg]]
15:26:04,195 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor
15:26:04,195 DEBUG [ExecuteMethodInterceptor] Invoking ImagemController.upload(Imovel, UploadedFile)
25/04/2010 15:26:04 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: an exception was raised while executing resource method
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:86)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.imobiliaria.interceptor.NoCacheInterceptor.intercept(NoCacheInterceptor.java:41)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:46)
at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor.intercept(MultipartInterceptor.java:98)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at br.com.imobiliaria.component.Imagens.salva(Imagens.java:52)
at br.com.imobiliaria.controller.ImagemController.upload(ImagemController.java:49)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57)
... 44 more
Estou upando a imagem na jsp de edição de imóvel, pois lá têm a ID do imóvel, como está na apostila da Caelum.
Repare que o caminho só vai existir quando chegar a imagem ao componente Imagens, que no caso é a variável “destino”.
Tô há dias quebrando a cabeça pra entender o motivo de não setar a url nesta linha, o caminho não é gravado:
img.setUrlImagem(destino.getName());
Isso provoca a falha na linha seguinte que é esta:
Tá osso, revirei o GUJ em busca de algum post mostrando como salvar o caminho no banco, e não achei nenhum, o pessoal não costuma postar o código com a solução, quando eu acho um post com a mesma dúvida que a minha, o post não têm nenhuma resposta, fica só a pergunta do autor. =/
Acho que se o pessoal respondesse com código explicando o funcionamento dele, muitos outros posts seriam evitados, inclusive o meu.
Nem no Google achei código mostrando como salvar caminho da imagem no banco usando VRaptor. Tô quase descartando essa funcionalidade de upload na minha aplicação, uma coisa que deveria ser simples mas tornou-se um enorme empecilho.
Grande abraço!!