{"record":{"id":"4980e1ccc0285378","repo":"quarkusio/quarkus","slug":"not-a-qualifier","errorCode":null,"errorMessage":"Not a qualifier: ","messagePattern":"Not a qualifier: ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/signals/runtime/src/main/java/io/quarkus/signals/runtime/impl/ReceiverDefinitionImpl.java","lineNumber":41,"sourceCode":"\n    private final Function<CallbackReceiver<SIGNAL, RESPONSE>, Receivers.Registration> registerFun;\n    private final BeanContainer beanContainer;\n    private final Type signalType;\n    private Set<Annotation> qualifiers = Set.of();\n    private ExecutionModel executionModel = ExecutionModel.BLOCKING;\n\n    public ReceiverDefinitionImpl(Type signalType, BeanContainer beanContainer,\n            Function<CallbackReceiver<SIGNAL, RESPONSE>, Receivers.Registration> registerFun) {\n        this.signalType = signalType;\n        this.beanContainer = beanContainer;\n        this.registerFun = registerFun;\n    }\n\n    @Override\n    public Receivers.ReceiverDefinition<SIGNAL> setQualifiers(Annotation... qualifiers) {\n        for (Annotation qualifier : qualifiers) {\n            if (!beanContainer.isQualifier(qualifier.annotationType())) {\n                throw new IllegalArgumentException(\"Not a qualifier: \" + qualifier.annotationType().getName());\n            }\n        }\n        this.qualifiers = Set.of(qualifiers);\n        return this;\n    }\n\n    @Override\n    public Receivers.ReceiverDefinition<SIGNAL> setExecutionModel(ExecutionModel executionModel) {\n        this.executionModel = Objects.requireNonNull(executionModel);\n        return this;\n    }\n\n    @Override\n    public Registration notify(Consumer<SignalContext<SIGNAL>> callback) {\n        Objects.requireNonNull(callback);\n        @SuppressWarnings(\"unchecked\")\n        CallbackReceiver<SIGNAL, RESPONSE> receiver = (CallbackReceiver<SIGNAL, RESPONSE>) new CallbackReceiver<>(\n                signalType, qualifiers, void.class, executionModel,","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/signals/runtime/src/main/java/io/quarkus/signals/runtime/impl/ReceiverDefinitionImpl.java#L23-L59","documentation":"ReceiverDefinitionImpl.setQualifiers validates that every supplied CDI annotation is actually a qualifier registered in the bean container. Passing a plain annotation (not a @Qualifier) would silently produce broken bean resolution, so it throws IllegalArgumentException.","triggerScenarios":"Calling receiverDefinition.setQualifiers(annotation...) with an annotation type not recognized as a CDI qualifier by the ArC bean container.","commonSituations":"Passing @jakarta.inject.Qualifier-less annotations, using annotations from the wrong injection API, or forgetting a @Qualifier meta-annotation on a custom annotation.","solutions":["Only pass annotations meta-annotated with @jakarta.inject.Qualifier.","Check the annotation's package/API (jakarta.enterprise vs javax or other) — use the CDI one the container knows.","Register the custom qualifier properly or use a built-in qualifier like @Named or @Identifier."],"exampleFix":"// before\n@Retention(RUNTIME) @interface MyQ {}  // not a qualifier\nsetQualifiers(new MyQ() { ... });\n\n// after\n@Qualifier @Retention(RUNTIME) @interface MyQ {}\nsetQualifiers(new MyQ() { ... });","handlingStrategy":"validation","validationCode":"for (Annotation a : qualifiers) {\n    if (!a.annotationType().isAnnotationPresent(jakarta.inject.Qualifier.class)) {\n        throw new IllegalArgumentException(a.annotationType() + \" is not a CDI qualifier\");\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Meta-annotate every custom qualifier with @jakarta.inject.Qualifier.","Prefer built-in qualifiers (@Named, @Identifier) when possible.","Verify jakarta (not javax) imports in CDI code."],"tags":["cdi","qualifier","runtime","quarkus"],"backgroundTag":"not-a-qualifier","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}