Esta regra sinaliza qualquer uso de javax.validation.Validation.buildDefaultValidatorFactory() ou Validation.byDefaultProvider().configure().buildValidatorFactory() . O Liberty beanValidation-1.0 e beanValidation-1.1 As implementações são fornecidas pelo Apache Bean Validation. No Java EE 8, a implementação do Bean Validation fornecida pelo recurso Liberty beanValidation-2.0 foi alterado para Hibernate Validator. A implementação da Validação do Bean do Apache requer um aplicativo para criar um objeto ValidatorFactory não gerenciado e a ConstraintValidatorFactory retorna uma instância ConstraintValidator gerenciada por CDI. No entanto, o Hibernate Validator suporta apenas a geração de objetos ConstraintValidator gerenciados por CDI com uma ValidatorFactory padrão fornecida pelo tempo de execução do servidor. Esse servidor gerenciado ValidatorFactory pode ser obtido por meio do uso de @Resource , @Inject ou consulta JNDI direta.
Os aplicativos poderiam ver uma mudança no comportamento ao usar javax.validation.Validation.buildDefaultValidatorFactory() ou Validation.byDefaultProvider().configure().buildValidatorFactory() . Observe que outros métodos de customização podem ser chamados antes buildValidatorFactory() é chamado, como messageInterpolator() , traversableResolver() , parameterNameProvider() ou constraintValidatorFactory() .
Em resumo, os usuários que esperam os objetos retornados por ConstraintValidatorFactory ser gerenciado pelo CDI precisará implementar mudanças em seu código de Validação de Bean existente.
O código a seguir é um exemplo de uso da Validação de Bean que deve ser refatorada:
//Original application behavior
Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(messageResourceInterpolator).buildValidatorFactory().getValidator();
O código a seguir mostra a correção para o 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 obter mais informações sobre como configurar a validação no WebSphere Liberty, consulte a documentação Bean Validation 2.0.