我正在尝试对 JAXB 类的 List 属性强制执行 @Pattern 约束。
与此类似:
public List <@Pattern(regex="test") String> names;
如何通过绑定文件进行存档:
<annox:annotate target = "field"> .........(regexp ="test")</annox:annotate>
我尝试通过绑定文件使用@EachPattern注释:
<annox:annotate target = "field"> @cz.jirutka.validator.collection.constraints.EachPattern(regexp ="test")</annox:annotate>
在测试时总是会导致空指针异常: java.lang.NullPointerException 在 org.apache.commons.lang3.SystemUtils.isJavaVersionAtLeast(SystemUtils.java:1371) 在 org.apache.commons.lang3.ClassUtils.isAssignable(ClassUtils.java:589) 在cz.jirutka.validator.collection.internal.AnnotationUtils.createAnnotation(AnnotationUtils.java:133) 在cz.jirutka.validator.collection.CommonEachValidator.createConstraintAndCopyAttributes(CommonEachValidator.java:291) 在 cz.jirutka.validator.collection.CommonEachValidator.initialize(CommonEachValidator.java:92)
测试:
@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");
}
通过更新commons-lang版本解决了问题
<dependency>
<groupId>cz.jirutka.validator</groupId>
<artifactId>validator-collection</artifactId>
<version>2.2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>