此規則會標示是否使用 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 驗證器。 Apache Bean 驗證實作要求應用程式建立未受管理的 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 驗證用法:
//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 驗證 2.0 文件。