snowdrop-zen / quarkus

Quarkus: Supersonic Subatomic Java.
https://quarkus.io
Apache License 2.0
1 stars 0 forks source link

Indexed configuration properties not injected by @ConfigProperty #371

Closed snowdrop-bot closed 3 years ago

snowdrop-bot commented 3 years ago

Describe the bug

When using indexed properties, like described in the docs, I can only access a collection programatically, but not via injection with @ConfigProperty.

To Reproduce

@ApplicationScoped
public class MyBean {

    @ConfigProperty(name = "complex.list")
    List<String> complexList;

    public void method() {
        List<String> values = ConfigProvider.getConfig().getValues("complex.list", String.class);
        System.out.println(values);
    }
}

and properties:

complex.list[0]=123
complex.list[1]=234
complex.list[2]=456

Fails with:

Caused by: java.lang.RuntimeException: Failed to start quarkus
  [...]
Caused by: javax.enterprise.inject.spi.DeploymentException: Failed to load config value of type class java.lang.String for: complex.list
    at io.quarkus.arc.runtime.ConfigRecorder.validateConfigProperties(ConfigRecorder.java:42)
    at io.quarkus.deployment.steps.ConfigBuildStep$validateConfigProperties1249763973.deploy_0(ConfigBuildStep$validateConfigProperties1249763973.zig:332)
    at io.quarkus.deployment.steps.ConfigBuildStep$validateConfigProperties1249763973.deploy(ConfigBuildStep$validateConfigProperties1249763973.zig:40)
    at io.quarkus.runner.ApplicationImpl.doStart(ApplicationImpl.zig:713)
    ... 12 more
Caused by: java.util.NoSuchElementException: SRCFG00014: The config property complex.list is required but it could not be found in any config source
    at io.smallrye.config.SmallRyeConfig.convertValue(SmallRyeConfig.java:257)
    at io.smallrye.config.inject.ConfigProducerUtil.getValue(ConfigProducerUtil.java:84)
    at io.quarkus.arc.runtime.ConfigRecorder.validateConfigProperties(ConfigRecorder.java:39)
    ... 15 more

However, if I uncomment the complexList, the programmatic lookup, like described in the docs works. But, I'd expect the same to work via injection.

I'm using Quarkus 2.0.0.Final with JDK 16


https://github.com/quarkusio/quarkus/issues/18473


$upstream:18473$