i having userservice makes operations on user entity. created own annotation , constraintvalidator class implementation
i need have userservice injected constraintvalidator. and, spring docs says, after registering bean:
<bean id="validator" class="org.springframework.validation.beanvalidation.localvalidatorfactorybean"/> springconstraingvalidatorfactory registered default can @autowired service it. (source: http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/validation.html#validation-beanvalidation-spring-constraints)
unfortunatelly doesnt work me. recieve stacktrace nullpointerexception on field (inside class implements constraintvalidator):
@autowired private userservice userservice; //here and on call service
@override public boolean isvalid(string username, constraintvalidatorcontext constraintvalidatorcontext) { personservice.dosomethingwithservice(); //here return true; } so means, userservice not injected properly. have tried use applicationcontextaware - implement in constraintvalidator class, context , find bean:
(userservice) context.getbean("userservice"); but didnt help.. have no idea what's wrong code. , finally, stacktrace, contains lot of exceptions, including 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: not commit jpa transaction; nested exception javax.persistence.rollbackexception: error while committing 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 transaction org.hibernate.jpa.internal.transactionimpl.commit(transactionimpl.java:94) org.springframework.orm.jpa.jpatransactionmanager.docommit(jpatransactionmanager.java:517) i use spring 4 if necessary , grateful help, thanks!
my environment spring-boot, , below code org.springframework.stereotype.component annotation validation class working, fyr.
@component public class foovalidator implements constraintvalidator<foo, object> { @autowired myservice service; @override public void initialize(foo constraintannotation) { } @override public boolean isvalid(object value, constraintvalidatorcontext context) { return service.isvalid(value); } }
Comments
Post a Comment