aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis <denis@vaadin.com>2017-01-16 16:42:03 +0200
committerGitHub <noreply@github.com>2017-01-16 16:42:03 +0200
commitfd92d1f134962fdd3302cd5ad575e072a3dae7bd (patch)
tree0372a14500ce28f7064ee90bb0e42616c1c24dc2
parent352d12d977157f261c2e585e9e0a6f6354812c83 (diff)
downloadvaadin-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.java12
-rw-r--r--test/bean-api-validation/pom.xml41
-rw-r--r--test/bean-api-validation/src/test/java/com/vaadin/data/BeanValidationTest.java63
-rw-r--r--test/bean-impl-validation/pom.xml50
-rw-r--r--test/bean-impl-validation/src/test/java/com/vaadin/data/BeanValidationTest.java63
-rw-r--r--test/pom.xml2
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>