Browse Source

Add separate modules to test Bean Validation lib necessity. (#8249)

* Add separate modules to test Bean Validation lib necessity.

Fixes #8141
tags/8.0.0.beta2
Denis 7 years ago
parent
commit
fd92d1f134

+ 10
- 2
server/src/main/java/com/vaadin/data/util/BeanUtil.java View File

@@ -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);
}
}


+ 41
- 0
test/bean-api-validation/pom.xml View File

@@ -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>

+ 63
- 0
test/bean-api-validation/src/test/java/com/vaadin/data/BeanValidationTest.java View File

@@ -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());

}
}

+ 50
- 0
test/bean-impl-validation/pom.xml View File

@@ -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>

+ 63
- 0
test/bean-impl-validation/src/test/java/com/vaadin/data/BeanValidationTest.java View File

@@ -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());

}
}

+ 2
- 0
test/pom.xml View File

@@ -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>

Loading…
Cancel
Save