1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.yaml.snakeyaml.constructor;
18
19 import junit.framework.TestCase;
20
21 import org.yaml.snakeyaml.Yaml;
22
23 public class FilterClassesConstructorTest extends TestCase {
24
25 public void testGetClassForName() {
26 Yaml yaml = new Yaml(new FilterConstructor(true));
27 String input = "!!org.yaml.snakeyaml.constructor.FilterClassesConstructorTest$FilteredBean {name: Andrey, number: 543}";
28 try {
29 yaml.load(input);
30 fail("Filter is expected.");
31 } catch (Exception e) {
32 assertTrue(e.getMessage().contains("Filter is applied."));
33 }
34 yaml = new Yaml(new FilterConstructor(false));
35 FilteredBean s = (FilteredBean) yaml.load(input);
36 assertEquals("Andrey", s.getName());
37 }
38
39 class FilterConstructor extends Constructor {
40 private boolean filter;
41
42 public FilterConstructor(boolean f) {
43 filter = f;
44 }
45
46 @Override
47 protected Class<?> getClassForName(String name) throws ClassNotFoundException {
48 if (filter && name.startsWith("org.yaml")) {
49 throw new RuntimeException("Filter is applied.");
50 }
51 return super.getClassForName(name);
52 }
53 }
54
55 public static class FilteredBean {
56 private String name;
57 private int number;
58
59 public String getName() {
60 return name;
61 }
62
63 public void setName(String name) {
64 this.name = name;
65 }
66
67 public int getNumber() {
68 return number;
69 }
70
71 public void setNumber(int number) {
72 this.number = number;
73 }
74 }
75 }