Verificaţi modificarea de comportament în metoda InjectionPoint getAnnotated

În implementarea CDI (Contexts and Dependency Injection) 1.0, metoda getAnnotated pe o clasă care implementează interfaţa javax.enterprise.inject.spi.InjectionPoint poate returna o instanţă javax.enterprise.inject.spi.Annotated. În implementarea CDI 1.2, metoda getAnnotated trebuie să returneze o instanţă AnnotatedField sau AnnotatedParameter, în funcţie de ce este punctul de injecţie, un câmp de injecţie sau un parametru pe un constructor sau o metodă.

Această regulă semnalează apeluri la constructorul Annotated dintr-o metodă getAnnotated care implementează interfaţa javax.enterprise.inject.spi.InjectionPoint. De exemplu, apelul următor la new Annotated() este semnalat:

< code> clasa publica MyInjectionimplementeaza InjectionPoint

    public Annotated getAnnotated()
        return new Annotated () {

            Set public < Annotation> getAnnotations() {
                return null;
            }
            ...
        };
    }
    ...
} < /code>

Scaner-ul aplicaţiei binare semnalează toate metodele getAnnotated pe clasele care implementează interfaţa javax.enterprise.inject.spi.InjectionPoint. Dacă metoda semnalată getAnnotated întoarce o instanţă AnnotatedParameter sau AnnotatedField, această regulă poate fi ignorată. Dacă metoda getAnnotated întoarce o instanţă Annotated, codul trebuie schimbat.

În implementarea CDI 1.2, aplicaţia care conţine clasa MyInjectionPoint nu porneşte şi aruncă următoarea excepţie:

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

Pentru a rezolva această problemă, înlocuiţi apelul la new Annotated() cu new AnnotatedField() sau new AnnotatedParameter(), în funcţie de ce este punctul de injecţie, un câmp de injecţie sau un parametru pe un constructor sau o metodă.

Pentru informaţii suplimentare despre implementarea Java EE 7 CDI 1.2, vedeţi Contexts and Dependency Injection 1.2 behavior changes.