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() . Liberty beanValidation-1.0 et beanValidation-1.1 Les implémentations sont fournies par la validation de bean Apache . Dans Java EE 8, implémentation de la validation de bean fournie par la fonction Liberty beanValidation-2.0 a été remplacé par le valideur Hibernate . 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. Ce serveur géré par ValidatorFactory peut être obtenu à l'aide de @Resource , @Inject ou recherche JNDI directe.

Les applications peuvent voir un changement de comportement lors de l'utilisation javax.validation.Validation.buildDefaultValidatorFactory() ou Validation.byDefaultProvider().configure().buildValidatorFactory() . Notez que d'autres méthodes de personnalisation peuvent être appelées avant buildValidatorFactory() est appelée, par exemple messageInterpolator() , traversableResolver() , parameterNameProvider() ou constraintValidatorFactory() .

En résumé, les utilisateurs qui attendent les objets renvoyés par ConstraintValidatorFactory dans le cadre de la gestion de CDI, il sera nécessaire d'implémenter les modifications apportées à leur code de validation de bean existant.

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


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

Le code suivant corrige le code problématique :


//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();

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