Verificaţi pentru o modificare de comportament în metodele buildValidatorFactory şi buildDefaultValidatorFactory

Această regulă steaguri orice utilizare a javax.validation.Validation.buildDefaultValidatorFactory() sau Validation.byDefaultProvider().configure().buildValidatorFactory() . The Liberty beanValidation-1.0 și beanValidation-1.1 implementări sunt furnizate de către Apache În Java EE 8, implementarea de validare a Bean-ului oferit de caracteristica Liberty beanValidation-2.0 a fost schimbat în Hibernate Validator ". Implementarea Apache Bean Validation necesită o aplicaţie pentru a crea un obiect ValidatorFactory negestionat şi ConstraintValidatorFactory returnează o instanţă ConstraintValidator gestionată de CDI. Dar, Hibernate Validator suportă doar generare de obiecte ConstraintValidator gestionate CDI cu un ValidatorFactory implicit furnizat de runtime-ul serverului. Acest server administrat ValidatorFactory utilizarea @Resource , @Inject , sau direct JNDI lookup.

Aplicațiile ar putea vedea o schimbare în comportament atunci când utilizați javax.validation.Validation.buildDefaultValidatorFactory() sau Validation.byDefaultProvider().configure().buildValidatorFactory() . Notă că alte metode de personalizare pot fi numite înainte buildValidatorFactory() este invocat, cum ar fi messageInterpolator() , traversableResolver() , parameterNameProvider() sau constraintValidatorFactory() .

În rezumat, utilizatorii care se așteaptă obiectele returnate de ConstraintValidatorFactory pentru a fi CDI gestionate va trebui să pună în aplicare modificări la codul lor de validare existente Bean.

Următorul cod este un exemplu de utilizare a validării bean-urilor care ar trebui să fie refactorizată:


//Original application behavior
Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(messageResourceInterpolator).buildValidatorFactory().getValidator();

Următorul cod arată corecţia pentru codul problematic:


//Recommended application behavior (potential Automated Fix)
@Inject    //@Resource or a jndi lookup of java:comp/ValidatorFactory could also be used to obtain the container's default ValidatorFactory
ValidatorFactory validatorFactory;
Validator validator =  validatorFactory.usingContext().messageInterpolator(messageResourceInterpolator).getValidator();

Pentru mai multe informaţii despre configurarea validării în WebSphere Liberty, vedeţi documentaţia Bean Validation 2.0.