Diese Regel markiert die Verwendung der Methoden javax.validation.Validation.buildDefaultValidatorFactory() und Validation.byDefaultProvider().configure().buildValidatorFactory(). Die Liberty-Implementierungen beanValidation-1.0 und beanValidation-1.1 werden von Apache Bean Validation bereitgestellt. In Java EE 8 wurde die Bean Validation-Implementierung, die vom Liberty-Feature beanValidation-2.0 bereitgestellt wird, 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 vom Server verwaltete ValidatorFactory-Instanz kann mit @Resource, @Inject oder einer direkten JNDI-Suche abgerufen werden.
Bei der Verwendung von javax.validation.Validation.buildDefaultValidatorFactory() und Validation.byDefaultProvider().configure().buildValidatorFactory() könnte in Anwendungen ein geändertes Verhalten zu beobachten sein. Beachten Sie, dass vor dem Aufruf von buildValidatorFactory() andere Anpassungsmethoden wie messageInterpolator(), traversableResolver(), parameterNameProvider() oder constraintValidatorFactory() aufgerufen werden können.
Benutzer, die erwarten, dass es sich bei den von ConstraintValidatorFactory zurückgegebenen Objekten um von CDI verwaltete Objekte handelt, müssen Änderungen an ihrem vorhandenen Bean Validation-Code implementieren.
Der folgende Code ist ein Beispiel für die Verwendung von Bean Validation, die ein Refactoring erfordert:
//Ursprüngliches Anwendungsverhalten
Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(messageResourceInterpolator).buildValidatorFactory().getValidator();
|
Der folgende Code ist der Fix für den problembehafteten Code:
//Empfohlenes Anwendungsverhalten (potenzielle Schnellkorrektur)
@Inject //Zum Abrufen der Standard-ValidatorFactory-Instanz des Containers kann auch eine Ressourcen- oder JNDI-Suche verwendet werden
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.