Prüfen, ob sich das Verhalten der InjectionPoint-Methode getAnnotated geändert hat

In der Contexts and Dependency Injection (CDI) 1.0-Implementierung kann die Methode getAnnotatedin einer Klasse, die die Schnittstelle javax.enterprise.inject.spi.InjectionPoint implementiert, eine Instanz von javax.enterprise.inject.spi.Annotated zurückgeben. In der CDI 1.2-Implementierung muss die Methode getAnnotated eine Instanz von AnnotatedField oder AnnotatedParameter zurückgeben, je nachdem, ob der Injektionspunkt ein eingefügtes Feld oder ein Parameter in einem Konstruktor oder einer Methode ist.

Diese Regel markiert Aufrufe des Konstruktors Annotated in der Methode getAnnotated in einer Klasse, die die Schnittstelle javax.enterprise.inject.spi.InjectionPoint implementiert. Der folgende Aufruf von new Annotated() wird markiert:

< code> public class MyInjectionPoint implementiert InjectionPoint {

    public Annotated getAnnotated() {
        return new Annotated () {

            public Set < Anmerkung> getAnnotations() {
                return null;
            }
            Am 1.
        }
    }
    Am 1.
} < /Code>

Der Scanner für binäre Anwendungen markiert alle getAnnotated-Methoden in Klassen, die die Schnittstelle javax.enterprise.inject.spi.InjectionPoint implementieren. Wenn die markierte getAnnotated-Methode eine Instanz von AnnotatedParameter oder AnnotatedField zurückgibt, kann diese Regel ignoriert werden. Gibt die getAnnotated-Methode jedoch eine Instanz von Annotated zurück, muss der Code geändert werden.

In der CDI 1.2-Implementierung wird die Anwendung, die die Klasse MyInjectionPoint enthält, nicht gestartet und löst die folgende Ausnahme aus:

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

Zur Behebung dieses Problems ersetzen Sie den Aufruf von new Annotated() durch new AnnotatedField() oder new AnnotatedParameter(), je nachdem, ob der Injektionspunkt ein eingefügtes Feld oder ein Parameter in einem Konstruktor oder einer Methode ist.

Weitere Informationen zur CDI 1.2-Implementierung von Java EE 7 finden Sie unter Änderungen im Verhalten von Contexts and Dependency Injection zwischen Releases.