Exception em validação

10 respostas
Eucassio

Pessoal estou com problema aqui e estou meio perdido:

30/10/2009 09:47:42 org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
	at br.com.caelum.vraptor.interceptor.OutjectResult.intercept(OutjectResult.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:60)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:49)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at br.com.caelum.vraptor.view.DefaultPageResult$1.intercept(DefaultPageResult.java:119)
	at br.com.caelum.vraptor.proxy.AbstractCglibProxifier$2.intercept(AbstractCglibProxifier.java:33)
	at br.com.system.logic.CandidatoController$$EnhancerByCGLIB$$a1ec088.dadoInvalido(<generated>)
	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.view.ValidationPageResult$1.intercept(ValidationPageResult.java:75)
	at br.com.caelum.vraptor.proxy.AbstractCglibProxifier$2.intercept(AbstractCglibProxifier.java:33)
	at br.com.system.logic.CandidatoController$$EnhancerByCGLIB$$a1ec088.dadoInvalido(<generated>)
	at br.com.system.logic.CandidatoController.inscrever(CandidatoController.java:105)
	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:50)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:83)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:40)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor.intercept(MultipartInterceptor.java:74)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:51)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:60)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	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:128)
	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:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
30/10/2009 09:47:42 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.InterceptionException: br.com.caelum.vraptor.view.ResultException: java.lang.reflect.InvocationTargetException
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:76)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:83)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:40)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.multipart.MultipartInterceptor.intercept(MultipartInterceptor.java:74)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:51)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:60)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	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:128)
	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:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
Caused by: br.com.caelum.vraptor.view.ResultException: java.lang.reflect.InvocationTargetException
	at br.com.caelum.vraptor.view.ValidationPageResult$1.intercept(ValidationPageResult.java:77)
	at br.com.caelum.vraptor.proxy.AbstractCglibProxifier$2.intercept(AbstractCglibProxifier.java:33)
	at br.com.system.logic.CandidatoController$$EnhancerByCGLIB$$a1ec088.dadoInvalido(<generated>)
	at br.com.system.logic.CandidatoController.inscrever(CandidatoController.java:105)
	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:50)
	... 36 more
Caused by: java.lang.reflect.InvocationTargetException
	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.view.ValidationPageResult$1.intercept(ValidationPageResult.java:75)
	... 44 more
Caused by: br.com.caelum.vraptor.proxy.ProxyInvocationException: java.lang.NullPointerException
	at br.com.caelum.vraptor.view.DefaultPageResult$1.intercept(DefaultPageResult.java:122)
	at br.com.caelum.vraptor.proxy.AbstractCglibProxifier$2.intercept(AbstractCglibProxifier.java:33)
	at br.com.system.logic.CandidatoController$$EnhancerByCGLIB$$a1ec088.dadoInvalido(<generated>)
	... 49 more
Caused by: java.lang.NullPointerException
	at br.com.caelum.vraptor.interceptor.OutjectResult.intercept(OutjectResult.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:60)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:49)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at br.com.caelum.vraptor.view.DefaultPageResult$1.intercept(DefaultPageResult.java:119)
	... 51 more

Tenho o seguinte controlador:

@Post
	public void inscrever(Candidato candidato) throws Exception{
		//candidatoBo.armazena(candidato);
		if(candidato.getEmail()==null||candidato.getEmail().isEmpty()){
			validator.add(new ValidationMessage("Email requerido","erro"));
		}
		
	validator.onErrorUse(Results.page()).of(getClass()).dadoInvalido();
		System.out.println("salvo");
	}

A excessão é lancada aqui: validator.onErrorUse(Results.page()).of(getClass()).dadoInvalido();

Não consigo entender pois uso a mesma forma pra validar outros dados.
Se alguém puder ajudar…

10 Respostas

G

Qual a versão do vraptor você usa? 3.0.0 ou 3.0.1?

Eucassio

Uso a versão 3.0.1

Talvez tenha algo a ver com isso: http://guj.com.br/posts/list/138142.java#743279

Possuo esse componente:

@Component
@SessionScoped
public class CandidatoWrapper {
	private HttpSession session;
	
	public CandidatoWrapper(HttpSession session) {
        this.session = session;
    }
    public void setCandidato(Candidato candidato) {
    	session.setAttribute("canditadoValidado", candidato);
    }
    
   public Candidato getCandidato() {
         return (Candidato) session.getAttribute("canditadoValidado");
    }

}

e recebo ele assim:

@Resource

public class CandidatoController {
	private final Result result;
	private CandidatoWrapper candidatoWrapper;
	private CandidatoBo candidatoBo;
	private final Validator validator;
	
	public CandidatoController(Result result,CandidatoWrapper candidatoWrapper,CandidatoBo candidatoBo,Validator validator) {
		this.result = result;
		this.candidatoWrapper=candidatoWrapper;
		this.candidatoBo=candidatoBo;
		this.validator=validator;
	}

@Post
	public void inscrever(Candidato candidato) throws Exception{
		//candidatoBo.armazena(candidato);
		
		candidatoWrapper=null;
		if(candidato.getEmail()==null||candidato.getEmail().isEmpty()){
			validator.add(new ValidationMessage("Email requerido","erro"));
		}

		validator.onErrorUse(Results.page()).of(getClass()).dadoInvalido();

	}
Lucas_Cavalcanti

Isso acontece quando dá erro de validação, certo?

tem alguma outra lógica que redireciona pra essa, quando dá o erro?

quando o candidato está válido vai ok?

G

Quanto ao componente CandidatoWrapper você está usando HttpSession.setAttribute e ao mesmo tempo o bean é session-scoped. Você não precisa usar http-session. Quando o bean é @SessionScoped o vraptor faz o trabalho automaticamente para você. Não sei se talvez o fato de você ter essa redundancia pode gerar esse erro.

Outra coisa, passe o que é feito no método dadoInvalido(); Tem uma linha do stacktrace que me chamou atenção:

Onde há o erro de NullPointerException há a linha

Não sei o que pode haver aqui de erro.

Eucassio

Garcia e Lucas, obrigado pela ajuda mas consegui resolver o problema, era porque estava requisitando um objeto json para essa uri então deveria ter um jsp candidado/dadoInvalido.json.jsp mas não tinha colocado o “.json” pois nesse caso de erro de validação não iria retornar um objeto json.

Garcia, uso o CandidatoWrapper dessa forma pois preciso acessá-lo na jsp, seguindo o exemplo da documentação do vraptor em http://vraptor.caelum.com.br/documentacao/vraptor3.pdf 17.7- Colocando objetos na sessão.

Valeu pessoal.

G

Eucassio, que bom que você resolveu. Mas que estranho, eu tenho acessado meu componete para autorização pós JAAS e funciona normalmente, sem precisar da HTTP Session.

Aqui no link http://vraptor.caelum.com.br/cookbook/colocando-objetos-na-sessao/ diz que basta um @SessionScoped e tudo está feito.

Lucas, me confirma isso, se eu colocar @SessionScoped ele não vai para a HTTP Session ou apenas para uma “sessão interna” do provider do Vraptor? Nesse caso há diferenças de comportamento entre pico e spring?

Abraços

Eucassio

Testei aqui e não funcionou da forma como está em http://vraptor.caelum.com.br/cookbook/colocando-objetos-na-sessao/ apenas conforme a documentação.

Lucas_Cavalcanti

@garcia-jj
O Spring usa o HttpSession pra controlar o escopo de sessão: coloca todos os beans session scoped na HttpSession, com o bean name deles como chave. E o bean name geralmente é o nome da classe com a primeira minúscula… Isso só funciona no Spring mesmo, no pico é diferente…

@Eucassio
Tenta criar a classe:

@Component //do vraptor
@SessionScoped //do vraptor
public class CandidatoValidado {
    private Candidato candidato;

    public void setCandidato(Candidato candidato) {
        this.candidato = candidato;
    }
    public Candidato getCandidato() {
        return this.candidato;
    }
}

e usa na jsp: ${candidatoValidado.candidato} para
acessar o candidato. Nos controllers vc continua usando do mesmo jeito que já está com o CandidatoWrapper.

G

Lucas, eu havia notado essa diferença de comportamento do pico e spring. No pico ele usa uma session interna dele, spring usa http-session. Seria interessante colocar isso na documentação, que você acha?

Lucas_Cavalcanti

já está :wink: http://vraptor.caelum.com.br/cookbook/colocando-objetos-na-sessao/

mas sim, é bom colocar algo melhor na documentação, o texto tá bem cru e simples…

o pico tb usa uma http-session… só que a gente coloca o container inteiro na sessão, não os beans…

Criado 30 de outubro de 2009
Ultima resposta 31 de out. de 2009
Respostas 10
Participantes 3