I have some UserService that performs operations on a User object. I created my own annotation and the ConstraintValidator class as an implementation
I need this UserService to be introduced in ConstraintValidator. And, as the docs of spring say, after registering the bean:
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
SpringConstraingValidatorFactory is registered by default, so I can easily @Autowired my service. (source: http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/validation.html#validation-beanvalidation-spring-constraints )
Unfortunately, this does not work for me. I get a stacktrace with a NullPointerException in a field (inside a class that implements ConstraintValidator):
@Autowired
private UserService userService;
and when calling the service
@Override
public boolean isValid(String username, ConstraintValidatorContext constraintValidatorContext) {
personService.doSomethingWithService();
return true;
}
, , UserService . ApplicationContextAware - ConstraintValidator, bean:
(UserService) context.getBean("userService");
.. , . , , stacktrace, , NullPointer RollbackException.
java.lang.NullPointerException
com.reportme.model.validation.UsernameAvailableValidator.isValid(UsernameAvailableValidator.java:20)
com.reportme.model.validation.UsernameAvailableValidator.isValid(UsernameAvailableValidator.java:9)
org.hibernate.validator.internal.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:308)
org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:180)
org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:124)
org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:85)
org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:463)
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction
org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:526)
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757)
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726)
javax.persistence.RollbackException: Error while committing the transaction
org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:94)
org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517)
spring 4, , !