[Resolvido] Objetos não são carregados no Controller

13 respostas
Guevara

Oi pessoal!
Meu método de remoção estava funcionando normalmente até colocar um @Autowired no construtor do meu FotoController, tive que colocar pq o Spring Security exige isso… =/
Acontece que meu método de remoção de foto não carrega os objetos imovel e foto:

@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_GERENTE')") 
	@Path("/foto/remove/{codImovel}/{idFoto}")
	 public void remove(Long codImovel,Long idFoto) {
		Foto foto = fotoDAO.carrega(idFoto);
		Imovel imovel = imovelDAO.carrega(codImovel);		 	
		if(idFoto.equals(imovel.getAvatar().getIdFoto())) {			
		 imovel.setAvatar(null);
		 imovelDAO.atualiza(imovel);
		}		 
		imagens.remove(foto);
		fotoDAO.remove(foto);	  
		// mensagem de foto removida com sucesso
		result.include("mensagem", "Foto removida com sucesso");
		// redirecionamento para a listagem de imoveis
		result.use(Results.logic()).redirectTo(FotoController.class).adiciona(imovel.getCodImovel());		 
	  }

O Controller recebe a id dos dois, mas na hora de carregar o objeto imovel e objeto foto eis o resultado:

Por causa disso, estou recebendo nullPointerException ao remover a foto, alguém sabe como resolvo essa parada?
Abraço!

13 Respostas

Lucas_Cavalcanti

o problema é que qdo vc usa o spring security, o Spring retorna um proxy da sua classe… e esse proxy deve estar removendo a informação dos nomes dos parâmetros…

habilita o log de debug do VRaptor, e posta aqui o que aparece no log qdo vc faz essa requisição

Guevara

Oi Lucas!
Não sabia dessa. =/
Deixei assim o meu log4j.xml:

<category name="org.vraptor">
                <priority value="DEBUG" />
                <appender-ref ref="stdout" />
        </category>
                
        <category name="br.com.caelum.vraptor">
                <priority value="DEBUG" />
                <appender-ref ref="stdout" />
        </category>

É assim que habilita o modo debug do VRaptor?
Esta é a stacktrace:

17/11/2010 14:48:05 org.apache.catalina.core.ApplicationContext log
SEVERE: Unhandled exception occurred whilst decorating page
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.NullPointerException
	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:53)
	at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:69)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:90)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.imobiliaria.interceptor.NoCacheInterceptor.intercept(NoCacheInterceptor.java:41)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:48)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:44)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	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:53)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	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:242)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:242)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:242)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:163)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:556)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:401)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:242)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:267)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:245)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:260)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:636)
Caused by: java.lang.NullPointerException
	at br.com.imobiliaria.controller.FotoController.remove(FotoController.java:115)
	at br.com.imobiliaria.controller.FotoController$$FastClassByCGLIB$$27051f11.invoke(<generated>)
	at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
	at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
	at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:67)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)
	at br.com.imobiliaria.controller.FotoController$$EnhancerByCGLIB$$2d2493ea.remove(<generated>)
	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)
	... 81 more
17/11/2010 14:48:05 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [default] in context with path [/imobiliaria] threw exception
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.NullPointerException
	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:53)
	at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:69)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:90)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.imobiliaria.interceptor.NoCacheInterceptor.intercept(NoCacheInterceptor.java:41)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:48)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:44)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	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:53)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	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:242)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:242)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:242)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:163)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:556)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:401)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:242)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:267)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:245)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:260)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:636)
Caused by: java.lang.NullPointerException
	at br.com.imobiliaria.controller.FotoController.remove(FotoController.java:115)
	at br.com.imobiliaria.controller.FotoController$$FastClassByCGLIB$$27051f11.invoke(<generated>)
	at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
	at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
	at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:67)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)
	at br.com.imobiliaria.controller.FotoController$$EnhancerByCGLIB$$2d2493ea.remove(<generated>)
	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)
	... 81 more
Lucas_Cavalcanti

e antes do erro, o que aparece? algumas linhas antes, que falam sobre o processo da requisição

Guevara

Foi mal, ai está o que vêm antes:

15:52:24,438 DEBUG [VRaptor             ] VRaptor received a new request
15:52:24,442 DEBUG [DefaultRequestExecution] executing stack  DefaultRequestExecution
15:52:24,481 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
15:52:24,482 DEBUG [DefaultResourceTranslator] trying to access /foto/remove/100/8
15:52:24,482 DEBUG [VRaptorRequest      ] Setting codImovel with [100]
15:52:24,482 DEBUG [VRaptorRequest      ] Setting idFoto with [8]
15:52:24,482 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: FotoController.removeFotoController.remove(Long, Long)]
15:52:24,486 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor
15:52:24,488 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InterceptorListPriorToExecutionExtractor
15:52:24,490 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor JPATransactionInterceptor
15:52:24,493 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor NoCacheInterceptor
15:52:24,497 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor
15:52:24,530 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor
15:52:24,531 DEBUG [AsmBasedTypeCreator ] Trying to make class for FotoController$remove$279976043$4
15:52:24,531 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for FotoController.remove(Long, Long) as [codImovel, idFoto]
15:52:24,531 DEBUG [AsmBasedTypeCreator ] Parameter names found for creating type are: [CodImovel, IdFoto]
15:52:24,531 DEBUG [AsmBasedTypeCreator ] Method for field 'CodImovel' being defined for type Ljava/lang/Long;
15:52:24,531 DEBUG [AsmBasedTypeCreator ] Method for field 'IdFoto' being defined for type Ljava/lang/Long;
15:52:24,532 DEBUG [AsmBasedTypeCreator ] Methods: [public java.lang.Long FotoController$remove$279976043$4.getCodImovel(), public java.lang.Long FotoController$remove$279976043$4.getIdFoto(), public void FotoController$remove$279976043$4.setCodImovel(java.lang.Long), public void FotoController$remove$279976043$4.setIdFoto(java.lang.Long)]
15:52:24,533 DEBUG [AsmBasedTypeCreator ] Fields: [private java.lang.Long FotoController$remove$279976043$4.CodImovel_, private java.lang.Long FotoController$remove$279976043$4.IdFoto_]
15:52:24,533 DEBUG [CacheBasedTypeCreator] cached generic type for method [DefaultResourceMethod: FotoController.removeFotoController.remove(Long, Long)]
15:52:24,533 DEBUG [OgnlParametersProvider] Applying idFoto with [8]
15:52:24,534 DEBUG [OgnlParametersProvider] Applying codImovel with [100]
15:52:24,534 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for FotoController.remove(Long, Long) as [codImovel, idFoto]
15:52:24,534 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: FotoController.removeFotoController.remove(Long, Long)] are [100, 8]
15:52:24,539 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor
15:52:24,547 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor
15:52:24,547 DEBUG [ExecuteMethodInterceptor] Invoking FotoController.remove(Long, Long)
Hibernate: 
    select
        imovel0_.cod_imovel as cod1_30_6_,
        imovel0_.area as area30_6_,
        imovel0_.avatar_id_foto as avatar10_30_6_,
        imovel0_.data_inclusao as data3_30_6_,
        imovel0_.descricao as descricao30_6_,
        imovel0_.destaque as destaque30_6_,
        imovel0_.id_endereco as id11_30_6_,
        imovel0_.medida as medida30_6_,
        imovel0_.cod_modalidade as cod12_30_6_,
        imovel0_.proprietario_id_proprietario as proprie13_30_6_,
        imovel0_.quartos as quartos30_6_,
        imovel0_.cod_status as cod14_30_6_,
        imovel0_.cod_tipo as cod15_30_6_,
        imovel0_.titulo as titulo30_6_,
        imovel0_.valor as valor30_6_,
        foto1_.id_foto as id1_33_0_,
        foto1_.descricao as descricao33_0_,
        foto1_.imovel_cod_imovel as imovel5_33_0_,
        foto1_.nome as nome33_0_,
        foto1_.url_foto as url4_33_0_,
        endereco2_.id_endereco as id1_28_1_,
        endereco2_.bairro as bairro28_1_,
        endereco2_.cep as cep28_1_,
        endereco2_.cidade as cidade28_1_,
        endereco2_.complemento as compleme5_28_1_,
        endereco2_.estado as estado28_1_,
        endereco2_.logradouro as logradouro28_1_,
        endereco2_.numero as numero28_1_,
        endereco2_.pais as pais28_1_,
        modalidade3_.cod_modalidade as cod1_35_2_,
        modalidade3_.tipo_modalidade as tipo2_35_2_,
        proprietar4_.id_proprietario as id1_34_3_,
        proprietar4_.data_inclusao as data2_34_3_,
        proprietar4_.id_endereco as id3_34_3_,
        proprietar4_.id_pessoa as id4_34_3_,
        status5_.cod_status as cod1_37_4_,
        status5_.nome as nome37_4_,
        tipo6_.cod_tipo as cod1_36_5_,
        tipo6_.nome as nome36_5_ 
    from
        Imovel imovel0_ 
    left outer join
        Foto foto1_ 
            on imovel0_.avatar_id_foto=foto1_.id_foto 
    left outer join
        Endereco endereco2_ 
            on imovel0_.id_endereco=endereco2_.id_endereco 
    left outer join
        Modalidade modalidade3_ 
            on imovel0_.cod_modalidade=modalidade3_.cod_modalidade 
    left outer join
        Proprietario proprietar4_ 
            on imovel0_.proprietario_id_proprietario=proprietar4_.id_proprietario 
    left outer join
        Status status5_ 
            on imovel0_.cod_status=status5_.cod_status 
    left outer join
        Tipo tipo6_ 
            on imovel0_.cod_tipo=tipo6_.cod_tipo 
    where
        imovel0_.cod_imovel=?
Hibernate: 
    select
        endereco0_.id_endereco as id1_28_0_,
        endereco0_.bairro as bairro28_0_,
        endereco0_.cep as cep28_0_,
        endereco0_.cidade as cidade28_0_,
        endereco0_.complemento as compleme5_28_0_,
        endereco0_.estado as estado28_0_,
        endereco0_.logradouro as logradouro28_0_,
        endereco0_.numero as numero28_0_,
        endereco0_.pais as pais28_0_ 
    from
        Endereco endereco0_ 
    where
        endereco0_.id_endereco=?
Hibernate: 
    select
        pessoa0_.id_pessoa as id1_26_0_,
        pessoa0_.celular as celular26_0_,
        pessoa0_.cpf as cpf26_0_,
        pessoa0_.data_nascimento as data4_26_0_,
        pessoa0_.email as email26_0_,
        pessoa0_.estado_civil as estado6_26_0_,
        pessoa0_.nacionalidade as nacional7_26_0_,
        pessoa0_.naturalidade as naturali8_26_0_,
        pessoa0_.nome as nome26_0_,
        pessoa0_.rg as rg26_0_,
        pessoa0_.telefone as telefone26_0_ 
    from
        Pessoa pessoa0_ 
    where
        pessoa0_.id_pessoa=?
15:52:24,577 DEBUG [DefaultExceptionMapper] find for exception class java.lang.NullPointerException
17/11/2010 15:52:24 org.apache.catalina.core.ApplicationContext log
SEVERE: Unhandled exception occurred whilst decorating page
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.NullPointerException
Lucas_Cavalcanti

bom, o idFoto e codImovel estão vindo sem problemas…

o problema deve ser com o carrega… os objetos com esses ids existem no BD?

Lucas_Cavalcanti

qual é essa linha?
br.com.imobiliaria.controller.FotoController.remove(FotoController.java:115)

Guevara

Essa linha é justamente na hora de comparar a id da foto com o id do avatar do imóvel:

if(imovel.getAvatar().getIdFoto().equals(idFoto)) {

Pelo que eu entendi, o imovelDAO morreu, não carrega o imóvel, e o engraçado é que no restante da aplicação funciona. =/

Lucas_Cavalcanti

o que vc tem que ver:

o imovel que veio é um imovel de verdade? o id está no banco?

esse imóvel tem avatar? ou seja, imovel.getAvatar() != null?

esse avatar tem id nulo?

troque o if por:

if (imovel.getAvatar() != null && imovel.getAvatar().getIdFoto().equals(idFoto)) {
Guevara

Deu boa Lucas, testando tb imovel.getAvatar(). Mesmo existindo idFoto no atributo avatar da classe Imovel o teste no atributo avatar precisa ser feito? Pq eu não estava testando o getAvatar() e estava funcionando.
Valeu! o/

Lucas_Cavalcanti

o teste foi feito com os mesmos ids?

Guevara

Eu testei sempre com o mesmo imóvel para não me confundir aqui, o problema acontece se não colocar o imovel.getAvatar() no if. Tava conversando com um amigo que tb começou com o VRaptor lá na versão 3.1, que na versão 3.1.2 pra trás não precisava validar tb os objetos relacionados, mas apenas os atributos do objeto. Houve alguma alteração em relação a isso? Dei uma olhada na apostila FJ-28 e só têm validação de atributos, não fala nada sobre validação nos objetos relacionados. E eu me lembro que não precisava validar assim, era só validar os atributos do objeto. Têm aquela minha busca de imóveis como exemplo, antigamente eu colocava os getAlgumaCoisa() e pronto. Agora preciso validar getAlgumaCoisa e o getObjetoDessaCoisa. Esse meu amigo tb está tomando nullPointerException justamente por causa dessa validação, se remover a validação o objeto é persistido, se colocar a validação nos atributos do objeto toma NPE. "/
Abraço!!

Lucas_Cavalcanti

isso não é específico do VRaptor, vale pra qualquer sistema em java!

se imovel.getAvatar() é null, ao fazer imovel.getAvatar().qqercoisa() dá uma NPE.

não é questão de validar ou não os atributos…

se imovel veio direto da requisição, e não existe nenhum parâmetro da requisição que comece com “imovel.avatar”, o imovel.getAvatar() vai vir null.

se o imovel veio do banco, e o imovel não está relacionado com nenhum avatar, imovel.getAvatar() vai vir null.

se um desses casos é verdadeiro, vc precisa fazer um

if (imovel.getAvatar() != null)

antes de chamar qqer método nesse avatar.

de novo, isso é uma restrição do java, não é específico do VRaptor nem do Hibernate nem de qqer outro framework

Guevara

Agora entendi Lucas, obrigado pelo esclarecimento. :smiley:
Abraço!!

Criado 17 de novembro de 2010
Ultima resposta 18 de nov. de 2010
Respostas 13
Participantes 2