quarkusio/quarkus · error · IllegalStateException
Unsupported injection point target: <injectionPoint>
Error message
Unsupported injection point target: <injectionPoint>
What it means
During ArC CDI deployment, MicroProfileConfigProcessor scans injection points of @ConfigProperty to register config property names. When an injection point's annotation target is neither a field nor a method parameter, the processor cannot derive a property name and throws this IllegalStateException. It guards against unsupported injection point kinds (e.g. bean constructor parameters handled elsewhere or synthetic targets).
Source
Thrown at extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/MicroProfileConfigProcessor.java:166
AnnotationInstance configProperty = injectionPoint.getRequiredQualifier(MP_CONFIG_PROPERTY);
if (configProperty != null) {
AnnotationValue nameValue = configProperty.value("name");
AnnotationValue defaultValue = configProperty.value("defaultValue");
String propertyName;
if (nameValue != null) {
propertyName = nameValue.asString();
} else {
// org.acme.Foo.config
if (injectionPoint.isField()) {
FieldInfo field = injectionPoint.getAnnotationTarget().asField();
propertyName = getPropertyName(field.name(), field.declaringClass());
} else if (injectionPoint.isParam()) {
MethodParameterInfo methodParameterInfo = injectionPoint.getAnnotationTarget().asMethodParameter();
propertyName = getPropertyName(methodParameterInfo.name(),
methodParameterInfo.method().declaringClass());
} else {
throw new IllegalStateException("Unsupported injection point target: " + injectionPoint);
}
}
Type injectedType = injectionPoint.getType();
if (DotNames.OPTIONAL.equals(injectedType.name())
|| DotNames.OPTIONAL_INT.equals(injectedType.name())
|| DotNames.OPTIONAL_LONG.equals(injectedType.name())
|| DotNames.OPTIONAL_DOUBLE.equals(injectedType.name())
|| DotNames.INSTANCE.equals(injectedType.name())
|| DotNames.PROVIDER.equals(injectedType.name())
|| SUPPLIER.equals(injectedType.name())
|| SR_CONFIG_VALUE.equals(injectedType.name())
|| MP_CONFIG_VALUE.equals(injectedType.name())) {
// Never validate container objects
continue;
}
String propertyDefaultValue = null;View on GitHub (pinned to e1c734241f)
Solutions
- Identify the injection point from the full stack/bean info and remove the misplaced @ConfigProperty annotation
- Check for custom AnnotationsTransformers or extensions that add @ConfigProperty to non-field/non-param targets
- Upgrade Quarkus to the latest patch — supported target kinds may have been extended
- If it comes from a third-party extension, report an issue with a minimal reproducer
Example fix
// before: @ConfigProperty on an unsupported synthetic target
// after: move the injection to a normal bean field
public class MyBean {
@ConfigProperty(name = "my.prop")
String myProp;
} Defensive patterns
Strategy: validation
Validate before calling
if (ip.getAnnotationTarget().kind() != AnnotationTarget.Kind.FIELD
&& !ip.isParam()) {
throw new IllegalStateException("Skip/fix: unsupported target " + ip.getAnnotationTarget().kind());
} Type guard
static boolean isSupportedTarget(InjectionPointInfo ip) {
return ip.isField() || ip.isParam();
} Prevention
- Only use @ConfigProperty on bean fields or method parameters
- Avoid custom transformers that add @ConfigProperty to exotic targets
- Keep Quarkus and extensions on aligned versions
When it happens
Trigger: An @ConfigProperty injection point whose AnnotationTarget is not a field (injectionPoint.isField() false) and not a method parameter (isParam() false), e.g. an unusual/synthetic injection point added by an extension or a decorator that the processor does not recognize.
Common situations: Custom CDI extensions or annotations transformers generating @ConfigProperty injection points on unexpected targets; Quarkus/ArC version upgrades introducing new injection point kinds; hand-built synthetic beans accidentally declaring @ConfigProperty.
Related errors
- The @Blocking, @NonBlocking and @RunOnVirtualThread annotati
- Failed to find any non-blocking provider for startup actions
- Synthetic bean does not provide a creation method, use Exten
- Synthetic bean has ExtendedBeanConfigurator#checkActive(), b
- It is not possible to specify multiple creation methods
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/0da37b4468d291ac.
Report an issue: GitHub.