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

  1. Identify the injection point from the full stack/bean info and remove the misplaced @ConfigProperty annotation
  2. Check for custom AnnotationsTransformers or extensions that add @ConfigProperty to non-field/non-param targets
  3. Upgrade Quarkus to the latest patch — supported target kinds may have been extended
  4. 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

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


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/0da37b4468d291ac. Report an issue: GitHub.