Bean验证(ConstraintValidator)+ CDI + Tomcat 8:HV000028:isValid调用期间出现意外异常

时间:2016-12-09 18:21:30

标签: hibernate validation tomcat cdi weld

在Tomcat上运行的JSF应用程序中:在@Inject中使用ConstraintValidator会导致javax.validation.ValidationException HV000028:isValid调用期间出现意外异常。

在应用程序的其他地方,CDI可以正常工作。

ConstraintValidator

public class MyIntervalValidator implements ConstraintValidator<MyInterval, Integer> {

    @Inject
    private Interval interval;

    public void initialize(MyInterval myIntervall) {
    }

    public boolean isValid(Integer i, ConstraintValidatorContext ctx) {

        Integer ceiling;

        ceiling = interval.getCeiling();

        if ((0 <= i) && (i <= ceiling)) {
            return true;
        }

        return false;
    }

我检查了注入:interval在执行方法null期间为isValid

Interval

@SessionScoped
public class Interval implements Serializable {

    private static final long serialVersionUID = 1L;

    @Min(value = 1)
    private Integer ceiling;

    public Interval() {
        this.ceiling = 1;
    }

    public Integer getCeiling() {
        return ceiling;
    }

    public void setCeiling(Integer ceiling) {
        this.ceiling = ceiling;
    }

}

context.xml

<?xml version="1.0" encoding="UTF-8"?>

<Context>
    <Resource name="BeanManager" 
        auth="Container"
        type="javax.enterprise.inject.spi.BeanManager"
        factory="org.jboss.weld.resources.ManagerObjectFactory" />
</Context>

来自web.xml的详细信息:

<resource-env-ref>
   <resource-env-ref-name>BeanManager</resource-env-ref-name>
   <resource-env-ref-type>
      javax.enterprise.inject.spi.BeanManager
   </resource-env-ref-type>
</resource-env-ref>

有关环境的信息:

  • 的Maven
  • 通过Eclipse Neon的Tomcat 8
  • CDI:weld-servlet-core(2.4.1.Final;文件夹bean.xml中的空WEB-INF
  • Bean验证:hibernate-validator(5.3.3.Final)
  • JSF:com.sun.faces(2.2.14)

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您应该在依赖项中包含Hibernate Validator CDI集成模块:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator-cdi</artifactId>
    <version>5.3.3.Final</version>
</dependency>

您的设置中可能缺少这个?