Após atualizar o VRaptor da versao 3.5.1 para 3.5.2-SNAPSHOT recebi o seguinte erro quando tento realizar login na minha aplicacao:
Resumo do stacktrace:
Caused by: javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:284)
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:133)
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:91)
at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:85)
at org.hibernate.validator.internal.engine.ValidatorImpl.validatePropertyForDefaultGroup(ValidatorImpl.java:855)
at org.hibernate.validator.internal.engine.ValidatorImpl.validatePropertyForCurrentGroup(ValidatorImpl.java:768)
at org.hibernate.validator.internal.engine.ValidatorImpl.validatePropertyInContext(ValidatorImpl.java:670)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateProperty(ValidatorImpl.java:169)
at br.com.caelum.vraptor.validator.DefaultBeanValidator.validateProperties(DefaultBeanValidator.java:86)
at br.com.caelum.vraptor.validator.DefaultValidator.validateProperties(DefaultValidator.java:81)
at br.com.rosanetur.loja.controle.ClientUsersController.login(ClientUsersController.java:434)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
Caused by: java.lang.NullPointerException
at org.hibernate.validator.internal.constraintvalidators.EmailValidator.matchPart(EmailValidator.java:99)
at org.hibernate.validator.internal.constraintvalidators.EmailValidator.isValid(EmailValidator.java:83)
at org.hibernate.validator.internal.constraintvalidators.EmailValidator.isValid(EmailValidator.java:43)
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:281)
Acho que não teve nenhuma alteração no DefaultBeanValidator do 3.5.1 pro 3.5.2.
Não parece ser um erro do VRaptor e sim um erro do EmailValidator.
Na situação que o erro está acontecendo, o login que está sendo enviado é null? Caso seja null, talvez o EmailValidator não esteja tratando valores nulls, você pode tentar adicionar um @NotNull na propriedade, deste modo será validado se ele não é null antes de validar se é um e-mail valido.
Nykolas, não é null. O login está sendo preenchido corretamente. Fiz um syso em usuario.getLogin antes de chamar validator.validateProperties e o login foi exibido conforme esperado, isto é, não é nulo.
Qual versão do Hibernate Validator você está usando?
Eu fiz um teste aqui com VRaptor 3.5.2-SNAPSHOT e Hibernate Validator 5.0.1-Final e não tive nenhum problema.
Modelo:
public class TestModel {
@Email
public String login;
}
Controller:
@Resource
public class TestController {
private final Validator validator;
public TestController(Validator validator) {
this.validator = validator;
}
@Get("/test")
public void test() {
TestModel model = new TestModel();
model.login = "nykolas.lima@gmail.com";
validator.validateProperties(model, "login");
System.out.println(validator.hasErrors());
}
}
a minha versao é a mesma que a sua. hibernate validator 5.0.1.Final
Eu rodei minha bateria de testes que usa o hibernate validator em cima desse modelo e não ocorreu nenhum problema. A anotacao @Email que voce usou é a do hibernate?
A versao 3.5.1 do VRaptor usa a versao 5.0.0.FINAL do hibernate validator. Segundo esse link, https://hibernate.atlassian.net/browse/HV-625 , a anotacao @Email do hibernate tem um bug que foi
corrigido na versao 5.0.0.ALPHA1
Curiosamente, na versão 3.5.1 do VRaptor eu nao tive quaisquer problemas com essa anotacao @Email, mas na versao 3.5.2-SNAPSHOT do Vraptor, o problema apareceu.
SEVERE: Servlet.service() for servlet [default] in context with path [/grupodeviagem] threw exception
br.com.caelum.vraptor.InterceptionException: br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.
at br.com.rosanetur.loja.interceptors.ExceptionsInterceptor.intercept(ExceptionsInterceptor.java:42)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.rosanetur.loja.interceptors.CredentialsInterceptor.intercept(CredentialsInterceptor.java:46)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:96)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:67)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at br.com.rosanetur.loja.http.filtros.FiltroGeral.doFilter(FiltroGeral.java:145)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.rosanetur.loja.interceptors.ExceptionsInterceptor.intercept(ExceptionsInterceptor.java:30)
... 45 more
Caused by: javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:284)
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:133)
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:91)
at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:85)
at org.hibernate.validator.internal.engine.ValidatorImpl.validatePropertyForDefaultGroup(ValidatorImpl.java:855)
at org.hibernate.validator.internal.engine.ValidatorImpl.validatePropertyForCurrentGroup(ValidatorImpl.java:768)
at org.hibernate.validator.internal.engine.ValidatorImpl.validatePropertyInContext(ValidatorImpl.java:670)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateProperty(ValidatorImpl.java:169)
at br.com.caelum.vraptor.validator.DefaultBeanValidator.validateProperties(DefaultBeanValidator.java:86)
at br.com.caelum.vraptor.validator.DefaultValidator.validateProperties(DefaultValidator.java:81)
at br.com.rosanetur.loja.controle.ClientUsersController.login(ClientUsersController.java:441)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
... 58 more
Caused by: java.lang.NullPointerException
at org.hibernate.validator.internal.constraintvalidators.EmailValidator.matchPart(EmailValidator.java:99)
at org.hibernate.validator.internal.constraintvalidators.EmailValidator.isValid(EmailValidator.java:83)
at org.hibernate.validator.internal.constraintvalidators.EmailValidator.isValid(EmailValidator.java:43)
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:281)
... 73 more
Eu insisto que o problema é com o bendito @org.hibernate.validator.constraints.Email. Se eu troco para outra anotacao do hibernate, ou uma anotacao personalizada da minha aplicacao, o erro nao ocorre.