I'm trying to enforce a @Pattern constraint on List attributes of my JAXB classes.
Similar to this:
public List <@Pattern(regex="test") String> names;
How can I archive via bindings file:
<annox:annotate target = "field"> .........(regexp ="test")</annox:annotate>
I have tried using the @EachPattern annotation via bindings file:
<annox:annotate target = "field"> @cz.jirutka.validator.collection.constraints.EachPattern(regexp ="test")</annox:annotate>
Which always results in a Nullpointer exception while testing: java.lang.NullPointerException at org.apache.commons.lang3.SystemUtils.isJavaVersionAtLeast(SystemUtils.java:1371) at org.apache.commons.lang3.ClassUtils.isAssignable(ClassUtils.java:589) at cz.jirutka.validator.collection.internal.AnnotationUtils.createAnnotation(AnnotationUtils.java:133) at cz.jirutka.validator.collection.CommonEachValidator.createConstraintAndCopyAttributes(CommonEachValidator.java:291) at cz.jirutka.validator.collection.CommonEachValidator.initialize(CommonEachValidator.java:92)
Test:
@Test
public void testValidPattern()
{
Customer customer = new Customer();
customer.names = new ArrayList<>();
customer.names.add("test");
customer.names.add("test");
List<String> namesList = customer.getNames();
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
CommonEachValidator validator = new CommonEachValidator();
validator.setValidatorFactory(factory);
Annotation eachAnnotation = new EachPattern()
{
@Override
public Class<? extends Annotation> annotationType()
{
return EachPattern.class;
}
@Override
public String regexp()
{
return "test";
}
@Override
public Pattern.Flag[] flags()
{
return new Pattern.Flag[0];
}
@Override
public String message()
{
return "Valid Pattern";
}
@Override
public Class<?>[] groups()
{
return new Class[0];
}
@Override
public Class<? extends Payload>[] payload()
{
return new Class[0];
}
};
validator.initialize(eachAnnotation);
assertTrue(validator.isValid(namesList, null), "Valid pattern should pass");
}
Problem solved by updating commons-lang version