Zkontrolovat změnu chování v metodě InjectionPoint getAnnotated

V implementaci CDI (Contexts and Dependency Injection) 1.0 může metoda getAnnotated pro třídu, která implementuje rozhraní javax.enterprise.inject.spi.InjectionPoint, vrátit instanci javax.enterprise.inject.spi.Annotated. V implementaci CDI 1.2 musí metoda getAnnotated vrátit instanci AnnotatedField nebo AnnotatedParameter v závislosti na tom, zda je bod vložení vkládané pole nebo parametr v konstruktoru nebo metodě.

Toto pravidlo značí volání konstruktoru Annotated v rámci metody getAnnotated ve třídě, která implementuje rozhraní javax.enterprise.inject.spi.InjectionPoint. Například je označeno následující volání new Annotated():

< code> veřejná třída MyInjectionPoint implementuje InjectionPoint {

    public Annotated getAnnotated() {
        vrátit novou anotovanou () {

            public Set < Annotation> getAnnotations() {
                return null;
            }
            ...
        };
    }
    ...
} < /kód>

Binární skener aplikací značí všechny metody getAnnotated pro třídy, které implementují rozhraní javax.enterprise.inject.spi.InjectionPoint. Pokud označená metoda getAnnotated vrátí instanci AnnotatedParameter nebo AnnotatedField, může být toto pravidlo ignorováno. Pokud metoda getAnnotated vrátí instanci Annotated, musí být kód změněn.

V implementaci CDI 1.2 se aplikace obsahující třídu MyInjectionPoint nespustí a vyvolá následující výjimku:

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

Chcete-li tento problém vyřešit, nahraďte volání new Annotated() za new AnnotatedField() nebo new AnnotatedParameter(), v závislosti na tom, zda je bod vložení vkládané pole nebo parametr v konstruktoru nebo metodě.

Další informace o implementaci Java EE 7 CDI 1.2 viz Změny chování Contexts and Dependency Injection 1.2.