private void mergeInDefaultConfig(final ObjectMapper objectMapper,
                                      final JsonNode rootNode) {
        final JsonNode appConfigNode = rootNode.at(APP_CONFIG_JSON_POINTER);
        final AppConfig defaultConfig = new AppConfig();
        final JsonNode defaultConfigNode = objectMapper.valueToTree(defaultConfig);

        if (appConfigNode == null || appConfigNode.isMissingNode()) {
            ((ObjectNode) rootNode).set(
                    AppConfig.ROOT_PROPERTY_NAME,
                    defaultConfigNode);
            throw new RuntimeException("No config node found at " + APP_CONFIG_JSON_POINTER);
        }

        YamlUtil.mergeYamlNodeTrees(
                objectMapper,
                objectMapper2 ->
                        appConfigNode,
                objectMapper2 ->
                        objectMapper.valueToTree(defaultConfig));
    }
Merge our compile time defaults with the de-serialised config so we have a full tree
stroom-config/stroom-config-app/src/main/java/stroom/config/app/StroomConfigurationSourceProvider.java