我正在使用 Weld (org.jboss.weld.servlet:weld-servlet:2.0.2.Final 和 maven) 在 Tomcat 中运行一个应用程序来生成 ValidatorFactory 和 Validator 组件,如下所示:
@Produces
@Default
@javax.enterprise.context.ApplicationScoped
public ValidatorFactory getInstance() {
return Validation.byDefaultProvider().configure().buildValidatorFactory();
}
和
@Produces @javax.enterprise.context.ApplicationScoped
public Validator getInstanceValidator() {
return factory.getValidator();
}
当我注入Validator
和调用方法Validator.forExecutables()
时,我得到了这个异常:
org.jboss.weld.proxies.Validator$1284425531$Proxy$_$$_WeldClientProxy
cannot be cast to javax.validation.executable
但如果我注入ValidatorFactory
和调用ValidatorFactory.getValidator().forExecutables()
,一切正常。
我的代码有错误吗?还是有其他程序可以避免此错误?
编辑
分析 Hibernate 验证器源代码,我看到 ValidatorImpl 实现了 Validator 和 ExecutableValidator 接口。当weld 创建代理时,它只实现Validator 接口中的方法,而不是ExecutableValidator 方法。
有办法解决这个问题吗?