Diese Regel markiert jede Verwendung von javax.validation.Validation.buildDefaultValidatorFactory() oder Validation.byDefaultProvider().configure().buildValidatorFactory() . Liberty beanValidation-1.0 und beanValidation-1.1 Implementierungen werden von Apache Bean Validation bereitgestellt. In Java EE 8 die vom Feature Liberty bereitgestellte Bean Validation-Implementierung beanValidation-2.0 wurde in Hibernate Validator geändert. Die Apache Bean Validation-Implementierung setzt eine Anwendung für die Erstellung eines nicht verwalteten ValidatorFactory-Objekts voraus, und ConstraintValidatorFactory gibt eine von CDI verwaltete ConstraintValidator-Instanz zurück. Hibernate Validator unterstützt jedoch nur die Generierung CDI-verwalteter ConstraintValidator-Objekte mit einer Standard-ValidatorFactory-Instanz, die von der Serverlaufzeitumgebung bereitgestellt wird. Diese serververwaltete ValidatorFactory kann mithilfe von @Resource , @Inject oder direkte JNDI-Suche.
Anwendungen könnten bei der Verwendung von eine Änderung des Verhaltens feststellen javax.validation.Validation.buildDefaultValidatorFactory() oder Validation.byDefaultProvider().configure().buildValidatorFactory() . Beachten Sie, dass andere Anpassungsmethoden aufgerufen werden können, bevor buildValidatorFactory() wird aufgerufen, z. B. messageInterpolator() , traversableResolver() , parameterNameProvider() oder constraintValidatorFactory() .
Zusammenfassend lässt sich sagen, dass Benutzer, die die von zurückgegebenen Objekte erwarten, ConstraintValidatorFactory Damit CDI verwaltet werden kann, müssen Änderungen an ihrem vorhandenen Bean Validation-Code implementiert werden.
Der folgende Code ist ein Beispiel für die Verwendung von Bean Validation, die ein Refactoring erfordert:
//Original application behavior
Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(messageResourceInterpolator).buildValidatorFactory().getValidator();
Der folgende Code ist der Fix für den problembehafteten Code:
//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();
Weitere Informationen zur Konfiguration der Validierung in WebSphere Liberty finden Sie in der Dokumentation zu Bean Validation 2.0.