Skip to content

Commit

Permalink
Register config mappings with live reload
Browse files Browse the repository at this point in the history
  • Loading branch information
radcortez committed Oct 25, 2021
1 parent 0a9b946 commit bf4b922
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -493,6 +493,27 @@ public void run() {
// build time defaults
reinit.writeArrayValue(array, 1, buildTimeRunTimeDefaultValuesConfigSource);
reinit.invokeVirtualMethod(SRCB_WITH_SOURCES, buildTimeBuilder, array);
// add safe static sources
for (String runtimeConfigSource : staticConfigSources) {
reinit.invokeStaticMethod(CU_ADD_SOURCE_PROVIDER, buildTimeBuilder,
reinit.newInstance(RCS_NEW, reinit.load(runtimeConfigSource)));
}
// add safe static source providers
for (String runtimeConfigSourceProvider : staticConfigSourceProviders) {
reinit.invokeStaticMethod(CU_ADD_SOURCE_PROVIDER, buildTimeBuilder,
reinit.newInstance(RCSP_NEW, reinit.load(runtimeConfigSourceProvider)));
}
// add safe static source factories
for (String discoveredConfigSourceFactory : staticConfigSourceFactories) {
reinit.invokeStaticMethod(CU_ADD_SOURCE_FACTORY_PROVIDER, buildTimeBuilder,
reinit.newInstance(RCSF_NEW, reinit.load(discoveredConfigSourceFactory)));
}
// add mappings
for (ConfigClassWithPrefix configMapping : staticConfigMappings) {
reinit.invokeStaticMethod(CU_WITH_MAPPING, buildTimeBuilder,
reinit.load(configMapping.getKlass().getName()), reinit.load(configMapping.getPrefix()));
}

ResultHandle clinitConfig = reinit.checkCast(reinit.invokeVirtualMethod(SRCB_BUILD, buildTimeBuilder),
SmallRyeConfig.class);
installConfiguration(clinitConfig, reinit);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package io.quarkus.resteasy.test.config;

import static org.hamcrest.core.Is.is;

import java.io.IOException;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Context;
import javax.ws.rs.ext.Provider;

import org.jboss.resteasy.spi.HttpRequest;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.runtime.annotations.StaticInitSafe;
import io.quarkus.test.QuarkusDevModeTest;
import io.restassured.RestAssured;
import io.smallrye.config.ConfigMapping;
import io.smallrye.config.WithDefault;

public class ConfigMappingWithProviderTest {
@RegisterExtension
static final QuarkusDevModeTest TEST = new QuarkusDevModeTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClass(MappingResource.class)
.addClass(MappingFilter.class)
.addClass(Mapping.class)
.addAsResource(new StringAsset("mapping.hello=hello\n"), "application.properties"));

@Test
void configMapping() {
RestAssured.when().get("/hello").then()
.statusCode(200)
.body(is("hello"));

TEST.modifyResourceFile("application.properties", s -> "mapping.hello=Hello\n");

RestAssured.when().get("/hello").then()
.statusCode(200)
.body(is("Hello"));
}

@Path("/hello")
public static class MappingResource {
@GET
public String hello(@Context HttpRequest request) {
return (String) request.getAttribute("mapping.hello");
}
}

@Provider
public static class MappingFilter implements ContainerRequestFilter {
@Inject
Mapping mapping;

@Override
public void filter(final ContainerRequestContext requestContext) throws IOException {
requestContext.setProperty("mapping.hello", mapping.hello());
}
}

@StaticInitSafe
@ConfigMapping(prefix = "mapping")
public interface Mapping {
@WithDefault("hello")
String hello();
}
}

0 comments on commit bf4b922

Please sign in to comment.