对参数化类型的类型参数应用约束

问题描述 投票:0回答:1

我正在尝试对 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");


  }
regex maven jaxb
1个回答
0
投票

通过更新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>
© www.soinside.com 2019 - 2024. All rights reserved.