in meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/service/ConfigurationLoader.java [112:144]
protected Optional<Routes> doLoad(final String content) {
try (final Jsonb jsonb = JsonbBuilder.newBuilder()
.withProvider(loadJsonpProvider())
.withConfig(new JsonbConfig().setProperty("org.apache.johnzon.supports-comments", true))
.build()) {
routes = jsonb.fromJson(content, Routes.class);
final boolean hasRoutes = routes.routes != null && !routes.routes.isEmpty();
if (routes.defaultRoute == null && !hasRoutes) {
return Optional.empty();
}
if (hasRoutes) {
// before merging, ensure all routes have an id to not duplicate default id
routes.routes.stream().filter(it -> it.id == null).forEach(it -> it.id = newId());
}
if (routes.defaultRoute != null) {
if (routes.defaultRoute.id == null) {
routes.defaultRoute.id = "default";
}
if (routes.routes == null) { // no route were defined, consider it is the default route, /!\ empty means no route, don't default
routes.routes = singletonList(routes.defaultRoute);
}
if (hasRoutes) {
final JsonBuilderFactory jsonFactory = Json.createBuilderFactory(emptyMap());
final JsonObject template = jsonb.fromJson(jsonb.toJson(routes.defaultRoute), JsonObject.class);
routes.routes = routes.routes.stream().map(r -> merge(jsonb, jsonFactory, template, r)).collect(toList());
}
}
} catch (final Exception e) {
throw new IllegalArgumentException(e);
}
routes.routes.forEach(this::init);
return Optional.of(routes);
}