fix merge
diff --git a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
index 24e16f8..e5f1b76 100644
--- a/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
+++ b/src/main/java/org/yaml/snakeyaml/constructor/Constructor.java
@@ -170,8 +170,6 @@
throw new YAMLException(e);
} catch (IllegalAccessException e) {
throw new YAMLException(e);
- } catch (ClassNotFoundException e) {
- throw new YAMLException(e);
}
}
@@ -307,6 +305,10 @@
result = constructStandardJavaInstance(type, node);
} else {
// there must be only 1 constructor with 1 argument
+ if (Modifier.isAbstract(type.getModifiers())) {
+ // use the tag when the runtime class cannot be instantiated
+ type = getClassForNode(node);
+ }
java.lang.reflect.Constructor[] javaConstructors = type.getConstructors();
boolean found = false;
java.lang.reflect.Constructor javaConstructor = null;
@@ -488,18 +490,23 @@
}
}
- protected Class<?> getClassForNode(Node node) throws ClassNotFoundException {
- Class<? extends Object> customTag = typeTags.get(node.getTag());
- if (customTag == null) {
+ protected Class<?> getClassForNode(Node node) {
+ Class<? extends Object> classForTag = typeTags.get(node.getTag());
+ if (classForTag == null) {
if (node.getTag().length() < Tags.PREFIX.length()) {
throw new YAMLException("Unknown tag: " + node.getTag());
}
String name = node.getTag().substring(Tags.PREFIX.length());
- Class<?> cl = Class.forName(name);
+ Class<?> cl;
+ try {
+ cl = Class.forName(name);
+ } catch (ClassNotFoundException e) {
+ throw new YAMLException("Class not found: " + name);
+ }
typeTags.put(node.getTag(), cl);
return cl;
} else {
- return customTag;
+ return classForTag;
}
}
}
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue9/NopropTestCase.java b/src/test/java/org/yaml/snakeyaml/issues/issue9/NopropTestCase.java
index 97da4f9..b152969 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue9/NopropTestCase.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue9/NopropTestCase.java
@@ -92,12 +92,12 @@
assertEquals(1, beanHolder.getBean().getIntVal());
}
- public void qtestNonBean() {
+ public void testNonBean() {
String yaml = "--- !!org.yaml.snakeyaml.issues.issue9.BeanHolder\nbean : !!org.yaml.snakeyaml.issues.issue9.Bean1 123";
Iterator<Object> docs = new Yaml().loadAll(yaml).iterator();
assertTrue(docs.hasNext());
BeanHolder beanHolder = (BeanHolder) docs.next();
assertEquals("BEAN_1", beanHolder.getBean().getStrVal());
- assertEquals(1, beanHolder.getBean().getIntVal());
+ assertEquals(123, beanHolder.getBean().getIntVal());
}
}