From be5404d3f7a8608e742f9b637cba40c3d105d40f Mon Sep 17 00:00:00 2001 From: Henri Sara Date: Thu, 22 Dec 2011 12:53:52 +0200 Subject: [PATCH] Move bean validation implementation availability check to BeanFieldGroup. The check for bean validation implementation availability has to be performed using reflection APIs because otherwise, at least the bean validation API JAR would be needed at runtime. --- .../data/fieldbinder/BeanFieldGroup.java | 31 ++++++++++++++++++- .../validator/BeanValidationValidator.java | 19 ------------ 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/com/vaadin/data/fieldbinder/BeanFieldGroup.java b/src/com/vaadin/data/fieldbinder/BeanFieldGroup.java index bd4b519a95..ab1e1a5ab2 100644 --- a/src/com/vaadin/data/fieldbinder/BeanFieldGroup.java +++ b/src/com/vaadin/data/fieldbinder/BeanFieldGroup.java @@ -3,6 +3,8 @@ */ package com.vaadin.data.fieldbinder; +import java.lang.reflect.Method; + import com.vaadin.data.Item; import com.vaadin.data.util.BeanItem; import com.vaadin.data.validator.BeanValidationValidator; @@ -12,6 +14,8 @@ public class BeanFieldGroup extends FieldGroup { private Class beanType; + private static Boolean beanValidationImplementationAvailable = null; + public BeanFieldGroup(Class beanType) { this.beanType = beanType; } @@ -115,7 +119,7 @@ public class BeanFieldGroup extends FieldGroup { protected void configureField(Field field) { super.configureField(field); // Add Bean validators if there are annotations - if (BeanValidationValidator.isImplementationAvailable()) { + if (isBeanValidationImplementationAvailable()) { BeanValidationValidator validator = new BeanValidationValidator( beanType, getPropertyId(field).toString()); field.addValidator(validator); @@ -125,4 +129,29 @@ public class BeanFieldGroup extends FieldGroup { } } + /** + * Checks whether a bean validation implementation (e.g. Hibernate Validator + * or Apache Bean Validation) is available. + * + * TODO move this method to some more generic location + * + * @return true if a JSR-303 bean validation implementation is available + */ + protected static boolean isBeanValidationImplementationAvailable() { + if (beanValidationImplementationAvailable != null) { + return beanValidationImplementationAvailable; + } + try { + Class validationClass = Class + .forName("javax.validation.Validation"); + Method buildFactoryMethod = validationClass + .getMethod("buildDefaultValidatorFactory"); + Object factory = buildFactoryMethod.invoke(null); + beanValidationImplementationAvailable = (factory != null); + } catch (Exception e) { + // no bean validation implementation available + beanValidationImplementationAvailable = false; + } + return beanValidationImplementationAvailable; + } } \ No newline at end of file diff --git a/src/com/vaadin/data/validator/BeanValidationValidator.java b/src/com/vaadin/data/validator/BeanValidationValidator.java index 94f9fe28d4..90f330c11d 100644 --- a/src/com/vaadin/data/validator/BeanValidationValidator.java +++ b/src/com/vaadin/data/validator/BeanValidationValidator.java @@ -38,7 +38,6 @@ public class BeanValidationValidator implements Validator { private static final long serialVersionUID = 1L; private static ValidatorFactory factory; - private static Boolean implementationAvailable = null; private transient javax.validation.Validator javaxBeanValidator; private String propertyName; @@ -171,22 +170,4 @@ public class BeanValidationValidator implements Validator { return javaxBeanValidator; } - /** - * Checks whether a bean validation implementation (e.g. Hibernate Validator - * or Apache Bean Validation) is available. - * - * @return true if a JSR-303 bean validation implementation is available - */ - public static boolean isImplementationAvailable() { - if (implementationAvailable == null) { - try { - getJavaxBeanValidatorFactory(); - implementationAvailable = true; - } catch (Exception e) { - implementationAvailable = false; - } - } - return implementationAvailable; - } - } \ No newline at end of file -- 2.39.5