I wanted to place Hibernate Validator annotations on setters because it's when I set something that I wan't it to be validated but it doesn't work.
Sample setter
Code:
@NotNull
public void setLocale(Locale locale) { ... }
An exception is raised:
Code:
java.lang.IllegalStateException: Could not get property value
at org.hibernate.validator.ClassValidator.getMemberValue(ClassValidator.java:537)
at org.hibernate.validator.ClassValidator.getInvalidValues(ClassValidator.java:383)
at org.hibernate.validator.ClassValidator.getInvalidValues(ClassValidator.java:351)
at org.hibernate.validator.event.ValidateEventListener.validate(ValidateEventListener.java:139)
at org.hibernate.validator.event.ValidateEventListener.onPreInsert(ValidateEventListener.java:172)
at org.hibernate.action.EntityInsertAction.preInsert(EntityInsertAction.java:160)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:53)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
...
Caused by: java.lang.IllegalArgumentException: Invoking setLocale with wrong parameters
at org.hibernate.annotations.common.reflection.java.JavaXMethod.invoke(JavaXMethod.java:39)
at org.hibernate.validator.ClassValidator.getMemberValue(ClassValidator.java:534)
... 45 more
Caused by: java.lang.IllegalArgumentException: wrong number of arguments
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.hibernate.annotations.common.reflection.java.JavaXMethod.invoke(JavaXMethod.java:33)
... 46 more
I would have expected associated getter or attribute to be used.
Using Hibernate Validator 3.0.0 with Hibernate Core 3.2.6.