Comprobar si hay un cambio de comportamiento en los métodos buildValidatorFactory y buildDefaultValidatorFactory

Esta regla marca cualquier uso de javax.validation.Validation.buildDefaultValidatorFactory() o Validation.byDefaultProvider().configure().buildValidatorFactory() . Liberty beanValidation-1.0 y beanValidation-1.1 Apache Bean Validation proporciona las implementaciones. En Java EE 8, la implementación de validación de beans proporcionada por la característica Liberty beanValidation-2.0 se ha cambiado a Hibernate Validator. La implementación de Apache Bean Validation necesita que una aplicación cree un objeto ValidatorFactory no gestionado y ConstraintValidatorFactory devuelve una instancia ConstraintValidator gestionada por CDI. Sin embargo, Hibernate Validator solo da soporte a la generación de objetos ConstraintValidator gestionados por CDI con un ValidatorFactory predeterminado proporcionado por el tiempo de ejecución del servidor. Este servidor gestionado ValidatorFactory se puede obtener mediante el uso de @Resource , @Inject , o búsqueda JNDI directa.

Las aplicaciones podrían ver un cambio en el comportamiento al utilizar javax.validation.Validation.buildDefaultValidatorFactory() o Validation.byDefaultProvider().configure().buildValidatorFactory() . Tenga en cuenta que se pueden invocar otros métodos de personalización antes de buildValidatorFactory() se invoca, como por ejemplo messageInterpolator() , traversableResolver() , parameterNameProvider() , o constraintValidatorFactory() .

En resumen, los usuarios que esperan los objetos devueltos por ConstraintValidatorFactory para ser gestionado por CDI tendrá que implementar cambios en su código de validación de bean existente.

El código siguiente es un ejemplo del uso de Bean Validation que se debe refactorizar:


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

El código siguiente muestra el arreglo para el código problemático:


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

Para obtener más información sobre cómo configurar la validación en WebSphere Liberty, consulte la documentación de Bean Validation 2.0.