Rechercher un changement de comportement dans les méthodes buildValidatorFactory et buildDefaultValidatorFactory

Cette règle marque toute utilisation de javax.validation.Validation.buildDefaultValidatorFactory() ou Validation.byDefaultProvider().configure().buildValidatorFactory(). Les implémentations Liberty beanValidation-1.0 et beanValidation-1.1 sont fournies par Apache Bean Validation. Dans Java EE 8, l'implémentation Bean Validation fournie par la fonction Liberty beanValidation-2.0 a été remplacée par Hibernate Validator. L'implémentation Apache Bean Validation requiert qu'une application crée un objet ValidatorFactory non géré et que ConstraintValidatorFactory renvoie une instance ConstraintValidator gérée par CDI. Toutefois, Hibernate Validator prend uniquement en charge la génération d'objets ConstraintValidator gérés par CDI avec un élément ValidatorFactory par défaut fourni par l'exécution du serveur. Cet objet ValidatorFactory géré par le serveur peut être obtenu via @Resource, @Inject ou une recherche JNDI directe.

Les applications peuvent constater un changement de comportement lorsqu'elles utilisent javax.validation.Validation.buildDefaultValidatorFactory() ou Validation.byDefaultProvider().configure().buildValidatorFactory(). Notez que d'autres méthodes de personnalisation peuvent être appelées avant buildValidatorFactory(), par exemple messageInterpolator(), traversableResolver(), parameterNameProvider() ou constraintValidatorFactory().

En résumé, les utilisateurs pour lesquels les objets renvoyés par ConstraintValidatorFactory doivent être gérés par CDI doivent apporter des modifications à leur code Bean Validation existant.

Le code suivant est un exemple d'utilisation de Bean Validation devant être restructuré :

//Comportement original de l'application
Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(messageResourceInterpolator).buildValidatorFactory().getValidator();

Le code suivant corrige le code problématique :

//Comportement recommandé de l'application (possible correctif
rapide)
@Inject    //L'annotation @Resource ou une recherche jndi de
java:comp/ValidatorFactory peut également être utilisée pour obtenir l'objet
ValidatorFactory par défaut du conteneur
ValidatorFactory validatorFactory;
Validator validator =  validatorFactory.usingContext().messageInterpolator(messageResourceInterpolator).getValidator();

Pour plus d'informations sur la configuration de la validation dans WebSphere Liberty, voir la documentation Bean Validation 2.0.