Esta regra sinaliza qualquer uso de javax.validation.Validation.buildDefaultValidatorFactory() ou Validation.byDefaultProvider().configure().buildValidatorFactory(). As implementações beanValidation-1.0 e beanValidation-1.1 do Liberty são fornecidas por Validação do Bean do Apache. No Java Platform, Enterprise Edition 8, a implementação de Validação do Bean fornecida pelo recurso do Liberty beanValidation-2.0 foi mudada para o 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 ValidatorFactory gerenciado pelo servidor pode ser obtido por meio do uso de @Resource, @Inject ou consulta direta do JNDI.
Os aplicativos poderiam ver uma mudança de comportamento ao usar javax.validation.Validation.buildDefaultValidatorFactory() ou Validation.byDefaultProvider().configure().buildValidatorFactory(). Observe que outros métodos de customização podem ser chamados antes de buildValidatorFactory() ser chamado, como messageInterpolator(), traversableResolver(), parameterNameProvider() ou constraintValidatorFactory().
Em resumo, os usuários que esperam que os objetos retornados pela ConstraintValidatorFactory sejam gerenciados por CDI precisarão 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 quick 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.