InjectionPoint getAnnotated メソッドでの振る舞いの変更を確認する

Contexts and Dependency Injection (CDI) 1.0 実装では、javax.enterprise.inject.spi.InjectionPoint インターフェースを実装するクラスの getAnnotated メソッドは、javax.enterprise.inject.spi.Annotated のインスタンスを返すことができます。CDI 1.2 実装では、getAnnotated メソッドは、注入ポイントが注入フィールドであるか、コンストラクターまたはメソッドのパラメーターであるかに応じて、AnnotatedField または AnnotatedParameter のインスタンスを返さなければなりません。

この規則により、javax.enterprise.inject.spi.InjectionPoint インターフェースを実装するクラスの getAnnotated メソッド内の Annotated コンストラクターへの呼び出しにフラグを立てます。例えば、以下の new Annotated() への呼び出しはフラグが立てられます。

< code> public class MyInjectionPoint implements InjectionPoint {

    public Annotated getAnnotated() {
        新規 Annotated () を返します {

            public Set < Annotation> getAnnotations() {
                return null;
            }
            ・・・
        };
    } 年
    ・・・
} </コード>

バイナリー・アプリケーション・スキャナーは、javax.enterprise.inject.spi.InjectionPoint インターフェースを実装するクラスのすべての getAnnotated メソッドにフラグを立てます。フラグが立てられた getAnnotated メソッドが AnnotatedParameter または AnnotatedField のインスタンスを返す場合は、この規則を無視することができます。getAnnotated メソッドが Annotated のインスタンスを返した場合は、コードを変更する必要があります。

CDI 1.2 実装では、クラス MyInjectionPoint を含むアプリケーションは開始せず、以下の例外をスローします。

org.jboss.weld.exceptions.IllegalArgumentException: WELD-001521: InjectionPoint.getAnnotated() must return either AnnotatedParameter or AnnotatedField

この問題を解決するには、new Annotated() への呼び出しを、注入ポイントが注入フィールドであるか、コンストラクターまたはメソッドのパラメーターであるかに応じて、new AnnotatedField() または new AnnotatedParameter() で置換します。

Java EE 7 CDI 1.2 実装について詳しくは、 Contexts and Dependency Injection 1.2 での振る舞いの変更を参照してください。