@SuppressWarnings("unchecked")
    protected void jsonMapToProperties(String pathSoFar, Object value, Map<String, String> output) {
        if (value instanceof JsonObject) {
            // Descend again
            JsonObject map = (JsonObject) value;
            map.forEach((mapEntry) -> jsonMapToProperties(determineKey(pathSoFar, mapEntry.getKey()), mapEntry.getValue(), output));
        } else if (value instanceof JsonArray) {
            // Join objects and descend
            JsonArray array = (JsonArray) value;
            array.forEach(elem -> jsonMapToProperties(pathSoFar, elem, output));
        } else {
            // Value
            if (output.containsKey(pathSoFar)) {
                output.put(pathSoFar, SimpleStringUtils.join(",", output.get(pathSoFar), valueOrNull(value)));
            } else {
                output.put(pathSoFar, valueOrNull(value));
            }
        }
    }
@see io.apiman.gateway.engine.IEngineConfig#getGatewayInitializers(io.apiman.gateway.engine.IPluginRegistry)
gateway/platforms/vertx3/vertx3/src/main/java/io/apiman/gateway/platforms/vertx3/common/config/VertxEngineConfig.java