Skip to content

jakarta.enterprise.inject.Specializes not working #49812

@pat-karakun

Description

@pat-karakun

Describe the bug

Quarkus (version 3.26.1) does not seem to handle @Specializes (correctly):

  • given
    • an interface Strategy
    • a default injectable bean DefaultStrategy (annotated with @Default) implementing that interface
    • a specialized injectable bean SpecializedStrategy (annotated with @Specializes) extending DefaultStrategy
  • when injecting an instance of the interface in another bean GreetingResource
  • then an AmbiguousResolutionException is thrown
java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
	[error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: jakarta.enterprise.inject.spi.DeploymentException: jakarta.enterprise.inject.AmbiguousResolutionException: Ambiguous dependencies for type io.specializes.Strategy and qualifiers [@Default]
	- injection target: io.specializes.GreetingResource#strategy
	- declared on CLASS bean [types=[io.specializes.GreetingResource, java.lang.Object], qualifiers=[@Any, @Default], target=io.specializes.GreetingResource]
	- available beans:
		- CLASS bean [types=[io.specializes.DefaultStrategy, io.specializes.SpecializedStrategy, io.specializes.Strategy, java.lang.Object], qualifiers=[@Any, @Default], target=io.specializes.SpecializedStrategy]
		- CLASS bean [types=[io.specializes.DefaultStrategy, io.specializes.Strategy, java.lang.Object], qualifiers=[@Any, @Default], target=io.specializes.DefaultStrategy]
	at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:1594)
	at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:341)
	at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:178)
	at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:488)
	at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:732)
	at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:874)
	at io.quarkus.builder.BuildContext.run(BuildContext.java:255)
	at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
	at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
	at java.base/java.lang.Thread.run(Thread.java:840)
	at org.jboss.threads.JBossThread.run(JBossThread.java:501)

Expected behavior

There should be no build error and the specialized injectable bean SpecializedStrategy should be injected.

Actual behavior

There is a build error due to AmbiguousResolutionException

How to Reproduce?

Reproducer repo: https://github.com/pat-karakun/quarkus-cdi-specializes

Issue can be reproduced by running GreetingResourceTest.
More details in https://github.com/pat-karakun/quarkus-cdi-specializes/blob/main/README.md

Output of uname -a or ver

Linux ... 4.18.0-553.69.1.el8_10.x86_64 #1 SMP Thu Aug 7 18:10:00 EDT 2025 x86_64 x86_64 x86_64 GNU/Linux

Output of java -version

openjdk version "17.0.16" 2025-07-15 LTS OpenJDK Runtime Environment (Red_Hat-17.0.16.0.8-1) (build 17.0.16+8-LTS) OpenJDK 64-Bit Server VM (Red_Hat-17.0.16.0.8-1) (build 17.0.16+8-LTS, mixed mode, sharing)

Quarkus version or git rev

3.26.1

Build tool (ie. output of mvnw --version or gradlew --version)

Apache Maven 3.8.3

Additional information

No response

Metadata

Metadata

Assignees

Labels

area/arcIssue related to ARC (dependency injection)kind/bugSomething isn't working

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions