validator.validate(bean)

62 views
Skip to first unread message

Tiago Oliveira

unread,
Feb 17, 2014, 8:08:07 AM2/17/14
to caelum-...@googlegroups.com
Olá camaradas,

Esse atalho para validação foi removido no vr4 ? Existe alguma forma de fazer isso ainda ou terei que usar void bla(@Valid Ble ble) ?

Estou migrando um projeto e nele eu adiava a validacao ate um segundo momento. Ex:

public void salvarConfiguracoesFila(Integer idFila, ConfiguracoesAtendimento configuracoesAtendimento){
... (validacoes do idFila e do ConfiguracoesDeAtendimento)

Fila fila = atendimentoService.buscarFila(idFila);
configuracoesAtendimento.setFila(fila);
validator.validate(configuracoesAtendimento);
validator.onErrorRedirectTo(this).configurarFila(idFila);

...
}

[]'s 
Tiago Oliveira 

Rodrigo Turini

unread,
Feb 17, 2014, 10:44:44 AM2/17/14
to caelum-...@googlegroups.com
Oi Tiago! O método `validate` realmente foi removido, mas isso porque você pode 
fazer o mesmo com o `@Valid` no parâmetro que você quiser validar, e até mesmo 
criar validações customizadas como no exemplo que demos nessa página da wiki.

Rodrigo Turini
Caelum | Ensino e Inovação
www.caelum.com.br



--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To unsubscribe from this group and stop receiving emails from it, send an email to caelum-vrapto...@googlegroups.com.
To post to this group, send email to caelum-...@googlegroups.com.
Visit this group at http://groups.google.com/group/caelum-vraptor.
For more options, visit https://groups.google.com/groups/opt_out.

Raphael Almeida

unread,
Feb 24, 2014, 5:00:16 PM2/24/14
to caelum-...@googlegroups.com, rodrigo...@caelum.com.br
Boa tarde

É possível usar esse @Valid na versão 3.5.3?

Otávio Garcia

unread,
Feb 24, 2014, 5:01:58 PM2/24/14
to caelum-...@googlegroups.com


On Mon, Feb 24, 2014 at 7:00 PM, Raphael Almeida <raph...@gmail.com> wrote:
Boa tarde

É possível usar esse @Valid na versão 3.5.3?

--

Raphael Almeida

unread,
Feb 24, 2014, 5:08:41 PM2/24/14
to caelum-...@googlegroups.com
Devo ter configurado algo errado, pois uso o validator.validate(meuObjeto) funciona. Com o @Valid dá o erro abaixo:

br.com.caelum.vraptor.InterceptionException: br.com.caelum.vraptor.interceptor.ApplicationLogicException: your controller raised an exception
    at br.com.caelum.vraptor.simplemail.AsyncMailerFlushInterceptor.intercept(AsyncMailerFlushInterceptor.java:38)
    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.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.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.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:93)
    at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
    at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:99)
    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:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
Caused by: br.com.caelum.vraptor.interceptor.ApplicationLogicException: your controller raised an exception
    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.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
    at br.mp.mpsp.contratos.interceptor.LoginInterceptor.intercept(LoginInterceptor.java:36)
    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.environment.EnvironmentInterceptor.intercept(EnvironmentInterceptor.java:37)
    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.simplemail.AsyncMailerFlushInterceptor.intercept(AsyncMailerFlushInterceptor.java:34)
    ... 35 more
Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [br.mp.mpsp.contratos.entity.processo.DadosGeraisDoProcesso] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='É obrigatório informar o protocolo', propertyPath=protocolo, rootBeanClass=class br.mp.mpsp.contratos.entity.processo.DadosGeraisDoProcesso, messageTemplate='{processo.protocolo.obrigatorio}'}
]
    at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:159)
    at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:94)
    at org.hibernate.action.internal.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:178)
    at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:75)
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377)
    at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:214)
    at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:194)
    at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:178)
    at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:321)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:286)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
    at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:853)
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:827)
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:831)
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:875)
    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 org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
    at $Proxy186.persist(Unknown Source)
    at br.mp.mpsp.contratos.repository.impl.GenericDAOImpl.salvar(GenericDAOImpl.java:55)
    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 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy187.salvar(Unknown Source)
    at br.mp.mpsp.contratos.service.impl.ProcessoServiceImpl.salvar(ProcessoServiceImpl.java:26)
    at br.mp.mpsp.contratos.controller.ProcessoController.incluir(ProcessoController.java:62)
    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:61)
    ... 46 more

Lucas Cavalcanti

unread,
Feb 24, 2014, 5:51:21 PM2/24/14
to caelum-vraptor
vc colocou @Valid no método do controller?

Raphael Almeida

unread,
Feb 25, 2014, 9:07:37 AM2/25/14
to caelum-...@googlegroups.com
 Eu deixei no param.

    @Post("/processo")
    public void incluir(@Valid final DadosGeraisDoProcesso dadosGeraisDoProcesso){ ... }

Rodrigo Turini

unread,
Feb 25, 2014, 10:43:33 AM2/25/14
to caelum-...@googlegroups.com
seu método faz o validator.onErrorUsePageOf(Controller.class).method() ?

Rodrigo Turini
Caelum | Ensino e Inovação
www.caelum.com.br



Raphael Almeida

unread,
Feb 25, 2014, 11:23:32 AM2/25/14
to caelum-...@googlegroups.com
Acho que agora entendi o que houve, primeiramente estava com problema de libs.

O hibernate-validator 5.0 requer javax.el 2.2, porém estou no Tomcat 6 que por padrão vem a javax.el 2.1. Isso gerava a seguinte exception: NoSuchMethodError: javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory)

Ao tentar usar o javax.validation 1.0, hibernate-validator 4.3 e a el em 2.1 com o VRaptor 3.5.3, o @Valid não era interceptado. Pelo que entendi pelo histórico de alterações, a versão 3.5.1 do Vraptor o suporte foi alterado para o Bean Validation 1.

Para funcionar com a versão mais recente, alguns lugares aconselham a trocar as libs el nativas do Tomcat 6 para 2.2. Fiz o teste e funciona perfeitamente, porém não sei o impacto que isso causaria nas demais aplicações que estão no mesmo Tomcat.

Fiz um último teste, agora usando as versões: javax.validation 1.0, hibernate-validator 4.3, el 2.1 e Vraptor 3.5.3.
Mas ao invés de usar a anotação @Valid usei o validator.validate(meuObjeto) e funcionou.

@Rodrigo faz sim, segue o trecho do método:
    @Post("/processo")
    public void incluir(final DadosGeraisDoProcesso dadosGeraisDoProcesso){
        validator.validate(dadosGeraisDoProcesso);
        validator.onErrorUsePageOf(this).processo();
        processoService.salvar(dadosGeraisDoProcesso);
        result.redirectTo(this).processo();
    }

Alguém já precisou atualizar a javax.el do Tomcat 6 para 2.2?
Reply all
Reply to author
Forward
0 new messages