From 6c5d394f4bd9ca33ce0ea6879a230e9d77eec3bc Mon Sep 17 00:00:00 2001 From: gazbert Date: Tue, 12 Nov 2024 17:59:16 +0000 Subject: [PATCH] #169 - Uplift Snakeyaml to v2.2 --- build.gradle | 2 +- .../datastore/yaml/ConfigurationManager.java | 17 +++++++++++++---- pom.xml | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index c59672b9..8a7221d0 100644 --- a/build.gradle +++ b/build.gradle @@ -72,7 +72,7 @@ ext.libraries = [ jakarta_xml_api : dependencies.create("jakarta.xml.bind:jakarta.xml.bind-api:4.0.2"), - snake_yaml : dependencies.create("org.yaml:snakeyaml:1.33"), + snake_yaml : dependencies.create("org.yaml:snakeyaml:2.2"), springdoc_openapi_ui : dependencies.create("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0"), diff --git a/bxbot-yaml-datastore/src/main/java/com/gazbert/bxbot/datastore/yaml/ConfigurationManager.java b/bxbot-yaml-datastore/src/main/java/com/gazbert/bxbot/datastore/yaml/ConfigurationManager.java index 6bcf9573..858528f8 100644 --- a/bxbot-yaml-datastore/src/main/java/com/gazbert/bxbot/datastore/yaml/ConfigurationManager.java +++ b/bxbot-yaml-datastore/src/main/java/com/gazbert/bxbot/datastore/yaml/ConfigurationManager.java @@ -34,6 +34,7 @@ import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Component; import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.LoaderOptions; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.Constructor; import org.yaml.snakeyaml.introspector.BeanAccess; @@ -52,7 +53,7 @@ @Log4j2 public class ConfigurationManager { - private static final String YAML_HEADER = "---" + System.getProperty("line.separator"); + private static final String YAML_HEADER = "---" + System.lineSeparator(); /** Creates the Configuration Manager. */ public ConfigurationManager() { @@ -72,7 +73,9 @@ public synchronized T loadConfig(final Class configClass, String yamlConf log.info("Loading configuration for [" + configClass + "] from: " + yamlConfigFile + " ..."); try (final FileInputStream fileInputStream = new FileInputStream(yamlConfigFile)) { - final Yaml yaml = new Yaml(new Constructor(configClass)); + + final LoaderOptions options = new LoaderOptions(); + final Yaml yaml = new Yaml(new Constructor(configClass, options)); final T requestedConfig = yaml.load(fileInputStream); log.info("Loaded and set configuration for [" + configClass + "] successfully!"); @@ -108,10 +111,11 @@ public synchronized void saveConfig(Class configClass, T config, String y new PrintWriter(fileOutputStream, true, StandardCharsets.UTF_8)) { // Skip null fields and order the YAML fields - final Representer representer = new SkipNullFieldRepresenter(); + final DumperOptions options = new DumperOptions(); + final Representer representer = new SkipNullFieldRepresenter(options); representer.setPropertyUtils(new ReversedPropertyUtils()); - final Yaml yaml = new Yaml(representer); + final StringBuilder sb = new StringBuilder(YAML_HEADER); sb.append(yaml.dumpAs(config, Tag.MAP, DumperOptions.FlowStyle.BLOCK)); @@ -133,6 +137,11 @@ public synchronized void saveConfig(Class configClass, T config, String y /** Stops null fields from getting written out to YAML. */ private static class SkipNullFieldRepresenter extends Representer { + + SkipNullFieldRepresenter(DumperOptions options) { + super(options); + } + @Override protected NodeTuple representJavaBeanProperty( Object javaBean, Property property, Object propertyValue, Tag customTag) { diff --git a/pom.xml b/pom.xml index 5d255b42..f03f4175 100644 --- a/pom.xml +++ b/pom.xml @@ -243,7 +243,7 @@ org.yaml snakeyaml - 1.33 + 2.2 org.springdoc