When you say that this validation never takes place
are you referring to situations where myField is null or populated (or either)?
As I am also using the Validator on one of my projects, I ran a little test and when myField is null, it is not validated. When it is not null, it is. I am using the following versions:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.1.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.4</version>
</dependency>
Here is the test code:
public class MyClass {
public MyClass() {
}
public MyClass(String myField) {
this.myField = myField;
}
@Pattern(regexp="\d+\D+")
private String myField;
}
public class ParentClass {
@Valid
private MyClass myClass;
public ParentClass() {
}
public ParentClass(MyClass myClass) {
this.myClass = myClass;
}
}
public class ValidatorTest {
javax.validation.Validator v;
@Before
public void setup() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
v = factory.getValidator();
}
@Test
public void testValidations() {
Assert.assertEquals(0, v.validate(new ParentClass()).size()); // Null reference
Assert.assertEquals(0, v.validate(new ParentClass(new MyClass())).size()); // Valid reference, null field
Assert.assertEquals(1, v.validate(new ParentClass(new MyClass("I fail"))).size());
Assert.assertEquals(0, v.validate(new ParentClass(new MyClass("1 pass"))).size());
}
}
I hope this helps. It seems (to me) the behaviour demonstrated is correct.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…