Javax.validation.ConstraintViolationException: validation failed for classes

0 respostas
ruds

Criei uma annotation para validar um campo especifico no meu modelo. A validação de fato funciona, porém ao invés de retornar uma mensagem de erro na pagina XHTML retorna uma Exception. Alguém saberia informar porque isso acontece? Será que tem alguma coisa a ver com os sets ou o java.sql.Date? Desde já grato! E perdão se coloquei a pergunta no lugar errado.

javax.faces.el.EvaluationException: javax.validation.ConstraintViolationException: validation failed for classes [com.placa.model.Placa] during persist time for groups [javax.validation.groups.Default, ]
	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:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.validation.ConstraintViolationException: validation failed for classes [com.placa.model.Placa] during persist time for groups [javax.validation.groups.Default, ]
	at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:132)
	at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:71)
	at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:159)
	at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:65)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
	at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:69)
	at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:179)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
	at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
	at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:800)
	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:774)
	at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:778)
	at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:668)
	at com.placa.daoimpl.PlacaDAOJPAImp.save(PlacaDAOJPAImp.java:21)
	at com.placa.regrasnegocio.PlacaRN.salvaPlaca(PlacaRN.java:16)
	at com.placa.web.PlacaMB.salvarPlaca(PlacaMB.java:40)
	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 org.apache.el.parser.AstValue.invoke(AstValue.java:278)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 28 more
Annotation

    @Constraint(validatedBy = CurrentOrFutureDayValidator.class)
    @Documented
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface CurrentOrFutureDay {
	
	String message() default "Data deve ser igual ou superior a atual";
	Class<?>[] groups() default { };
	Class<? extends Payload>[] payload() default { };
    }

Classe de Validação

import java.sql.Date;
import java.util.GregorianCalendar;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class CurrentOrFutureDayValidator implements ConstraintValidator<CurrentOrFutureDay, Date> {

	@Override
	public void initialize(CurrentOrFutureDay annotation) {
		
	}

	@Override
	public boolean isValid(Date date,
			ConstraintValidatorContext context) {

		Date atual = new Date(new GregorianCalendar().getTimeInMillis());
	
		System.out.println("Data atual:" + atual);
		System.out.println("Data digitada:" + date);
		System.out.println(date.before(atual));
		System.out.println(context.getDefaultConstraintMessageTemplate());
		return (!date.before(atual));
	}

Classe Validada

@Entity
@Table(name="Placa")
public class Placa implements Serializable{
	
	private static final long serialVersionUID = -2281062167675094359L;
	
	@Id
	@GeneratedValue
	@Column(name="id")
	private Long id;
	
	@CurrentOrFutureDay(message="Data deve ser igual"
						+ " ou superior a data atual")
	@Column(name="data_inicial", nullable=false)
	private Date dataInicialDate;
	
//	@Transient
//	@Pattern(regexp="\\d{1,2}/\\d{1,2}/\\d{4}",
//	 message="Data com formato inválido")
//	private String dataInicial;
	
	@Column(name="data_final", nullable=false)
	private Date dataFinalDate;
	
//	@Transient
//	@Pattern(regexp="\\d{1,2}/\\d{1,2}/\\d{4}",
//	 message="Data com formato inválido")
//	private String dataFinal;
	
	public void setDataInicial(String dataInicial) {
		this.dataInicialDate = DateUtil.StringToSqlDate(dataInicial);
	}

	public String getDataFinal() {
		if(dataFinalDate==null)
			return null;
		else
			return DateUtil.SqlDateToString(dataFinalDate);
	}

	public void setDataFinal(String dataFinal) {
		this.dataFinalDate = DateUtil.StringToSqlDate(dataFinal);
		}


	public Date getDataInicialDate() {
		return dataInicialDate;
	}


	public void setDataInicialDate(String dataInicialDate) {
		this.dataInicialDate = DateUtil.StringToSqlDate(dataInicialDate);
	}


	public Date getDataFinalDate() {
		return dataFinalDate;
	}


	public void setDataFinalDate(String dataFinalDate) {
		this.dataFinalDate = DateUtil.StringToSqlDate(dataFinalDate);
	}
    }
Criado 10 de abril de 2015
Respostas 0
Participantes 1