introduce Tags
diff --git a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
index 082bede..6c8afc2 100644
--- a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
+++ b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
@@ -27,6 +27,7 @@
import org.yaml.snakeyaml.nodes.NodeTuple;
import org.yaml.snakeyaml.nodes.ScalarNode;
import org.yaml.snakeyaml.nodes.SequenceNode;
+import org.yaml.snakeyaml.nodes.Tags;
/**
* @see <a href="http://pyyaml.org/wiki/PyYAML">PyYAML</a> for more information
@@ -276,7 +277,7 @@
result = new BigInteger(result.toString());
}
} else if (Enum.class.isAssignableFrom(type)) {
- String tag = "tag:yaml.org,2002:" + type.getName();
+ String tag = Tags.PREFIX + type.getName();
node.setTag(tag);
result = super.callConstructor(node);
} else {
@@ -426,10 +427,10 @@
protected Class<?> getClassForNode(Node node) throws ClassNotFoundException {
Class<? extends Object> customTag = typeTags.get(node.getTag());
if (customTag == null) {
- if (node.getTag().length() < "tag:yaml.org,2002:".length()) {
+ if (node.getTag().length() < Tags.PREFIX.length()) {
throw new YAMLException("Unknown tag: " + node.getTag());
}
- String name = node.getTag().substring("tag:yaml.org,2002:".length());
+ String name = node.getTag().substring(Tags.PREFIX.length());
Class<?> cl = Class.forName(name);
typeTags.put(node.getTag(), cl);
return cl;
diff --git a/src/main/java/org/yaml/snakeyaml/emitter/Emitter.java b/src/main/java/org/yaml/snakeyaml/emitter/Emitter.java
index 773edee..6149b22 100644
--- a/src/main/java/org/yaml/snakeyaml/emitter/Emitter.java
+++ b/src/main/java/org/yaml/snakeyaml/emitter/Emitter.java
@@ -30,6 +30,7 @@
import org.yaml.snakeyaml.events.SequenceStartEvent;
import org.yaml.snakeyaml.events.StreamEndEvent;
import org.yaml.snakeyaml.events.StreamStartEvent;
+import org.yaml.snakeyaml.nodes.Tags;
/**
* <pre>
@@ -69,7 +70,7 @@
private final static Map<String, String> DEFAULT_TAG_PREFIXES = new LinkedHashMap<String, String>();
static {
DEFAULT_TAG_PREFIXES.put("!", "!");
- DEFAULT_TAG_PREFIXES.put("tag:yaml.org,2002:", "!!");
+ DEFAULT_TAG_PREFIXES.put(Tags.PREFIX, "!!");
}
// The stream should have the methods `write` and possibly `flush`.
private final Writer stream;
diff --git a/src/main/java/org/yaml/snakeyaml/nodes/Tags.java b/src/main/java/org/yaml/snakeyaml/nodes/Tags.java
new file mode 100644
index 0000000..92e01e0
--- /dev/null
+++ b/src/main/java/org/yaml/snakeyaml/nodes/Tags.java
@@ -0,0 +1,5 @@
+package org.yaml.snakeyaml.nodes;
+
+public class Tags {
+ public static final String PREFIX = "tag:yaml.org,2002:";
+}
diff --git a/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java b/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java
index 865a1d0..f16bdc5 100644
--- a/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java
+++ b/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java
@@ -22,6 +22,7 @@
import org.yaml.snakeyaml.events.SequenceStartEvent;
import org.yaml.snakeyaml.events.StreamEndEvent;
import org.yaml.snakeyaml.events.StreamStartEvent;
+import org.yaml.snakeyaml.nodes.Tags;
import org.yaml.snakeyaml.scanner.Scanner;
import org.yaml.snakeyaml.scanner.ScannerImpl;
import org.yaml.snakeyaml.tokens.AliasToken;
@@ -115,7 +116,7 @@
private static final Map<String, String> DEFAULT_TAGS = new HashMap<String, String>();
static {
DEFAULT_TAGS.put("!", "!");
- DEFAULT_TAGS.put("!!", "tag:yaml.org,2002:");
+ DEFAULT_TAGS.put("!!", Tags.PREFIX);
}
private final Scanner scanner;
diff --git a/src/main/java/org/yaml/snakeyaml/representer/Representer.java b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
index 0e2abdd..2c15b36 100644
--- a/src/main/java/org/yaml/snakeyaml/representer/Representer.java
+++ b/src/main/java/org/yaml/snakeyaml/representer/Representer.java
@@ -23,6 +23,7 @@
import org.yaml.snakeyaml.nodes.Node;
import org.yaml.snakeyaml.nodes.NodeTuple;
import org.yaml.snakeyaml.nodes.ScalarNode;
+import org.yaml.snakeyaml.nodes.Tags;
/**
* Represent JavaBeans
@@ -83,7 +84,7 @@
List<NodeTuple> value = new LinkedList<NodeTuple>();
String tag;
String customTag = classTags.get(javaBean.getClass());
- tag = customTag != null ? customTag : "tag:yaml.org,2002:" + javaBean.getClass().getName();
+ tag = customTag != null ? customTag : Tags.PREFIX + javaBean.getClass().getName();
// flow style will be chosen by BaseRepresenter
MappingNode node = new MappingNode(tag, value, null);
representedObjects.put(objectToRepresent, node);
diff --git a/src/main/java/org/yaml/snakeyaml/representer/SafeRepresenter.java b/src/main/java/org/yaml/snakeyaml/representer/SafeRepresenter.java
index b538775..54de31d 100644
--- a/src/main/java/org/yaml/snakeyaml/representer/SafeRepresenter.java
+++ b/src/main/java/org/yaml/snakeyaml/representer/SafeRepresenter.java
@@ -15,6 +15,7 @@
import java.util.regex.Pattern;
import org.yaml.snakeyaml.nodes.Node;
+import org.yaml.snakeyaml.nodes.Tags;
import org.yaml.snakeyaml.util.Base64Coder;
/**
@@ -205,7 +206,7 @@
private class RepresentEnum implements Represent {
public Node representData(Object data) {
- String tag = "tag:yaml.org,2002:" + data.getClass().getName();
+ String tag = Tags.PREFIX + data.getClass().getName();
return representScalar(tag, data.toString());
}
}
diff --git a/src/test/java/org/pyyaml/CanonicalScanner.java b/src/test/java/org/pyyaml/CanonicalScanner.java
index 5bddce3..3b1e13d 100644
--- a/src/test/java/org/pyyaml/CanonicalScanner.java
+++ b/src/test/java/org/pyyaml/CanonicalScanner.java
@@ -9,6 +9,7 @@
import java.util.Map;
import org.yaml.snakeyaml.error.Mark;
+import org.yaml.snakeyaml.nodes.Tags;
import org.yaml.snakeyaml.scanner.Scanner;
import org.yaml.snakeyaml.scanner.ScannerImpl;
import org.yaml.snakeyaml.tokens.AliasToken;
@@ -224,7 +225,7 @@
if (value.length() == 0) {
value = "!";
} else if (value.charAt(0) == '!') {
- value = "tag:yaml.org,2002:" + value.substring(1);
+ value = Tags.PREFIX + value.substring(1);
} else if (value.charAt(0) == '<' && value.charAt(value.length() - 1) == '>') {
value = value.substring(1, value.length() - 1);
} else {
diff --git a/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java b/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java
index a665cc8..dfe1d47 100644
--- a/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/DumperOptionsTest.java
@@ -9,6 +9,7 @@
import org.yaml.snakeyaml.emitter.Emitter;
import org.yaml.snakeyaml.error.YAMLException;
+import org.yaml.snakeyaml.nodes.Tags;
import org.yaml.snakeyaml.representer.Representer;
public class DumperOptionsTest extends TestCase {
@@ -275,7 +276,7 @@
assertEquals("%TAG !foo! bar\n--- [1, 2, 3]\n", yaml.dump(list));
//
options = new DumperOptions();
- tags.put("!yaml!", "tag:yaml.org,2002:");
+ tags.put("!yaml!", Tags.PREFIX);
yaml = new Yaml(options);
assertEquals("foo\n", yaml.dump("foo"));
}