Skip to content

Commit 3284506

Browse files
committed
Support for external configuration mechanics (Microprofile Config)
1 parent 523dd03 commit 3284506

File tree

5 files changed

+99
-0
lines changed

5 files changed

+99
-0
lines changed

bundles/jaxrs-ri/pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,12 @@
191191
<artifactId>persistence-api</artifactId>
192192
<scope>provided</scope>
193193
</dependency>
194+
<dependency>
195+
<groupId>org.eclipse.microprofile.config</groupId>
196+
<artifactId>microprofile-config-api</artifactId>
197+
<version>${microprofile.config.version}</version>
198+
<scope>provided</scope>
199+
</dependency>
194200
</dependencies>
195201

196202
<build>

core-server/pom.xml

+7
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,13 @@
227227
<version>${project.version}</version>
228228
<scope>test</scope>
229229
</dependency>
230+
231+
<dependency>
232+
<groupId>org.eclipse.microprofile.config</groupId>
233+
<artifactId>microprofile-config-api</artifactId>
234+
<version>${microprofile.config.version}</version>
235+
<scope>provided</scope>
236+
</dependency>
230237
</dependencies>
231238

232239
<profiles>

core-server/src/main/java/org/glassfish/jersey/server/internal/RuntimeDelegateImpl.java

+14
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import javax.ws.rs.JAXRS.Configuration.SSLClientAuthentication;
3434
import javax.ws.rs.core.Application;
3535

36+
import org.eclipse.microprofile.config.Config;
3637
import org.glassfish.jersey.internal.AbstractRuntimeDelegate;
3738
import org.glassfish.jersey.message.internal.MessagingBinders;
3839
import org.glassfish.jersey.server.ContainerFactory;
@@ -116,6 +117,19 @@ public final <T> Builder from(final BiFunction<String, Class<T>, Optional<T>> co
116117
return this;
117118
}
118119

120+
@Override
121+
public final Builder from(final Object externalConfig) {
122+
if (externalConfig instanceof Config) {
123+
return this.from((Config) externalConfig);
124+
}
125+
126+
return this;
127+
}
128+
129+
private final Builder from(final Config config) {
130+
return this.from(config::getOptionalValue);
131+
}
132+
119133
@Override
120134
public final JAXRS.Configuration build() {
121135
return this.properties::get;

core-server/src/test/java/org/glassfish/jersey/server/internal/RuntimeDelegateImplTest.java

+71
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
import javax.ws.rs.core.Application;
4242
import javax.ws.rs.ext.RuntimeDelegate;
4343

44+
import org.eclipse.microprofile.config.Config;
45+
import org.eclipse.microprofile.config.spi.ConfigSource;
4446
import org.glassfish.jersey.internal.ServiceFinder;
4547
import org.glassfish.jersey.internal.ServiceFinder.ServiceIteratorProvider;
4648
import org.glassfish.jersey.server.ApplicationHandler;
@@ -228,6 +230,75 @@ public final void shouldBuildCustomConfigurationFromPropertiesProvider() {
228230
assertThat(configuration.property(ServerProperties.AUTO_START), is(FALSE));
229231
}
230232

233+
@Test
234+
public final void shouldBuildCustomConfigurationFromMicroprofileConfig() {
235+
// given
236+
final JAXRS.Configuration.Builder configurationBuilder = new RuntimeDelegateImpl().createConfigurationBuilder();
237+
final SSLContext mockSslContext = new SSLContext(null, null, null) {
238+
};
239+
final Class<Server> mockServerClass = Server.class;
240+
final Config config = new Config() {
241+
@Override
242+
public final <T> T getValue(final String propertyName, final Class<T> propertyType) {
243+
return null;
244+
}
245+
246+
@Override
247+
public final <T> Optional<T> getOptionalValue(final String propertyName, final Class<T> propertyType) {
248+
if (JAXRS.Configuration.PROTOCOL.equals(propertyName) && String.class.equals(propertyType)) {
249+
return Optional.of(propertyType.cast("HTTPS"));
250+
}
251+
if (JAXRS.Configuration.HOST.equals(propertyName) && String.class.equals(propertyType)) {
252+
return Optional.of(propertyType.cast("hostname"));
253+
}
254+
if (JAXRS.Configuration.PORT.equals(propertyName) && Integer.class.equals(propertyType)) {
255+
return Optional.of(propertyType.cast(8080));
256+
}
257+
if (JAXRS.Configuration.ROOT_PATH.equals(propertyName) && String.class.equals(propertyType)) {
258+
return Optional.of(propertyType.cast("path"));
259+
}
260+
if (JAXRS.Configuration.SSL_CLIENT_AUTHENTICATION.equals(propertyName)
261+
&& JAXRS.Configuration.SSLClientAuthentication.class.equals(propertyType)) {
262+
return Optional.of(propertyType.cast(JAXRS.Configuration.SSLClientAuthentication.OPTIONAL));
263+
}
264+
if (JAXRS.Configuration.SSL_CONTEXT.equals(propertyName) && SSLContext.class.equals(propertyType)) {
265+
return Optional.of(propertyType.cast(mockSslContext));
266+
}
267+
if (ServerProperties.HTTP_SERVER_CLASS.equals(propertyName) && Class.class.equals(propertyType)) {
268+
return Optional.of(propertyType.cast(mockServerClass));
269+
}
270+
if (ServerProperties.AUTO_START.equals(propertyName) && Boolean.class.equals(propertyType)) {
271+
return Optional.of(propertyType.cast(FALSE));
272+
}
273+
return Optional.empty();
274+
}
275+
276+
@Override
277+
public final Iterable<String> getPropertyNames() {
278+
return null;
279+
}
280+
281+
@Override
282+
public final Iterable<ConfigSource> getConfigSources() {
283+
return null;
284+
}
285+
};
286+
287+
// when
288+
final JAXRS.Configuration configuration = configurationBuilder.from(config).build();
289+
290+
// then
291+
assertThat(configuration, is(notNullValue()));
292+
assertThat(configuration.protocol(), is("HTTPS"));
293+
assertThat(configuration.host(), is("hostname"));
294+
assertThat(configuration.port(), is(8080));
295+
assertThat(configuration.rootPath(), is("path"));
296+
assertThat(configuration.sslClientAuthentication(), is(JAXRS.Configuration.SSLClientAuthentication.OPTIONAL));
297+
assertThat(configuration.sslContext(), is(theInstance(mockSslContext)));
298+
assertThat(configuration.property(ServerProperties.HTTP_SERVER_CLASS), is(theInstance(mockServerClass)));
299+
assertThat(configuration.property(ServerProperties.AUTO_START), is(FALSE));
300+
}
301+
231302
@Test
232303
public final void shouldBootstrapApplication() throws InterruptedException, ExecutionException, TimeoutException {
233304
// given

pom.xml

+1
Original file line numberDiff line numberDiff line change
@@ -2010,5 +2010,6 @@
20102010
<xmlunit.version>1.6</xmlunit.version>
20112011
<yasson.version>1.0.1</yasson.version>
20122012
<skip.e2e>false</skip.e2e>
2013+
<microprofile.config.version>1.3</microprofile.config.version>
20132014
</properties>
20142015
</project>

0 commit comments

Comments
 (0)