이 규칙은 다음의 사용을 플래그 지정합니다. javax.validation.Validation.buildDefaultValidatorFactory() 또는 Validation.byDefaultProvider().configure().buildValidatorFactory() . Liberty beanValidation-1.0 및 beanValidation-1.1 구현은 Apache Bean 유효성 검증에 의해 제공됩니다. Java EE 8에서 Liberty 기능이 제공하는 Bean 유효성 검증 구현 beanValidation-2.0 Hibernate Validator로 변경되었습니다. Apache Bean Validation 구현에는 관리되지 않는 ValidatorFactory 오브젝트를 작성하기 위한 애플리케이션이 필요하며 ConstraintValidatorFactory는 CDI 관리 ConstraintValidator 인스턴스를 리턴합니다. 그러나 Hibernate Validator는 서버 런타임에서 제공하는 기본 ValidatorFactory를 사용하여 CDI 관리 ConstraintValidator 오브젝트 생성만 지원합니다. 이 서버 관리 ValidatorFactory 는 다음을 사용하여 확보할 수 있습니다. @Resource , @Inject 또는 직접 JNDI 찾아보기를 수행할 수 있습니다.
애플리케이션은 다음을 사용할 때 동작의 변경을 볼 수 있습니다. javax.validation.Validation.buildDefaultValidatorFactory() 또는 Validation.byDefaultProvider().configure().buildValidatorFactory() . 다른 사용자 정의 메소드는 이전에 호출할 수 있습니다. buildValidatorFactory() 다음과 같이 호출됩니다. messageInterpolator() , traversableResolver() , parameterNameProvider() 또는 constraintValidatorFactory() .
요약하면, 오브젝트가 리턴될 것으로 예상하는 사용자는 ConstraintValidatorFactory CDI 관리 대상이 되려면 기존 Bean 유효성 검증 코드에 대한 변경사항을 구현해야 합니다.
다음 코드는 리팩토링해야 하는 Bean Validation 사용의 예입니다.
//Original application behavior
Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(messageResourceInterpolator).buildValidatorFactory().getValidator();
다음 코드는 문제가 있는 코드에 대한 수정사항을 보여줍니다.
//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();
WebSphere Liberty에서 유효성 검증 구성에 대한 자세한 정보는 Bean Validation 2.0 문서를 참조하십시오.