0

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 メソッドは実装しません。

これを解決する方法はありますか?

4

1 に答える 1