Weld (org.jboss.weld.servlet:weld-servlet:2.0.2.Final with 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();
}
methodを注入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 インターフェースの両方を実装していることがわかります。溶接がプロキシを作成するとき、Validator インターフェイスにあるメソッドのみを実装し、ExecutableValidator メソッドは実装しません。
これを解決する方法はありますか?