1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package examples;
18
19 import java.io.IOException;
20 import java.util.List;
21 import java.util.Map;
22
23 import junit.framework.TestCase;
24
25 import org.yaml.snakeyaml.Yaml;
26 import org.yaml.snakeyaml.constructor.Constructor;
27 import org.yaml.snakeyaml.nodes.MappingNode;
28 import org.yaml.snakeyaml.nodes.NodeId;
29
30
31
32
33 public class SelectiveConstructorTest extends TestCase {
34 class SelectiveConstructor extends Constructor {
35 public SelectiveConstructor() {
36
37 yamlClassConstructors.put(NodeId.mapping, new MyPersistentObjectConstruct());
38 }
39
40 class MyPersistentObjectConstruct extends Constructor.ConstructMapping {
41 @Override
42 protected Object constructJavaBean2ndStep(MappingNode node, Object object) {
43 Class<?> type = node.getType();
44 if (type.equals(MyPersistentObject.class)) {
45
46 Map<Object, Object> map = constructMapping(node);
47 String id = (String) map.get("id");
48 return new MyPersistentObject(id, 17);
49 } else {
50
51 return super.constructJavaBean2ndStep(node, object);
52 }
53 }
54 }
55 }
56
57 public void testConstructor() throws IOException {
58 Yaml yaml = new Yaml(new SelectiveConstructor());
59 List<?> data = (List<?>) yaml
60 .load("- 1\n- 2\n- !!examples.MyPersistentObject {amount: 222, id: persistent}");
61
62 assertEquals(3, data.size());
63 MyPersistentObject myObject = (MyPersistentObject) data.get(2);
64 assertEquals(17, myObject.getAmount());
65 assertEquals("persistent", myObject.getId());
66 }
67 }
68
69 class MyPersistentObject {
70 private String id;
71 private int amount;
72
73 public MyPersistentObject() {
74 this.id = "noid";
75 this.amount = 222;
76 }
77
78 public MyPersistentObject(String id, int amount) {
79 this.id = id;
80 this.amount = amount;
81 }
82
83 public String getId() {
84 return id;
85 }
86
87 public void setId(String id) {
88 this.id = id;
89 }
90
91 public int getAmount() {
92 return amount;
93 }
94
95 public void setAmount(int amount) {
96 this.amount = amount;
97 }
98
99 @Override
100 public String toString() {
101 return "MyPersistentObject [id=" + id + ", amount=" + amount + "]";
102 }
103 }