QuarkusMigrationAdapterPropertiesConfigBuilderCustomizer.java
package io.vanillabp.integration.deployment.config;
import io.smallrye.config.SmallRyeConfigBuilder;
import io.smallrye.config.SmallRyeConfigBuilderCustomizer;
import io.vanillabp.integration.runtime.config.QuarkusMigrationAdapterProperties;
/**
* This class is used by Quarkus {@link io.quarkus.deployment.configuration.BuildTimeConfigurationReader},
* responsible for reading application properties at build time for build time analyses.
* <p>
* Migration adapter properties need some customization of SmallRye config.
* Since configuration is processed in augmentation phase the
* {@link io.quarkus.deployment.builditem.StaticInitConfigBuilderBuildItem}
* is not suitable for the job (see also
* <a href="https://stackoverflow.com/questions/79660219/classcast-exception-in-custom-extension-having-pure-static-properties-levaraging"
* target="_blank">Stackoverflow</a>).
* <p>
* What exactly is adapted can be read in the source code of
* {@link #configBuilder(SmallRyeConfigBuilder)}.
* <p>
* Hint: Activated by "META-INF/services/io.smallrye.config.SmallRyeConfigBuilderCustomize/".
*
* @see <a href="https://smallrye.io/smallrye-config/3.12.3/config/customizer/">SmallRye Config Customizer</a>
*/
public class QuarkusMigrationAdapterPropertiesConfigBuilderCustomizer implements SmallRyeConfigBuilderCustomizer {
/**
* Adopt builder according to the needs of migration adapters.
* For details check out source code of
* {@link SmallRyeConfigBuilderCustomizer#configBuilder(SmallRyeConfigBuilder)}.
*
* @param builder SmallRye builder provided by Quarkus
*/
@Override
public void configBuilder(
final SmallRyeConfigBuilder builder) {
// In Quarkus properties defined by Java interfaces are mandatory. They
// can be turned into optional values by using an Optional<..> wrapper
// on a value base. In the case of VanillaBP properties, the subsections and
// properties valid depend on the adapters used. Therefore,
// missing-property-validation has to be turned off for the entire section:
builder.withMappingIgnore("%s.**".formatted(QuarkusMigrationAdapterProperties.PREFIX));
}
}