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(). Las implementaciones beanValidation-1.0 y beanValidation-1.1 de Liberty las proporciona Apache Bean Validation. En Java EE 8, la implementación de Bean Validation proporcionada por la característica de Liberty beanValidation-2.0 se cambió 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 ValidatorFactory gestionado por servidor se puede obtener mediante @Resource, @Inject o la búsqueda JNDI directa.

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

En resumen, los usuarios que esperan que los objetos devueltos por ConstraintValidatorFactory estén gestionados por CDI, deben implementar cambios en su código de Bean Validation existente.

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

//Comportamiento original de la aplicación
Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(messageResourceInterpolator).buildValidatorFactory().getValidator();

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

//Comportamiento de la aplicación recomendado (posible arreglo rápido)
@Inject    //También se puede utilizar @Resource o una búsqueda jndi de java:comp/ValidatorFactory para obtener el ValidatorFactory predeterminado del contenedor
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.