diff options
author | Denis <denis@vaadin.com> | 2017-01-16 16:42:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-16 16:42:03 +0200 |
commit | fd92d1f134962fdd3302cd5ad575e072a3dae7bd (patch) | |
tree | 0372a14500ce28f7064ee90bb0e42616c1c24dc2 | |
parent | 352d12d977157f261c2e585e9e0a6f6354812c83 (diff) | |
download | vaadin-framework-fd92d1f134962fdd3302cd5ad575e072a3dae7bd.tar.gz vaadin-framework-fd92d1f134962fdd3302cd5ad575e072a3dae7bd.zip |
Add separate modules to test Bean Validation lib necessity. (#8249)
* Add separate modules to test Bean Validation lib necessity.
Fixes #8141
-rw-r--r-- | server/src/main/java/com/vaadin/data/util/BeanUtil.java | 12 | ||||
-rw-r--r-- | test/bean-api-validation/pom.xml | 41 | ||||
-rw-r--r-- | test/bean-api-validation/src/test/java/com/vaadin/data/BeanValidationTest.java | 63 | ||||
-rw-r--r-- | test/bean-impl-validation/pom.xml | 50 | ||||
-rw-r--r-- | test/bean-impl-validation/src/test/java/com/vaadin/data/BeanValidationTest.java | 63 | ||||
-rw-r--r-- | test/pom.xml | 2 |
6 files changed, 229 insertions, 2 deletions
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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test</artifactId> + <version>8.0-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-bean-api-validation</artifactId> + <packaging>jar</packaging> + + <build> + <plugins> + <plugin> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-maven-plugin</artifactId> + <version>${jetty.version}</version> + <configuration> + <scanIntervalSeconds>-1</scanIntervalSeconds> + <stopPort>8081</stopPort> + <stopWait>5</stopWait> + <stopKey>foo</stopKey> + </configuration> + <executions> + <!-- start and stop jetty (running our app) when running + integration tests --> + <execution> + <id>start-jetty</id> + <phase></phase> + </execution> + <execution> + <id>stop-jetty</id> + <phase></phase> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> 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<Bean> 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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>com.vaadin</groupId> + <artifactId>vaadin-test</artifactId> + <version>8.0-SNAPSHOT</version> + </parent> + <artifactId>vaadin-test-bean-impl-validation</artifactId> + <packaging>jar</packaging> + + + <dependencies> + <dependency> + <groupId>javax.validation</groupId> + <artifactId>validation-api</artifactId> + <version>1.1.0.Final</version> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-maven-plugin</artifactId> + <version>${jetty.version}</version> + <configuration> + <scanIntervalSeconds>-1</scanIntervalSeconds> + <stopPort>8081</stopPort> + <stopWait>5</stopWait> + <stopKey>foo</stopKey> + </configuration> + <executions> + <!-- start and stop jetty (running our app) when running + integration tests --> + <execution> + <id>start-jetty</id> + <phase></phase> + </execution> + <execution> + <id>stop-jetty</id> + <phase></phase> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> 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<Bean> 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 @@ <module>vaadinservletconfiguration-widget-set</module> <module>spring-boot</module> <module>cdi</module> + <module>bean-api-validation</module> + <module>bean-impl-validation</module> </modules> <build> |