diff --git a/pom.xml b/pom.xml
index af5e019..5817114 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,7 +32,8 @@
9.0.5
9.0.5
3.18.0
- 2.19.1
+ 2.6
+ 2.21.2
1.18.38
3.7.7
5.11.4
@@ -101,12 +102,18 @@
${commons-lang3.version}
-
-
-
- com.fasterxml.jackson.dataformat
- jackson-dataformat-yaml
- ${jackson-dataformat-yaml.version}
+
+ org.yaml
+ snakeyaml
+ ${snakeyaml.version}
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson-databind.version}
+ test
diff --git a/src/main/java/com/aerospike/mapper/tools/AbstractBuilder.java b/src/main/java/com/aerospike/mapper/tools/AbstractBuilder.java
index 9978291..1e30d70 100644
--- a/src/main/java/com/aerospike/mapper/tools/AbstractBuilder.java
+++ b/src/main/java/com/aerospike/mapper/tools/AbstractBuilder.java
@@ -2,6 +2,7 @@
import java.io.BufferedReader;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -23,12 +24,14 @@
import com.aerospike.client.policy.ScanPolicy;
import com.aerospike.mapper.annotations.AerospikeRecord;
import com.aerospike.mapper.tools.ClassCache.PolicyType;
+import com.aerospike.mapper.tools.configuration.BinConfig;
import com.aerospike.mapper.tools.configuration.ClassConfig;
import com.aerospike.mapper.tools.configuration.Configuration;
import com.aerospike.mapper.tools.utils.TypeUtils;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import org.yaml.snakeyaml.LoaderOptions;
+import org.yaml.snakeyaml.TypeDescription;
+import org.yaml.snakeyaml.Yaml;
+import org.yaml.snakeyaml.constructor.Constructor;
public abstract class AbstractBuilder {
private final T mapper;
@@ -121,10 +124,9 @@ public AbstractBuilder withConfigurationFile(File file) throws IOException {
}
public AbstractBuilder withConfigurationFile(File file, boolean allowsInvalid) throws IOException {
- ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
- Configuration configuration = objectMapper.readValue(file, Configuration.class);
- this.loadConfiguration(configuration, allowsInvalid);
- return this;
+ try (InputStream fis = new FileInputStream(file)) {
+ return this.withConfigurationFile(fis, allowsInvalid);
+ }
}
public AbstractBuilder withConfigurationFile(InputStream ios) throws IOException {
@@ -132,23 +134,38 @@ public AbstractBuilder withConfigurationFile(InputStream ios) throws IOExcept
}
public AbstractBuilder withConfigurationFile(InputStream ios, boolean allowsInvalid) throws IOException {
- ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
- Configuration configuration = objectMapper.readValue(ios, Configuration.class);
+ Yaml yaml = createYamlParser();
+ Configuration configuration = yaml.load(ios);
this.loadConfiguration(configuration, allowsInvalid);
return this;
}
- public AbstractBuilder withConfiguration(String configurationYaml) throws JsonProcessingException {
+ public AbstractBuilder withConfiguration(String configurationYaml) {
return this.withConfiguration(configurationYaml, false);
}
- public AbstractBuilder withConfiguration(String configurationYaml, boolean allowsInvalid) throws JsonProcessingException {
- ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
- Configuration configuration = objectMapper.readValue(configurationYaml, Configuration.class);
+ public AbstractBuilder withConfiguration(String configurationYaml, boolean allowsInvalid) {
+ Yaml yaml = createYamlParser();
+ Configuration configuration = yaml.load(configurationYaml);
this.loadConfiguration(configuration, allowsInvalid);
return this;
}
-
+
+ private static Yaml createYamlParser() {
+ Constructor constructor = new Constructor(Configuration.class, new LoaderOptions());
+
+ TypeDescription configDesc = new TypeDescription(Configuration.class);
+ configDesc.addPropertyParameters("classes", ClassConfig.class);
+ constructor.addTypeDescription(configDesc);
+
+ TypeDescription classConfigDesc = new TypeDescription(ClassConfig.class);
+ classConfigDesc.substituteProperty("class", String.class, "getClassName", "setClassName");
+ classConfigDesc.addPropertyParameters("bins", BinConfig.class);
+ constructor.addTypeDescription(classConfigDesc);
+
+ return new Yaml(constructor);
+ }
+
public AbstractBuilder withClassConfigurations(ClassConfig classConfig, ClassConfig ...classConfigs) {
Configuration configuration = new Configuration();
configuration.add(classConfig);
@@ -161,6 +178,9 @@ public AbstractBuilder withClassConfigurations(ClassConfig classConfig, Class
}
private void loadConfiguration(@NotNull Configuration configuration, boolean allowsInvalid) {
+ if (configuration == null) {
+ throw new AerospikeException("YAML configuration is empty or invalid");
+ }
for (ClassConfig config : configuration.getClasses()) {
try {
String name = config.getClassName();
diff --git a/src/main/java/com/aerospike/mapper/tools/configuration/ClassConfig.java b/src/main/java/com/aerospike/mapper/tools/configuration/ClassConfig.java
index 4075294..3e2c400 100644
--- a/src/main/java/com/aerospike/mapper/tools/configuration/ClassConfig.java
+++ b/src/main/java/com/aerospike/mapper/tools/configuration/ClassConfig.java
@@ -9,10 +9,8 @@
import com.aerospike.mapper.annotations.AerospikeEmbed;
import com.aerospike.mapper.annotations.AerospikeReference;
import com.aerospike.mapper.tools.ConfigurationUtils;
-import com.fasterxml.jackson.annotation.JsonProperty;
public class ClassConfig {
- @JsonProperty(value = "class")
private String className;
private String namespace;
private String set;
@@ -124,43 +122,43 @@ public void validate() {
}
}
- private void setClassName(String className) {
+ public void setClassName(String className) {
this.className = className;
}
- private void setNamespace(String namespace) {
+ public void setNamespace(String namespace) {
this.namespace = namespace;
}
- private void setSet(String set) {
+ public void setSet(String set) {
this.set = set;
}
- private void setTtl(Integer ttl) {
+ public void setTtl(Integer ttl) {
this.ttl = ttl;
}
- private void setVersion(Integer version) {
+ public void setVersion(Integer version) {
this.version = version;
}
- private void setSendKey(Boolean sendKey) {
+ public void setSendKey(Boolean sendKey) {
this.sendKey = sendKey;
}
- private void setMapAll(Boolean mapAll) {
+ public void setMapAll(Boolean mapAll) {
this.mapAll = mapAll;
}
- private void setDurableDelete(Boolean durableDelete) {
+ public void setDurableDelete(Boolean durableDelete) {
this.durableDelete = durableDelete;
}
- private void setKey(KeyConfig key) {
+ public void setKey(KeyConfig key) {
this.key = key;
}
- private void setShortName(String shortName) {
+ public void setShortName(String shortName) {
this.shortName = shortName;
}
diff --git a/src/main/java/com/aerospike/mapper/tools/configuration/KeyConfig.java b/src/main/java/com/aerospike/mapper/tools/configuration/KeyConfig.java
index 7dbe3ff..24fc1f3 100644
--- a/src/main/java/com/aerospike/mapper/tools/configuration/KeyConfig.java
+++ b/src/main/java/com/aerospike/mapper/tools/configuration/KeyConfig.java
@@ -24,7 +24,7 @@ public Boolean getStoreAsBin() {
return storeAsBin;
}
- public void setStoreAsBin(boolean value) {
+ public void setStoreAsBin(Boolean value) {
this.storeAsBin = value;
}
diff --git a/src/test/java/com/aerospike/mapper/BooleanTest.java b/src/test/java/com/aerospike/mapper/BooleanTest.java
index 46b2a85..c78c778 100644
--- a/src/test/java/com/aerospike/mapper/BooleanTest.java
+++ b/src/test/java/com/aerospike/mapper/BooleanTest.java
@@ -6,7 +6,6 @@
import com.aerospike.mapper.annotations.AerospikeKey;
import com.aerospike.mapper.annotations.AerospikeRecord;
import com.aerospike.mapper.tools.AeroMapper;
-import com.fasterxml.jackson.core.JsonProcessingException;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test;
@@ -28,7 +27,7 @@ public static class B {
}
@Test
- public void testNumericEncoding() throws JsonProcessingException {
+ public void testNumericEncoding() {
UseBoolBin = false;
B b = new B();
@@ -57,7 +56,7 @@ public void testNumericEncoding() throws JsonProcessingException {
}
@Test
- public void testObjectEncoding() throws JsonProcessingException {
+ public void testObjectEncoding() {
UseBoolBin = true;
B b = new B();
@@ -85,7 +84,7 @@ public void testObjectEncoding() throws JsonProcessingException {
}
@Test
- public void testObjectByDefault() throws JsonProcessingException {
+ public void testObjectByDefault() {
B b = new B();
b.boolValue = true;
b.id = 1;