Usando Hibernate Validation na classe

Boa noite Galera,

Estou com um problema num exemplo utilizando o Hibernate Validation quando implemento um Validator próprio do tipo ElementType.Type.

Pelo que entendi nesse caso o validator deveria receber a instancia da classe a ser validada ao invés de receber somente a propriedade da classe que quero validar.
Esta é a anotação que criei:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.hibernate.validator.ValidatorClass;

@ValidatorClass(ChegadaMaiorQuePartidaValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ChegadaMaiorQuePartida {
	String message();
}

Esta é a implementação da validação acima:


import java.util.Date;
import org.hibernate.validator.Validator;
import com.br.sglr.entity.Voo;

public class ChegadaMaiorQuePartidaValidator implements
		Validator<ChegadaMaiorQuePartida> {

	private ChegadaMaiorQuePartida anotacao;
	public void initialize(ChegadaMaiorQuePartida anotacao) {
		// TODO Auto-generated method stub
		this.anotacao = anotacao;
	}

	public boolean isValid(Object entidade) {
		// TODO Auto-generated method stub
		Voo voo = (Voo) entidade;
		Date chegada = voo.getDataChegada();
		Date partida = voo.getDataPartida();
	                return chegada.after(partida);
	}

}

Basicamente, ela deveria receber um objeto Voo que possui uma data de saida e uma de chegada, e retornar false se a saida for posterior a partida ou true, em caso contrário.

O que acontece é que, caso a validação passe tudo funciona legal.
No entanto, se ela falha, ocorre um erro esse aplicação:

23:37:23,116 SEVERE [application] javax.ejb.EJBTransactionRolledbackException: validation failed for: com.br.sglr.entity.Voo
javax.faces.el.EvaluationException: javax.ejb.EJBTransactionRolledbackException: validation failed for: com.br.sglr.entity.Voo
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:387)
	at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
	at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
	at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
	at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)

Aqui a classe que utiliza a validação:

@Entity
@Name("voo")
@Scope(ScopeType.EVENT)
@ChegadaMaiorQuePartida(message = "data de chegada menor que data da partida")
public class Voo {
	@Id
	@GeneratedValue
	private Long Id;

Como disse a validação esta sendo chamada corretamente, pois, quando passo duas datas válidas funciona normalmente, mas quando são inválidas, ao invés de retornar a mensagem ocorre o erro acima.

Obrigado.

[]s

Olá amigo,
Conseguiu solucionar o problema?
Estou nessa mesma guerra…
Abraços.