Search code examples
javajakarta-eecdi

CDI, get value from the qualifier inside the observer


I have event with a qualifier

@Inject
@ChangeType(FOO)
private Event<SomeEventClass> event

And I want to get value of the qualifier (FOO) inside the observer method. I know how to get qualifier as annotation but not sure how to get instance of the qualifier and its value.

public void listen(@Observes SomeEventClass event, EventMetadata meta) {
    Set<Annotation> qualifiers = meta.getQualifiers();
    for (Annotation qualifier : qualifiers) {
        //qualifier.annotationType()
    }
}

Solution

  • You only have to cast the Annotation to your qualifier class.

     public void listen(@Observes SomeEventClass event, EventMetadata meta) {
        Set<Annotation> qualifiers = meta.getQualifiers();
        ChangeType ct = null;
        for (Annotation qualifier : qualifiers) {
           if (qualifier.annotationType().equals(ChangeType.class)) {
                    ct = (ChangeType) qualifier;
           }
        }
        if (ct != null)
            //do something with ct.value 
    }