* Add separate modules to test Bean Validation lib necessity. Fixes #8141tags/8.0.0.beta2
@@ -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); | |||
} | |||
} | |||
@@ -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> |
@@ -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()); | |||
} | |||
} |
@@ -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> |
@@ -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()); | |||
} | |||
} |
@@ -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> |