From fd92d1f134962fdd3302cd5ad575e072a3dae7bd Mon Sep 17 00:00:00 2001 From: Denis Date: Mon, 16 Jan 2017 16:42:03 +0200 Subject: [PATCH] Add separate modules to test Bean Validation lib necessity. (#8249) * Add separate modules to test Bean Validation lib necessity. Fixes #8141 --- .../java/com/vaadin/data/util/BeanUtil.java | 12 +++- test/bean-api-validation/pom.xml | 41 ++++++++++++ .../com/vaadin/data/BeanValidationTest.java | 63 +++++++++++++++++++ test/bean-impl-validation/pom.xml | 50 +++++++++++++++ .../com/vaadin/data/BeanValidationTest.java | 63 +++++++++++++++++++ test/pom.xml | 2 + 6 files changed, 229 insertions(+), 2 deletions(-) create mode 100644 test/bean-api-validation/pom.xml create mode 100644 test/bean-api-validation/src/test/java/com/vaadin/data/BeanValidationTest.java create mode 100644 test/bean-impl-validation/pom.xml create mode 100644 test/bean-impl-validation/src/test/java/com/vaadin/data/BeanValidationTest.java diff --git a/server/src/main/java/com/vaadin/data/util/BeanUtil.java b/server/src/main/java/com/vaadin/data/util/BeanUtil.java index 6faef0ff89..2a6fb4834e 100644 --- a/server/src/main/java/com/vaadin/data/util/BeanUtil.java +++ b/server/src/main/java/com/vaadin/data/util/BeanUtil.java @@ -20,6 +20,7 @@ import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; @@ -229,14 +230,21 @@ public final class BeanUtil implements Serializable { private static boolean isAvailable() { try { - Class.forName("javax.validation.Validation"); + Class clazz = Class.forName("javax.validation.Validation"); + Method method = clazz.getMethod("buildDefaultValidatorFactory"); + method.invoke(null); return true; - } catch (ClassNotFoundException e) { + } catch (ClassNotFoundException | NoSuchMethodException + | InvocationTargetException e) { Logger.getLogger(BeanValidator.class.getName()) .fine("A JSR-303 bean validation implementation not found on the classpath. " + BeanValidator.class.getSimpleName() + " cannot be used."); return false; + } catch (IllegalAccessException | IllegalArgumentException e) { + throw new RuntimeException( + "Unable to invoke javax.validation.Validation.buildDefaultValidatorFactory()", + e); } } diff --git a/test/bean-api-validation/pom.xml b/test/bean-api-validation/pom.xml new file mode 100644 index 0000000000..39f5ec2afe --- /dev/null +++ b/test/bean-api-validation/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + com.vaadin + vaadin-test + 8.0-SNAPSHOT + + vaadin-test-bean-api-validation + jar + + + + + org.eclipse.jetty + jetty-maven-plugin + ${jetty.version} + + -1 + 8081 + 5 + foo + + + + + start-jetty + + + + stop-jetty + + + + + + + + diff --git a/test/bean-api-validation/src/test/java/com/vaadin/data/BeanValidationTest.java b/test/bean-api-validation/src/test/java/com/vaadin/data/BeanValidationTest.java new file mode 100644 index 0000000000..2c9bcb5895 --- /dev/null +++ b/test/bean-api-validation/src/test/java/com/vaadin/data/BeanValidationTest.java @@ -0,0 +1,63 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.data; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.ui.TextField; + +/** + * @author Vaadin Ltd + * + */ +public class BeanValidationTest { + + public static class Bean { + + private String property; + + public String getProperty() { + return property; + } + + public void setProperty(String property) { + this.property = property; + } + + } + + @Test + public void binderWorksWithoutBeanValidationLib() { + try { + Class.forName("javax.validation.Validation"); + Assert.fail(); + } catch (ClassNotFoundException ignored) { + } + + Binder binder = new Binder<>(Bean.class); + + TextField field = new TextField(); + binder.forField(field).bind("property"); + + Bean bean = new Bean(); + binder.setBean(bean); + + field.setValue("foo"); + Assert.assertEquals(field.getValue(), bean.getProperty()); + + } +} diff --git a/test/bean-impl-validation/pom.xml b/test/bean-impl-validation/pom.xml new file mode 100644 index 0000000000..1e76c87a7a --- /dev/null +++ b/test/bean-impl-validation/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + com.vaadin + vaadin-test + 8.0-SNAPSHOT + + vaadin-test-bean-impl-validation + jar + + + + + javax.validation + validation-api + 1.1.0.Final + + + + + + + org.eclipse.jetty + jetty-maven-plugin + ${jetty.version} + + -1 + 8081 + 5 + foo + + + + + start-jetty + + + + stop-jetty + + + + + + + + diff --git a/test/bean-impl-validation/src/test/java/com/vaadin/data/BeanValidationTest.java b/test/bean-impl-validation/src/test/java/com/vaadin/data/BeanValidationTest.java new file mode 100644 index 0000000000..a3b2fdc2c0 --- /dev/null +++ b/test/bean-impl-validation/src/test/java/com/vaadin/data/BeanValidationTest.java @@ -0,0 +1,63 @@ +/* + * Copyright 2000-2016 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.data; + +import javax.validation.Validation; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.ui.TextField; + +/** + * @author Vaadin Ltd + * + */ +public class BeanValidationTest { + + public static class Bean { + + private String property; + + public String getProperty() { + return property; + } + + public void setProperty(String property) { + this.property = property; + } + + } + + @Test + public void binderWorksWithoutBeanValidationImpl() { + // Just to make sure that it's available at the compilation time and in + // runtime + Assert.assertNotNull(Validation.class); + + Binder binder = new Binder<>(Bean.class); + + TextField field = new TextField(); + binder.forField(field).bind("property"); + + Bean bean = new Bean(); + binder.setBean(bean); + + field.setValue("foo"); + Assert.assertEquals(field.getValue(), bean.getProperty()); + + } +} diff --git a/test/pom.xml b/test/pom.xml index 4fb2c5befe..d0a148cbfa 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -99,6 +99,8 @@ vaadinservletconfiguration-widget-set spring-boot cdi + bean-api-validation + bean-impl-validation -- 2.39.5