Add Yaml.loadAs() methods. JavaBeanLoader is marked as deprecated. Part of issue 124
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 9efa14f..303a19b 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -7,6 +7,9 @@
 	</properties>

 	<body>

 	    <release version="1.9-SNAPSHOT" date="in Mercurial" description="Development">

+            <action dev="py4fun" type="add" issue="124">

+                Add Yaml.loadAs() methods. JavaBeanLoader is marked as deprecated (2011-07-03)

+            </action>

             <action dev="py4fun" type="remove" issue="124">

                 Remove TypeDescription.root property to prepare issue 124. This is a minor backwards incompatible change.

                 Now instead of setting as root, the TypeDescription must be passed to the Contructor's constructor

diff --git a/src/main/java/org/yaml/snakeyaml/JavaBeanLoader.java b/src/main/java/org/yaml/snakeyaml/JavaBeanLoader.java
index c5831de..87587fb 100644
--- a/src/main/java/org/yaml/snakeyaml/JavaBeanLoader.java
+++ b/src/main/java/org/yaml/snakeyaml/JavaBeanLoader.java
@@ -31,6 +31,7 @@
  * global tag with the class definition like '!!com.package.MyBean' it is

  * ignored in favour of the runtime class <code>T</code>.

  * 

+ * @deprecated use Yaml.loadAs() methods instead

  * @see http://www.artima.com/weblogs/viewpost.jsp?thread=208860

  */

 public class JavaBeanLoader<T> {

diff --git a/src/main/java/org/yaml/snakeyaml/Yaml.java b/src/main/java/org/yaml/snakeyaml/Yaml.java
index 94db235..51ebfa6 100644
--- a/src/main/java/org/yaml/snakeyaml/Yaml.java
+++ b/src/main/java/org/yaml/snakeyaml/Yaml.java
@@ -263,7 +263,7 @@
      * @return parsed object

      */

     public Object load(String yaml) {

-        return loadFromReader(new StreamReader(yaml));

+        return loadFromReader(new StreamReader(yaml), Object.class);

     }

 

     /**

@@ -275,7 +275,7 @@
      * @return parsed object

      */

     public Object load(InputStream io) {

-        return loadFromReader(new StreamReader(new UnicodeReader(io)));

+        return loadFromReader(new StreamReader(new UnicodeReader(io)), Object.class);

     }

 

     /**

@@ -287,13 +287,64 @@
      * @return parsed object

      */

     public Object load(Reader io) {

-        return loadFromReader(new StreamReader(io));

+        return loadFromReader(new StreamReader(io), Object.class);

     }

 

-    private Object loadFromReader(StreamReader sreader) {

+    /**

+     * Parse the only YAML document in a stream and produce the corresponding

+     * Java object.

+     * 

+     * @param <T>

+     *            Class is defined by the second argument

+     * @param io

+     *            data to load from (BOM must not be present)

+     * @param type

+     *            Class of the object to be created

+     * @return parsed object

+     */

+    @SuppressWarnings("unchecked")

+    public <T> T loadAs(Reader io, Class<T> type) {

+        return (T) loadFromReader(new StreamReader(io), type);

+    }

+

+    /**

+     * Parse the only YAML document in a String and produce the corresponding

+     * Java object. (Because the encoding in known BOM is not respected.)

+     * 

+     * @param <T>

+     *            Class is defined by the second argument

+     * @param yaml

+     *            YAML data to load from (BOM must not be present)

+     * @param type

+     *            Class of the object to be created

+     * @return parsed object

+     */

+    @SuppressWarnings("unchecked")

+    public <T> T loadAs(String yaml, Class<T> type) {

+        return (T) loadFromReader(new StreamReader(yaml), type);

+    }

+

+    /**

+     * Parse the only YAML document in a stream and produce the corresponding

+     * Java object.

+     * 

+     * @param <T>

+     *            Class is defined by the second argument

+     * @param input

+     *            data to load from (BOM is respected and removed)

+     * @param type

+     *            Class of the object to be created

+     * @return parsed object

+     */

+    @SuppressWarnings("unchecked")

+    public <T> T loadAs(InputStream input, Class<T> type) {

+        return (T) loadFromReader(new StreamReader(new UnicodeReader(input)), type);

+    }

+

+    private Object loadFromReader(StreamReader sreader, Class<?> type) {

         Composer composer = new Composer(new ParserImpl(sreader), resolver);

         constructor.setComposer(composer);

-        return constructor.getSingleData();

+        return constructor.getSingleData(type);

     }

 

     /**

diff --git a/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java b/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java
index 9cbebdf..366339b 100644
--- a/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java
+++ b/src/main/java/org/yaml/snakeyaml/constructor/BaseConstructor.java
@@ -116,11 +116,13 @@
      * @throws ComposerException
      *             in case there are more documents in the stream
      */
-    public Object getSingleData() {
+    public Object getSingleData(Class<?> type) {
         // Ensure that the stream contains a single document and construct it
         Node node = composer.getSingleNode();
         if (node != null) {
-            if (rootTag != null) {
+            if (Object.class != type) {
+                node.setTag(new Tag(type));
+            } else if (rootTag != null) {
                 node.setTag(rootTag);
             }
             return constructDocument(node);
diff --git a/src/test/java/examples/collections/ListFileldBeanTest.java b/src/test/java/examples/collections/ListFileldBeanTest.java
index a6880b1..bbb8efd 100644
--- a/src/test/java/examples/collections/ListFileldBeanTest.java
+++ b/src/test/java/examples/collections/ListFileldBeanTest.java
@@ -22,8 +22,8 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

 

 /**

  * Test public field ListBean->List<Developer> developers <br/>

@@ -51,9 +51,8 @@
     public void testLoadList() {

         String output = Util.getLocalResource("examples/list-bean-1.yaml");

         // System.out.println(output);

-        JavaBeanLoader<ListFieldBean> beanLoader = new JavaBeanLoader<ListFieldBean>(

-                ListFieldBean.class);

-        ListFieldBean parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        ListFieldBean parsed = beanLoader.loadAs(output, ListFieldBean.class);

         assertNotNull(parsed);

         List<String> list2 = parsed.getChildren();

         assertEquals(2, list2.size());

diff --git a/src/test/java/examples/collections/TypeSafeListNoGerericsTest.java b/src/test/java/examples/collections/TypeSafeListNoGerericsTest.java
index 28199a3..d258c0a 100644
--- a/src/test/java/examples/collections/TypeSafeListNoGerericsTest.java
+++ b/src/test/java/examples/collections/TypeSafeListNoGerericsTest.java
@@ -23,8 +23,8 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

 

 /**

  * Test ListBean->List developers <br/>

@@ -52,8 +52,8 @@
     public void testLoadList() {

         String output = Util.getLocalResource("examples/list-bean-1.yaml");

         // System.out.println(output);

-        JavaBeanLoader<ListBean> beanLoader = new JavaBeanLoader<ListBean>(ListBean.class);

-        ListBean parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        ListBean parsed = beanLoader.loadAs(output, ListBean.class);

         assertNotNull(parsed);

         List<String> list2 = parsed.getChildren();

         assertEquals(2, list2.size());

diff --git a/src/test/java/examples/collections/TypeSafeListTest.java b/src/test/java/examples/collections/TypeSafeListTest.java
index 94bb28f..4fa83f7 100644
--- a/src/test/java/examples/collections/TypeSafeListTest.java
+++ b/src/test/java/examples/collections/TypeSafeListTest.java
@@ -22,8 +22,8 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

 

 /**

  * Test ListBean->List<Developer> developers <br/>

@@ -50,8 +50,8 @@
     public void testLoadList() {

         String output = Util.getLocalResource("examples/list-bean-1.yaml");

         // System.out.println(output);

-        JavaBeanLoader<ListBean1> beanLoader = new JavaBeanLoader<ListBean1>(ListBean1.class);

-        ListBean1 parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        ListBean1 parsed = beanLoader.loadAs(output, ListBean1.class);

         assertNotNull(parsed);

         List<String> list2 = parsed.getChildren();

         assertEquals(2, list2.size());

diff --git a/src/test/java/examples/collections/TypeSafeListWithInterfaceTest.java b/src/test/java/examples/collections/TypeSafeListWithInterfaceTest.java
index 48094a7..bc5ef3e 100644
--- a/src/test/java/examples/collections/TypeSafeListWithInterfaceTest.java
+++ b/src/test/java/examples/collections/TypeSafeListWithInterfaceTest.java
@@ -22,8 +22,8 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

 

 /**

  * Test ListBean->List<Human> developers <br/>

@@ -50,9 +50,9 @@
     public void testLoadWrongList() {

         String output = Util.getLocalResource("examples/list-bean-1.yaml");

         // System.out.println(output);

-        JavaBeanLoader<ListBean> beanLoader = new JavaBeanLoader<ListBean>(ListBean.class);

+        Yaml beanLoader = new Yaml();

         try {

-            beanLoader.load(output);

+            beanLoader.loadAs(output, ListBean.class);

             fail("Global tags are required since Human is an interface.");

         } catch (Exception e) {

             assertTrue(e.getMessage(), e.getMessage().contains("Cannot create property=developers"));

@@ -62,8 +62,8 @@
     public void testLoadList() {

         String output = Util.getLocalResource("examples/list-bean-2.yaml");

         // System.out.println(output);

-        JavaBeanLoader<ListBean> beanLoader = new JavaBeanLoader<ListBean>(ListBean.class);

-        ListBean parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        ListBean parsed = beanLoader.loadAs(output, ListBean.class);

         assertNotNull(parsed);

         List<String> list2 = parsed.getChildren();

         assertEquals(2, list2.size());

diff --git a/src/test/java/examples/collections/TypeSafeMap2Test.java b/src/test/java/examples/collections/TypeSafeMap2Test.java
index 5291f83..f3b5c60 100644
--- a/src/test/java/examples/collections/TypeSafeMap2Test.java
+++ b/src/test/java/examples/collections/TypeSafeMap2Test.java
@@ -23,8 +23,8 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

 

 /**

  * Test MapBean->Map<Enum, Developer> developers <br/>

@@ -66,8 +66,8 @@
         String etalon = Util.getLocalResource("examples/map-bean-13.yaml");

         assertEquals(etalon, output);

         // load

-        JavaBeanLoader<MapBean2> beanLoader = new JavaBeanLoader<MapBean2>(MapBean2.class);

-        MapBean2 parsed = beanLoader.load(etalon);

+        Yaml beanLoader = new Yaml();

+        MapBean2 parsed = beanLoader.loadAs(etalon, MapBean2.class);

         assertNotNull(parsed);

         Map<Developer2, Color> parsedData = parsed.getData();

         assertEquals(3, parsedData.size());

@@ -82,8 +82,8 @@
     public void testLoadMap() {

         String output = Util.getLocalResource("examples/map-bean-12.yaml");

         // System.out.println(output);

-        JavaBeanLoader<MapBean2> beanLoader = new JavaBeanLoader<MapBean2>(MapBean2.class);

-        MapBean2 parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        MapBean2 parsed = beanLoader.loadAs(output, MapBean2.class);

         assertNotNull(parsed);

         Map<Developer2, Color> data = parsed.getData();

         assertEquals(2, data.size());

diff --git a/src/test/java/examples/collections/TypeSafeMapImplementationsTest.java b/src/test/java/examples/collections/TypeSafeMapImplementationsTest.java
index 7dc0158..691603b 100644
--- a/src/test/java/examples/collections/TypeSafeMapImplementationsTest.java
+++ b/src/test/java/examples/collections/TypeSafeMapImplementationsTest.java
@@ -26,7 +26,6 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

 import org.yaml.snakeyaml.Yaml;

 

@@ -54,8 +53,8 @@
     public void testLoadMap() {

         String output = Util.getLocalResource("examples/map-bean-1.yaml");

         // System.out.println(output);

-        JavaBeanLoader<MapBean> beanLoader = new JavaBeanLoader<MapBean>(MapBean.class);

-        MapBean parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        MapBean parsed = beanLoader.loadAs(output, MapBean.class);

         assertNotNull(parsed);

         SortedMap<String, String> sortedMap = parsed.getSorted();

         assertEquals(2, sortedMap.size());

diff --git a/src/test/java/examples/collections/TypeSafeMapTest.java b/src/test/java/examples/collections/TypeSafeMapTest.java
index 365ad30..ba9afab 100644
--- a/src/test/java/examples/collections/TypeSafeMapTest.java
+++ b/src/test/java/examples/collections/TypeSafeMapTest.java
@@ -22,8 +22,8 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

 

 /**

  * Test MapBean->Map<String, Developer> developers <br/>

@@ -69,8 +69,8 @@
     public void testLoadMap() {

         String output = Util.getLocalResource("examples/map-bean-10.yaml");

         // System.out.println(output);

-        JavaBeanLoader<MapBean> beanLoader = new JavaBeanLoader<MapBean>(MapBean.class);

-        MapBean parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        MapBean parsed = beanLoader.loadAs(output, MapBean.class);

         assertNotNull(parsed);

         Map<String, Integer> data = parsed.getData();

         assertEquals(3, data.size());

@@ -166,9 +166,8 @@
     public void testLoadMapWithObject() {

         String output = Util.getLocalResource("examples/map-bean-10.yaml");

         // System.out.println(output);

-        JavaBeanLoader<MapBeanNoGenerics> beanLoader = new JavaBeanLoader<MapBeanNoGenerics>(

-                MapBeanNoGenerics.class);

-        MapBeanNoGenerics parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        MapBeanNoGenerics parsed = beanLoader.loadAs(output, MapBeanNoGenerics.class);

         assertNotNull(parsed);

         Map<String, Integer> data = parsed.getData();

         assertEquals(3, data.size());

diff --git a/src/test/java/examples/collections/TypeSafePriorityTest.java b/src/test/java/examples/collections/TypeSafePriorityTest.java
index f3362cc..20ddcd4 100644
--- a/src/test/java/examples/collections/TypeSafePriorityTest.java
+++ b/src/test/java/examples/collections/TypeSafePriorityTest.java
@@ -20,9 +20,10 @@
 

 import junit.framework.TestCase;

 

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.TypeDescription;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

+import org.yaml.snakeyaml.constructor.Constructor;

 

 /**

  * Test ListBean->List<Human> developers <br/>

@@ -39,8 +40,8 @@
         // System.out.println(output);

         TypeDescription descr = new TypeDescription(ListBean.class);

         descr.putListPropertyType("developers", Developer.class);

-        JavaBeanLoader<ListBean> beanLoader = new JavaBeanLoader<ListBean>(descr);

-        ListBean parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml(new Constructor(descr));

+        ListBean parsed = beanLoader.loadAs(output, ListBean.class);

         assertNotNull(parsed);

         List<Human> developers = parsed.getDevelopers();

         assertEquals(2, developers.size());

diff --git a/src/test/java/examples/collections/TypeSafeSetImplementationsTest.java b/src/test/java/examples/collections/TypeSafeSetImplementationsTest.java
index 1a42a68..f10a6d4 100644
--- a/src/test/java/examples/collections/TypeSafeSetImplementationsTest.java
+++ b/src/test/java/examples/collections/TypeSafeSetImplementationsTest.java
@@ -25,7 +25,6 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

 import org.yaml.snakeyaml.Yaml;

 

@@ -73,8 +72,8 @@
     public void testLoadSet() {

         String output = Util.getLocalResource("examples/set-bean-1.yaml");

         // System.out.println(output);

-        JavaBeanLoader<SetBean> beanLoader = new JavaBeanLoader<SetBean>(SetBean.class);

-        SetBean parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        SetBean parsed = beanLoader.loadAs(output, SetBean.class);

         assertNotNull(parsed);

         SortedSet<String> sortedMap = parsed.getSorted();

         assertEquals(3, sortedMap.size());

@@ -93,8 +92,8 @@
     public void testLoadSetReversed() {

         String output = Util.getLocalResource("examples/set-bean-2.yaml");

         // System.out.println(output);

-        JavaBeanLoader<SetBean> beanLoader = new JavaBeanLoader<SetBean>(SetBean.class);

-        SetBean parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        SetBean parsed = beanLoader.loadAs(output, SetBean.class);

         assertNotNull(parsed);

         SortedSet<String> sortedMap = parsed.getSorted();

         assertEquals(3, sortedMap.size());

diff --git a/src/test/java/examples/staticstate/StaticFieldsWrapperTest.java b/src/test/java/examples/staticstate/StaticFieldsWrapperTest.java
index f3bcc26..ba70e3f 100644
--- a/src/test/java/examples/staticstate/StaticFieldsWrapperTest.java
+++ b/src/test/java/examples/staticstate/StaticFieldsWrapperTest.java
@@ -21,7 +21,6 @@
 import org.yaml.snakeyaml.DumperOptions;

 import org.yaml.snakeyaml.DumperOptions.FlowStyle;

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.TypeDescription;

 import org.yaml.snakeyaml.Yaml;

 import org.yaml.snakeyaml.constructor.Constructor;

@@ -98,8 +97,8 @@
         // System.out.println(output);

         assertEquals("{age: -47, color: Violet, name: Bahrack, type: Type3}\n", output);

         // parse back to instance

-        JavaBeanLoader<Wrapper> loader = new JavaBeanLoader<Wrapper>(Wrapper.class);

-        Wrapper wrapper = loader.load(output);

+        Yaml loader = new Yaml();

+        Wrapper wrapper = loader.loadAs(output, Wrapper.class);

         JavaBeanWithStaticState bean2 = wrapper.createBean();

         assertEquals(-47, bean2.getAge());

         assertEquals("Bahrack", bean2.getName());

diff --git a/src/test/java/org/pyyaml/CanonicalLoader.java b/src/test/java/org/pyyaml/CanonicalLoader.java
index e4c5b45..b96cf80 100644
--- a/src/test/java/org/pyyaml/CanonicalLoader.java
+++ b/src/test/java/org/pyyaml/CanonicalLoader.java
@@ -36,7 +36,7 @@
             }

             Composer composer = new Composer(new CanonicalParser(buffer.toString()), resolver);

             constructor.setComposer(composer);

-            return constructor.getSingleData();

+            return constructor.getSingleData(Object.class);

         } catch (IOException e) {

             throw new YAMLException(e);

         }

diff --git a/src/test/java/org/yaml/snakeyaml/JavaBeanLoaderTest.java b/src/test/java/org/yaml/snakeyaml/JavaBeanLoaderTest.java
index 7436cd1..bae4bf8 100644
--- a/src/test/java/org/yaml/snakeyaml/JavaBeanLoaderTest.java
+++ b/src/test/java/org/yaml/snakeyaml/JavaBeanLoaderTest.java
@@ -25,6 +25,7 @@
 

 import junit.framework.TestCase;

 

+import org.yaml.snakeyaml.constructor.Constructor;

 import org.yaml.snakeyaml.introspector.BeanAccess;

 

 public class JavaBeanLoaderTest extends TestCase {

@@ -37,13 +38,12 @@
         String output = yaml.dump(bean);

         assertEquals("!!org.yaml.snakeyaml.JavaBeanLoaderTest$Bean {id: 3, name: Test me.}\n",

                 output);

-        JavaBeanLoader<Bean> loader = new JavaBeanLoader<Bean>(Bean.class);

-        Bean parsed = loader.load(output);

+        Yaml loader = new Yaml();

+        Bean parsed = loader.loadAs(output, Bean.class);

         assertEquals(3, parsed.getId());

         assertEquals("Test me.", parsed.getName());

         // Runtime definition is more important

-        JavaBeanLoader<Bean2> loader2 = new JavaBeanLoader<Bean2>(Bean2.class);

-        Bean2 parsed2 = loader2.load(output);

+        Bean2 parsed2 = loader.loadAs(output, Bean2.class);

         assertEquals(3, parsed2.getId());

         assertEquals("Test me.", parsed2.getName());

         assertFalse(parsed2.isValid());

@@ -52,8 +52,8 @@
     public void testLoadInputStream() {

         String yaml = "!!org.yaml.snakeyaml.JavaBeanParserTest$Bean {id: 3, name: Test me.}\n";

         InputStream input = new ByteArrayInputStream(yaml.getBytes());

-        JavaBeanLoader<Bean> loader = new JavaBeanLoader<Bean>(Bean.class);

-        Bean parsed = loader.load(input);

+        Yaml loader = new Yaml();

+        Bean parsed = loader.loadAs(input, Bean.class);

         assertEquals(3, parsed.getId());

         assertEquals("Test me.", parsed.getName());

     }

@@ -61,12 +61,13 @@
     public void testLoadReader() {

         String yaml = "!!org.yaml.snakeyaml.JavaBeanParserTest$Bean {id: 3, name: Test me.}\n";

         Reader input = new StringReader(yaml);

-        JavaBeanLoader<Bean> loader = new JavaBeanLoader<Bean>(Bean.class);

-        Bean parsed = loader.load(input);

+        Yaml loader = new Yaml();

+        Bean parsed = loader.loadAs(input, Bean.class);

         assertEquals(3, parsed.getId());

         assertEquals("Test me.", parsed.getName());

     }

 

+    @SuppressWarnings("deprecation")

     public void testLoaderNullClass() {

         try {

             new JavaBeanLoader<Bean>((Class<Bean>) null);

@@ -76,6 +77,7 @@
         }

     }

 

+    @SuppressWarnings("deprecation")

     public void testLoaderNullTypeDescription() {

         try {

             new JavaBeanLoader<Bean>((TypeDescription) null);

@@ -85,6 +87,17 @@
         }

     }

 

+    public void testLoaderNullRootClass() {

+        try {

+            Yaml loader = new Yaml();

+            loader.loadAs("123", null);

+            fail();

+        } catch (NullPointerException e) {

+            assertEquals("Class for tag must be provided.", e.getMessage());

+        }

+    }

+

+    @SuppressWarnings("deprecation")

     public void testLoaderNullOptions() {

         try {

             new JavaBeanLoader<Bean>((LoaderOptions) null, BeanAccess.DEFAULT);

@@ -157,8 +170,8 @@
         assertEquals("bean:\n  id: 3\n  name: Test me.\nlist: null\nname: Name123\n", output);

         TypeDescription td = new TypeDescription(Bean3.class);

         td.putListPropertyType("list", Integer.class);

-        JavaBeanLoader<Bean3> loader = new JavaBeanLoader<Bean3>(td);

-        Bean3 parsed = loader.load(output);

+        Yaml loader = new Yaml(new Constructor(td));

+        Bean3 parsed = (Bean3) loader.load(output);

         assertEquals("Name123", parsed.getName());

     }

 

@@ -178,13 +191,29 @@
         assertEquals("bean:\n  id: 3\n  name: Test me.\nlist:\n- 13\n- 17\nname: Name123\n", output);

         TypeDescription td = new TypeDescription(Bean3.class);

         td.putListPropertyType("list", Integer.class);

-        JavaBeanLoader<Bean3> loader = new JavaBeanLoader<Bean3>(td);

-        Bean3 parsed = loader.load(output);

+        Yaml loader = new Yaml(new Constructor(td));

+        Bean3 parsed = (Bean3) loader.load(output);

         assertEquals("Name123", parsed.getName());

         List<Integer> parsedList = parsed.getList();

         assertEquals(2, parsedList.size());

     }

 

+    public void testTypeDescription3() {

+        Bean3 bean3 = new Bean3();

+        bean3.setName("Name123");

+        Bean bean = new Bean();

+        bean.setId(3);

+        bean.setName("Test me.");

+        bean3.setBean(bean);

+        JavaBeanDumper dumper = new JavaBeanDumper();

+        String output = dumper.dump(bean3);

+        assertEquals("bean:\n  id: 3\n  name: Test me.\nlist: null\nname: Name123\n", output);

+        TypeDescription td = new TypeDescription(Bean2.class);

+        Yaml loader = new Yaml(new Constructor(td));

+        Bean3 parsed = loader.loadAs(output, Bean3.class);// Bean3 must be taken

+        assertEquals("Name123", parsed.getName());

+    }

+

     public static class Bean3 {

         private String name;

         private Bean bean;

diff --git a/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java b/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java
index c4dc1bf..23041e7 100644
--- a/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java
+++ b/src/test/java/org/yaml/snakeyaml/JavaBeanTimeStampTest.java
@@ -38,9 +38,9 @@
         assertEquals(

                 "!!org.yaml.snakeyaml.JavaBeanWithSqlTimestamp\ndate: 2001-09-25T00:00:00Z\ntimestamp: 2001-09-09T01:46:40Z\n",

                 dumpStr);

-        JavaBeanLoader<JavaBeanWithSqlTimestamp> loader = new JavaBeanLoader<JavaBeanWithSqlTimestamp>(

+        Yaml loader = new Yaml();

+        JavaBeanWithSqlTimestamp javaBeanToLoad = loader.loadAs(dumpStr,

                 JavaBeanWithSqlTimestamp.class);

-        JavaBeanWithSqlTimestamp javaBeanToLoad = loader.load(dumpStr);

         assertEquals(stamp, javaBeanToLoad.getTimestamp());

         assertEquals(date, javaBeanToLoad.getDate());

     }

@@ -57,9 +57,9 @@
         Yaml yaml = new Yaml(options);

         String dumpStr = yaml.dump(javaBeanToDump);

         assertEquals("date: 2001-09-25T00:00:00Z\ntimestamp: 2001-09-09T01:46:40Z\n", dumpStr);

-        JavaBeanLoader<JavaBeanWithSqlTimestamp> loader = new JavaBeanLoader<JavaBeanWithSqlTimestamp>(

+        Yaml loader = new Yaml();

+        JavaBeanWithSqlTimestamp javaBeanToLoad = loader.loadAs(dumpStr,

                 JavaBeanWithSqlTimestamp.class);

-        JavaBeanWithSqlTimestamp javaBeanToLoad = loader.load(dumpStr);

         assertEquals(stamp, javaBeanToLoad.getTimestamp());

         assertEquals(date, javaBeanToLoad.getDate());

     }

diff --git a/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java b/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java
index 3f5f184..dc71394 100644
--- a/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java
+++ b/src/test/java/org/yaml/snakeyaml/JavaBeanWithNullValuesTest.java
@@ -27,11 +27,11 @@
 import org.yaml.snakeyaml.representer.Representer;
 
 public class JavaBeanWithNullValuesTest extends TestCase {
-    private JavaBeanLoader<JavaBeanWithNullValues> loader;
+    private Yaml loader;
 
     @Override
     protected void setUp() throws Exception {
-        loader = new JavaBeanLoader<JavaBeanWithNullValues>(JavaBeanWithNullValues.class);
+        loader = new Yaml();
     }
 
     public void testNotNull() throws Exception {
@@ -49,7 +49,7 @@
         assertNotNull(parsed.getSqlDate());
         assertNotNull(parsed.getTimestamp());
         //
-        parsed = loader.load(dumpStr);
+        parsed = loader.loadAs(dumpStr, JavaBeanWithNullValues.class);
         assertNotNull(parsed.getString());
         assertNotNull(parsed.getBoolean1());
         assertNotNull(parsed.getDate());
@@ -67,7 +67,7 @@
         JavaBeanWithNullValues parsed = (JavaBeanWithNullValues) yaml.load(dumpStr);
         assertNull(parsed.getString());
         //
-        parsed = loader.load(dumpStr);
+        parsed = loader.loadAs(dumpStr, JavaBeanWithNullValues.class);
         assertNull(parsed.getString());
     }
 
@@ -119,7 +119,7 @@
         assertFalse("No explicit root tag must be used.",
                 dumpStr.contains("JavaBeanWithNullValues"));
         yaml = new Yaml(new CustomRepresenter(), options);
-        JavaBeanWithNullValues parsed = loader.load(dumpStr);
+        JavaBeanWithNullValues parsed = loader.loadAs(dumpStr, JavaBeanWithNullValues.class);
         assertNull(" expect null, got " + parsed.getBoolean1(), parsed.getBoolean1());
         assertNull(" expect null, got " + parsed.getString(), parsed.getString());
         assertEquals(1d, parsed.getDouble1());
diff --git a/src/test/java/org/yaml/snakeyaml/constructor/ConstructorMappingTest.java b/src/test/java/org/yaml/snakeyaml/constructor/ConstructorMappingTest.java
index 0a8a888..55ab552 100644
--- a/src/test/java/org/yaml/snakeyaml/constructor/ConstructorMappingTest.java
+++ b/src/test/java/org/yaml/snakeyaml/constructor/ConstructorMappingTest.java
@@ -56,7 +56,7 @@
         Resolver resolver = new Resolver();

         Composer composer = new Composer(parser, resolver);

         constructor.setComposer(composer);

-        return constructor.getSingleData();

+        return constructor.getSingleData(Object.class);

     }

 

     class CustomConstructor extends Constructor {

diff --git a/src/test/java/org/yaml/snakeyaml/constructor/ConstructorSequenceTest.java b/src/test/java/org/yaml/snakeyaml/constructor/ConstructorSequenceTest.java
index 68d6958..0c89598 100644
--- a/src/test/java/org/yaml/snakeyaml/constructor/ConstructorSequenceTest.java
+++ b/src/test/java/org/yaml/snakeyaml/constructor/ConstructorSequenceTest.java
@@ -73,7 +73,7 @@
         Resolver resolver = new Resolver();

         Composer composer = new Composer(parser, resolver);

         constructor.setComposer(composer);

-        List<Object> result = (List<Object>) constructor.getSingleData();

+        List<Object> result = (List<Object>) constructor.getSingleData(Object.class);

         return result;

     }

 

diff --git a/src/test/java/org/yaml/snakeyaml/constructor/TypeSafeCollectionsTest.java b/src/test/java/org/yaml/snakeyaml/constructor/TypeSafeCollectionsTest.java
index ccf248b..1e33df1 100644
--- a/src/test/java/org/yaml/snakeyaml/constructor/TypeSafeCollectionsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/constructor/TypeSafeCollectionsTest.java
@@ -24,7 +24,6 @@
 

 import junit.framework.TestCase;

 

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.TypeDescription;

 import org.yaml.snakeyaml.Util;

 import org.yaml.snakeyaml.Yaml;

@@ -87,8 +86,8 @@
         String output = yaml.dump(c);

         assertEquals(Util.getLocalResource("javabeans/mycar-with-global-tag1.yaml"), output);

         // load

-        JavaBeanLoader<MyCar> beanLoader = new JavaBeanLoader<MyCar>(MyCar.class);

-        MyCar car = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        MyCar car = beanLoader.loadAs(output, MyCar.class);

         assertNotNull(car);

         assertEquals("00-FF-Q2", car.getPlate());

         assertEquals(5, car.getWheels().size());

diff --git a/src/test/java/org/yaml/snakeyaml/emitter/template/VelocityTest.java b/src/test/java/org/yaml/snakeyaml/emitter/template/VelocityTest.java
index db4a5e1..753e42f 100644
--- a/src/test/java/org/yaml/snakeyaml/emitter/template/VelocityTest.java
+++ b/src/test/java/org/yaml/snakeyaml/emitter/template/VelocityTest.java
@@ -29,7 +29,6 @@
 import org.yaml.snakeyaml.DumperOptions;

 import org.yaml.snakeyaml.DumperOptions.FlowStyle;

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

 import org.yaml.snakeyaml.Yaml;

 import org.yaml.snakeyaml.immutable.Point;

@@ -66,8 +65,8 @@
         assertEquals(etalon.length(), output.length());

         assertEquals(etalon, output);

         // parse the YAML document

-        JavaBeanLoader<MyBean> loader = new JavaBeanLoader<MyBean>(MyBean.class);

-        MyBean parsedBean = loader.load(output);

+        Yaml loader = new Yaml();

+        MyBean parsedBean = loader.loadAs(output, MyBean.class);

         assertEquals(bean, parsedBean);

     }

 

diff --git a/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java b/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java
index 7aebefc..9fbe65e 100644
--- a/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java
+++ b/src/test/java/org/yaml/snakeyaml/generics/BirdTest.java
@@ -21,7 +21,6 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.DumperOptions;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Yaml;

 import org.yaml.snakeyaml.nodes.Tag;

 

@@ -40,13 +39,13 @@
         String output = yaml.dump(bird);

         Bird parsed;

         String javaVendor = System.getProperty("java.vm.name");

-        JavaBeanLoader<Bird> loader = new JavaBeanLoader<Bird>(Bird.class);

+        Yaml loader = new Yaml();

         if (GenericsBugDetector.isProperIntrospection()) {

             // no global tags

             System.out.println("java.vm.name: " + javaVendor);

             assertEquals("no global tags must be emitted.", "home: {height: 3}\nname: Eagle\n",

                     output);

-            parsed = loader.load(output);

+            parsed = loader.loadAs(output, Bird.class);

 

         } else {

             // with global tags

@@ -55,7 +54,7 @@
                             + javaVendor);

             assertEquals("global tags are inevitable here.",

                     "home: !!org.yaml.snakeyaml.generics.Nest {height: 3}\nname: Eagle\n", output);

-            parsed = loader.load(output);

+            parsed = loader.loadAs(output, Bird.class);

         }

         assertEquals(bird.getName(), parsed.getName());

         assertEquals(bird.getHome().getHeight(), parsed.getHome().getHeight());

diff --git a/src/test/java/org/yaml/snakeyaml/generics/GenericArrayTypeTest.java b/src/test/java/org/yaml/snakeyaml/generics/GenericArrayTypeTest.java
index 2dcf141..f6fc380 100644
--- a/src/test/java/org/yaml/snakeyaml/generics/GenericArrayTypeTest.java
+++ b/src/test/java/org/yaml/snakeyaml/generics/GenericArrayTypeTest.java
@@ -21,7 +21,6 @@
 import junit.framework.TestCase;
 
 import org.yaml.snakeyaml.JavaBeanDumper;
-import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
 
@@ -114,9 +113,9 @@
         // System.out.println(doc);
         assertEquals(Util.getLocalResource("javabeans/genericArray-1.yaml"), doc);
         //
-        JavaBeanLoader<ArrayBean> beanLoader = new JavaBeanLoader<ArrayBean>(ArrayBean.class);
+        Yaml beanLoader = new Yaml();
         if (GenericsBugDetector.isProperIntrospection()) {
-            ArrayBean loaded = beanLoader.load(doc);
+            ArrayBean loaded = beanLoader.loadAs(doc, ArrayBean.class);
             assertEquals("ID556677", loaded.getId());
             assertEquals("Array3", loaded.getGa().getName());
             assertEquals(3, loaded.getGa().getHome().length);
diff --git a/src/test/java/org/yaml/snakeyaml/generics/ObjectValuesTest.java b/src/test/java/org/yaml/snakeyaml/generics/ObjectValuesTest.java
index f511c61..739df69 100644
--- a/src/test/java/org/yaml/snakeyaml/generics/ObjectValuesTest.java
+++ b/src/test/java/org/yaml/snakeyaml/generics/ObjectValuesTest.java
@@ -24,7 +24,7 @@
 import junit.framework.TestCase;
 
 import org.yaml.snakeyaml.JavaBeanDumper;
-import org.yaml.snakeyaml.JavaBeanLoader;
+import org.yaml.snakeyaml.Yaml;
 
 public class ObjectValuesTest extends TestCase {
 
@@ -48,9 +48,8 @@
 
         JavaBeanDumper dumper = new JavaBeanDumper();
         String dumpedStr = dumper.dump(ov);
-
-        JavaBeanLoader<ObjectValues> loader = new JavaBeanLoader<ObjectValues>(ObjectValues.class);
-        ObjectValues ov2 = loader.load(dumpedStr);
+        Yaml loader = new Yaml();
+        ObjectValues ov2 = loader.loadAs(dumpedStr, ObjectValues.class);
 
         assertEquals(ov.getObject(), ov2.getObject());
         assertEquals(ov.getValues(), ov2.getValues());
@@ -79,10 +78,9 @@
 
         JavaBeanDumper dumper = new JavaBeanDumper();
         String dumpedStr = dumper.dump(ov);
-
-        JavaBeanLoader<ObjectValuesWithParam<String, Integer>> loader = new JavaBeanLoader<ObjectValuesWithParam<String, Integer>>(
+        Yaml loader = new Yaml();
+        ObjectValuesWithParam<String, Integer> ov2 = loader.loadAs(dumpedStr,
                 new ObjectValuesWithParam<String, Integer>().getClass());
-        ObjectValuesWithParam<String, Integer> ov2 = loader.load(dumpedStr);
 
         assertEquals(ov.getObject(), ov2.getObject());
         assertEquals(ov.getValues(), ov2.getValues());
diff --git a/src/test/java/org/yaml/snakeyaml/immutable/ShapeImmutableTest.java b/src/test/java/org/yaml/snakeyaml/immutable/ShapeImmutableTest.java
index fd50504..65fdbb4 100644
--- a/src/test/java/org/yaml/snakeyaml/immutable/ShapeImmutableTest.java
+++ b/src/test/java/org/yaml/snakeyaml/immutable/ShapeImmutableTest.java
@@ -18,7 +18,6 @@
 
 import junit.framework.TestCase;
 
-import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
 
@@ -134,8 +133,8 @@
 
     public void testShapeNoTags() {
         String source = Util.getLocalResource("immutable/shapeNoTags.yaml");
-        JavaBeanLoader<Shape> beanLoader = new JavaBeanLoader<Shape>(Shape.class);
-        Shape loaded = beanLoader.load(source);
+        Yaml beanLoader = new Yaml();
+        Shape loaded = beanLoader.loadAs(source, Shape.class);
         assertEquals(new Integer(123), loaded.getId());
         assertEquals("BLACK", loaded.getColor().getName());
         assertEquals(1.17, loaded.getPoint().getX());
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue10/BasicDumpTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue10/BasicDumpTest.java
index d249113..28a7ac8 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue10/BasicDumpTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue10/BasicDumpTest.java
@@ -22,7 +22,6 @@
 import junit.framework.TestCase;
 
 import org.yaml.snakeyaml.JavaBeanDumper;
-import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
 
@@ -93,8 +92,8 @@
         String etalon = Util.getLocalResource("javabeans/issue10-3.yaml");
         assertEquals(etalon.trim(), output.trim());
         // load
-        JavaBeanLoader<DataSources> beanLoader = new JavaBeanLoader<DataSources>(DataSources.class);
-        DataSources bean = beanLoader.load(output);
+        Yaml beanLoader = new Yaml();
+        DataSources bean = beanLoader.loadAs(output, DataSources.class);
         Iterator<DataSource> iter = bean.getDataSources().iterator();
         assertTrue(iter.next() instanceof JDBCDataSource);
         assertFalse("Must be DataSource.", iter.next() instanceof JDBCDataSource);
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue112/ParameterisedTypeLoadingTestCase.java b/src/test/java/org/yaml/snakeyaml/issues/issue112/ParameterisedTypeLoadingTestCase.java
index e82a00e..cf63770 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue112/ParameterisedTypeLoadingTestCase.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue112/ParameterisedTypeLoadingTestCase.java
@@ -24,7 +24,6 @@
 
 import org.junit.Test;
 import org.yaml.snakeyaml.JavaBeanDumper;
-import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.constructor.Constructor;
@@ -34,9 +33,7 @@
     @Test
     public void testParameterisedTypeLoading() throws IOException {
         Yaml yamlParser = new Yaml(new Constructor(MyCompositeObject.class));
-
         MyCompositeObject obj = (MyCompositeObject) yamlParser.load(getInput());
-
         check(obj);
 
         // dump the object
@@ -47,11 +44,8 @@
 
     @Test
     public void testJavaBeanLoader() throws IOException {
-        JavaBeanLoader<MyCompositeObject> yamlParser = new JavaBeanLoader<MyCompositeObject>(
-                MyCompositeObject.class);
-
-        MyCompositeObject obj = yamlParser.load(getInput());
-
+        Yaml yamlParser = new Yaml();
+        MyCompositeObject obj = yamlParser.loadAs(getInput(), MyCompositeObject.class);
         check(obj);
     }
 
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue40/DogFoodBeanTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue40/DogFoodBeanTest.java
index 07df8bb..b08e8f4 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue40/DogFoodBeanTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue40/DogFoodBeanTest.java
@@ -21,7 +21,6 @@
 import junit.framework.TestCase;
 
 import org.yaml.snakeyaml.JavaBeanDumper;
-import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Yaml;
 
 public class DogFoodBeanTest extends TestCase {
@@ -56,8 +55,8 @@
         String text = dumper.dump(input);
         // System.out.println(text);
         assertEquals("decimal: 5.123\n", text);
-        JavaBeanLoader<DogFoodBean> loader = new JavaBeanLoader<DogFoodBean>(DogFoodBean.class);
-        DogFoodBean output = loader.load(text);
+        Yaml loader = new Yaml();
+        DogFoodBean output = loader.loadAs(text, DogFoodBean.class);
         assertEquals(input.getDecimal(), output.getDecimal());
     }
 
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue47/ReadOnlyPropertiesTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue47/ReadOnlyPropertiesTest.java
index 3266490..590c31d 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue47/ReadOnlyPropertiesTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue47/ReadOnlyPropertiesTest.java
@@ -20,7 +20,7 @@
 
 import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.JavaBeanDumper;
-import org.yaml.snakeyaml.JavaBeanLoader;
+import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.error.YAMLException;
 import org.yaml.snakeyaml.nodes.Tag;
 import org.yaml.snakeyaml.representer.Representer;
@@ -34,9 +34,8 @@
         // System.out.println(output);
         assertEquals("name: lunch\n", output);
         //
-        JavaBeanLoader<IncompleteBean> loader = new JavaBeanLoader<IncompleteBean>(
-                IncompleteBean.class);
-        IncompleteBean parsed = loader.load(output);
+        Yaml loader = new Yaml();
+        IncompleteBean parsed = loader.loadAs(output, IncompleteBean.class);
         assertEquals(bean.getName(), parsed.getName());
     }
 
@@ -51,10 +50,9 @@
         // System.out.println(output);
         assertEquals("{id: 10, name: lunch}\n", output);
         //
-        JavaBeanLoader<IncompleteBean> loader = new JavaBeanLoader<IncompleteBean>(
-                IncompleteBean.class);
+        Yaml loader = new Yaml();
         try {
-            loader.load(output);
+            loader.loadAs(output, IncompleteBean.class);
             fail("Setter is missing.");
         } catch (YAMLException e) {
             String message = e.getMessage();
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue49/CalendarTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue49/CalendarTest.java
index 36105e2..7218ff5 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue49/CalendarTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue49/CalendarTest.java
@@ -24,7 +24,6 @@
 import junit.framework.TestCase;
 
 import org.yaml.snakeyaml.JavaBeanDumper;
-import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Yaml;
 
 public class CalendarTest extends TestCase {
@@ -43,8 +42,8 @@
         // System.out.println(output);
         assertEquals("calendar: 2001-09-08T17:46:40-8:00\nname: lunch\n", output);
         //
-        JavaBeanLoader<CalendarBean> loader = new JavaBeanLoader<CalendarBean>(CalendarBean.class);
-        CalendarBean parsed = loader.load(output);
+        Yaml loader = new Yaml();
+        CalendarBean parsed = loader.loadAs(output, CalendarBean.class);
         assertEquals(bean.getCalendar(), parsed.getCalendar());
     }
 
@@ -93,17 +92,16 @@
         // System.out.println(output);
         assertEquals(warning, "calendar: " + etalon + "\nname: lunch\n", output);
         //
-        JavaBeanLoader<CalendarBean> loader = new JavaBeanLoader<CalendarBean>(CalendarBean.class);
-        CalendarBean parsed = loader.load(output);
+        Yaml loader = new Yaml();
+        CalendarBean parsed = loader.loadAs(output, CalendarBean.class);
         assertFalse("TimeZone must deviate.", bean.getCalendar().equals(parsed.getCalendar()));
         assertEquals(bean.getCalendar().getTimeInMillis(), parsed.getCalendar().getTimeInMillis());
     }
 
     public void testLoadBean() {
-        JavaBeanLoader<CalendarBean> beanLoader = new JavaBeanLoader<CalendarBean>(
-                CalendarBean.class);
-        CalendarBean bean = beanLoader
-                .load("calendar:  2001-12-14t21:59:43.10-05:00\nname: dinner");
+        Yaml beanLoader = new Yaml();
+        CalendarBean bean = beanLoader.loadAs(
+                "calendar:  2001-12-14t21:59:43.10-05:00\nname: dinner", CalendarBean.class);
         assertEquals("dinner", bean.getName());
         Calendar calendar = bean.getCalendar();
         assertEquals(TimeZone.getTimeZone("GMT-5:00").getOffset(calendar.getTime().getTime()),
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue55/FieldListTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue55/FieldListTest.java
index 8e3082f..3f32f17 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue55/FieldListTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue55/FieldListTest.java
@@ -21,24 +21,24 @@
 
 import junit.framework.TestCase;
 
-import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Util;
+import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.introspector.BeanAccess;
 
 public class FieldListTest extends TestCase {
 
     public void testYaml() {
-        JavaBeanLoader<BlogField> beanLoader = new JavaBeanLoader<BlogField>(BlogField.class,
-                BeanAccess.FIELD);
-        BlogField rehydrated = (BlogField) beanLoader.load(Util
-                .getLocalResource("issues/issue55_2.txt"));
+        Yaml beanLoader = new Yaml();
+        beanLoader.setBeanAccess(BeanAccess.FIELD);
+        BlogField rehydrated = beanLoader.loadAs(Util.getLocalResource("issues/issue55_2.txt"),
+                BlogField.class);
         assertEquals(4, rehydrated.getPosts().size());
     }
 
     public void testFailureWithoutFieldAccess() {
-        JavaBeanLoader<BlogField> beanLoader = new JavaBeanLoader<BlogField>(BlogField.class);
+        Yaml beanLoader = new Yaml();
         try {
-            beanLoader.load(Util.getLocalResource("issues/issue55_2.txt"));
+            beanLoader.loadAs(Util.getLocalResource("issues/issue55_2.txt"), BlogField.class);
             fail("Private field must not be available");
         } catch (Exception e) {
             assertTrue(e.getMessage().contains("Unable to find property 'posts'"));
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue55/JavaBeanListTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue55/JavaBeanListTest.java
index 4d4cc65..9aa872d 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue55/JavaBeanListTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue55/JavaBeanListTest.java
@@ -21,24 +21,24 @@
 
 import junit.framework.TestCase;
 
-import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Util;
+import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.introspector.BeanAccess;
 
 public class JavaBeanListTest extends TestCase {
 
     public void testYaml() {
-        JavaBeanLoader<BlogBean> beanLoader = new JavaBeanLoader<BlogBean>(BlogBean.class,
-                BeanAccess.FIELD);
-        BlogBean rehydrated = (BlogBean) beanLoader.load(Util
-                .getLocalResource("issues/issue55_2.txt"));
+        Yaml beanLoader = new Yaml();
+        beanLoader.setBeanAccess(BeanAccess.FIELD);
+        BlogBean rehydrated = (BlogBean) beanLoader.loadAs(
+                Util.getLocalResource("issues/issue55_2.txt"), BlogBean.class);
         assertEquals(4, rehydrated.getPosts().size());
     }
 
     public void testFailureWithoutFieldAccess() {
-        JavaBeanLoader<BlogBean> beanLoader = new JavaBeanLoader<BlogBean>(BlogBean.class);
+        Yaml beanLoader = new Yaml();
         try {
-            beanLoader.load(Util.getLocalResource("issues/issue55_2.txt"));
+            beanLoader.loadAs(Util.getLocalResource("issues/issue55_2.txt"), BlogBean.class);
             fail("Private field must not be available");
         } catch (Exception e) {
             assertTrue(e.getMessage().contains("Unable to find property 'posts'"));
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java
index 355b99a..89be26f 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue55/YamlFieldAccessCollectionTest.java
@@ -23,7 +23,6 @@
 
 import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.DumperOptions.FlowStyle;
-import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.introspector.BeanAccess;
@@ -38,8 +37,9 @@
         String serialized = yamlDumper.dump(original);
         // System.out.println(serialized);
         assertEquals(Util.getLocalResource("issues/issue55_1.txt"), serialized);
-        JavaBeanLoader<Blog> blogLoader = new JavaBeanLoader<Blog>(Blog.class, BeanAccess.FIELD);
-        Blog rehydrated = (Blog) blogLoader.load(serialized);
+        Yaml blogLoader = new Yaml();
+        blogLoader.setBeanAccess(BeanAccess.FIELD);
+        Blog rehydrated = blogLoader.loadAs(serialized, Blog.class);
         checkTestBlog(rehydrated);
     }
 
@@ -52,9 +52,9 @@
     }
 
     public void testYamlFailure() {
-        JavaBeanLoader<Blog> beanLoader = new JavaBeanLoader<Blog>(Blog.class);
+        Yaml beanLoader = new Yaml();
         try {
-            beanLoader.load(Util.getLocalResource("issues/issue55_1.txt"));
+            beanLoader.loadAs(Util.getLocalResource("issues/issue55_1.txt"), Blog.class);
             fail("BeanAccess.FIELD is required.");
         } catch (Exception e) {
             assertTrue(e.getMessage(), e.getMessage().contains("Unable to find property 'posts'"));
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericListBeanTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericListBeanTest.java
index a923fff..9fad7b8 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericListBeanTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericListBeanTest.java
@@ -22,11 +22,11 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

 

 public class GenericListBeanTest extends TestCase {

-    @SuppressWarnings({ "unchecked", "rawtypes" })

+    @SuppressWarnings("unchecked")

     public void testGenericList() throws Exception {

         JavaBeanDumper beanDumper = new JavaBeanDumper();

         ListProvider<String> listProvider = new ListProvider<String>();

@@ -36,8 +36,8 @@
         // System.out.println(s);

         assertEquals("list:\n- foo\n- bar\n", s);

         // parse

-        JavaBeanLoader<ListProvider> loader = new JavaBeanLoader<ListProvider>(ListProvider.class);

-        ListProvider<String> listProvider2 = loader.load(s);

+        Yaml loader = new Yaml();

+        ListProvider<String> listProvider2 = loader.loadAs(s, ListProvider.class);

         assertEquals("foo", listProvider2.getList().get(0));

         assertEquals("bar", listProvider2.getList().get(1));

         assertEquals(listProvider, listProvider2);

@@ -59,8 +59,8 @@
         String etalon = Util.getLocalResource("issues/issue61-1.yaml");

         assertEquals(etalon, s);

         // parse

-        JavaBeanLoader<ListProvider> loader = new JavaBeanLoader<ListProvider>(ListProvider.class);

-        ListProvider listProvider2 = loader.load(s);

+        Yaml loader = new Yaml();

+        ListProvider listProvider2 = loader.loadAs(s, ListProvider.class);

         Bean foo2 = (Bean) listProvider2.getList().get(0);

         assertEquals("foo", foo2.getName());

         assertEquals(0, foo2.getNumber());

diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericMapBeanTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericMapBeanTest.java
index 40a1008..60c2d37 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericMapBeanTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue61/GenericMapBeanTest.java
@@ -22,11 +22,11 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

 

 public class GenericMapBeanTest extends TestCase {

-    @SuppressWarnings({ "unchecked", "rawtypes" })

+    @SuppressWarnings("unchecked")

     public void testGenericMap() throws Exception {

         JavaBeanDumper beanDumper = new JavaBeanDumper();

         MapProvider<String, Integer> listProvider = new MapProvider<String, Integer>();

@@ -36,8 +36,8 @@
         // System.out.println(s);

         assertEquals("map:\n  foo: 17\n  bar: 19\n", s);

         // parse

-        JavaBeanLoader<MapProvider> loader = new JavaBeanLoader<MapProvider>(MapProvider.class);

-        MapProvider<String, Integer> listProvider2 = loader.load(s);

+        Yaml loader = new Yaml();

+        MapProvider<String, Integer> listProvider2 = loader.loadAs(s, MapProvider.class);

         assertEquals(new Integer(17), listProvider2.getMap().get("foo"));

         assertEquals(new Integer(19), listProvider2.getMap().get("bar"));

         assertEquals(listProvider, listProvider2);

@@ -59,8 +59,8 @@
         String etalon = Util.getLocalResource("issues/issue61-2.yaml");

         assertEquals(etalon, s);

         // parse

-        JavaBeanLoader<MapProvider> loader = new JavaBeanLoader<MapProvider>(MapProvider.class);

-        MapProvider listProvider2 = loader.load(s);

+        Yaml loader = new Yaml();

+        MapProvider listProvider2 = loader.loadAs(s, MapProvider.class);

         Bean foo2 = (Bean) listProvider2.getMap().get("foo");

         assertEquals("foo", foo2.getName());

         assertEquals(0, foo2.getNumber());

diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue72/CollectionTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue72/CollectionTest.java
index b23438e..3a067a6 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue72/CollectionTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue72/CollectionTest.java
@@ -23,7 +23,7 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

+import org.yaml.snakeyaml.Yaml;

 

 public class CollectionTest extends TestCase {

 

@@ -32,9 +32,8 @@
         JavaBeanDumper dumper = new JavaBeanDumper();

         String doc = dumper.dump(bean);

         // System.out.println(doc);

-        JavaBeanLoader<CollectionList> beanLoader = new JavaBeanLoader<CollectionList>(

-                CollectionList.class);

-        CollectionList parsed = beanLoader.load(doc);

+        Yaml beanLoader = new Yaml();

+        CollectionList parsed = beanLoader.loadAs(doc, CollectionList.class);

         assertTrue(parsed.getNames().contains("aaa"));

         assertTrue(parsed.getNames().contains("bbb"));

         assertEquals(2, parsed.getNames().size());

@@ -63,9 +62,8 @@
         JavaBeanDumper dumper = new JavaBeanDumper();

         String doc = dumper.dump(bean);

         // System.out.println(doc);

-        JavaBeanLoader<CollectionSet> beanLoader = new JavaBeanLoader<CollectionSet>(

-                CollectionSet.class);

-        CollectionSet parsed = beanLoader.load(doc);

+        Yaml beanLoader = new Yaml();

+        CollectionSet parsed = beanLoader.loadAs(doc, CollectionSet.class);

         assertTrue(parsed.getRoles().contains(11));

         assertTrue(parsed.getRoles().contains(13));

         assertEquals(2, parsed.getRoles().size());

@@ -88,5 +86,4 @@
             this.roles = roles;

         }

     }

-

 }

diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java
index e04d1a9..0edd7be 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue73/SetAsSequenceTest.java
@@ -24,7 +24,6 @@
 import junit.framework.TestCase;
 
 import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.Util;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.introspector.BeanAccess;
@@ -67,8 +66,9 @@
     public void testYaml() {
         String serialized = Util.getLocalResource("issues/issue73-2.txt");
         // System.out.println(serialized);
-        JavaBeanLoader<Blog> beanLoader = new JavaBeanLoader<Blog>(Blog.class, BeanAccess.FIELD);
-        Blog rehydrated = beanLoader.load(serialized);
+        Yaml beanLoader = new Yaml();
+        beanLoader.setBeanAccess(BeanAccess.FIELD);
+        Blog rehydrated = beanLoader.loadAs(serialized, Blog.class);
         checkTestBlog(rehydrated);
     }
 
diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue74/ArrayBeanTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue74/ArrayBeanTest.java
index 38aa491..2028aed 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue74/ArrayBeanTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue74/ArrayBeanTest.java
@@ -22,8 +22,8 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

 

 public class ArrayBeanTest extends TestCase {

 

@@ -46,8 +46,8 @@
         String output = beanDumper.dump(bean);

         // System.out.println(output);

         assertEquals(Util.getLocalResource("issues/issue74-array1.txt"), output);

-        JavaBeanLoader<ArrayBean> beanLoader = new JavaBeanLoader<ArrayBean>(ArrayBean.class);

-        ArrayBean parsed = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        ArrayBean parsed = beanLoader.loadAs(output, ArrayBean.class);

         // System.out.println(parsed);

         assertEquals(3, parsed.getMembers().length);

         assertEquals(2, parsed.openMembers.length);

diff --git a/src/test/java/org/yaml/snakeyaml/issues/issue82/PropOrderInfluenceWhenAliasedInGenericCollectionTest.java b/src/test/java/org/yaml/snakeyaml/issues/issue82/PropOrderInfluenceWhenAliasedInGenericCollectionTest.java
index baf4e11..37f9782 100644
--- a/src/test/java/org/yaml/snakeyaml/issues/issue82/PropOrderInfluenceWhenAliasedInGenericCollectionTest.java
+++ b/src/test/java/org/yaml/snakeyaml/issues/issue82/PropOrderInfluenceWhenAliasedInGenericCollectionTest.java
@@ -26,7 +26,6 @@
 import junit.framework.TestCase;
 
 import org.yaml.snakeyaml.JavaBeanDumper;
-import org.yaml.snakeyaml.JavaBeanLoader;
 import org.yaml.snakeyaml.TypeDescription;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.constructor.Constructor;
@@ -243,8 +242,8 @@
         JavaBeanDumper dumper = new JavaBeanDumper();
         String dump2 = dumper.dump(customerAB);
         // System.out.println(dump2);
-        JavaBeanLoader<CustomerAB> loader = new JavaBeanLoader<CustomerAB>(CustomerAB.class);
-        CustomerAB parsed = loader.load(dump2);
+        Yaml loader = new Yaml();
+        CustomerAB parsed = loader.loadAs(dump2, CustomerAB.class);
         assertNotNull(parsed);
     }
 
diff --git a/src/test/java/org/yaml/snakeyaml/javabeans/ConstructEmptyBeanTest.java b/src/test/java/org/yaml/snakeyaml/javabeans/ConstructEmptyBeanTest.java
index 1d62bf2..606e260 100644
--- a/src/test/java/org/yaml/snakeyaml/javabeans/ConstructEmptyBeanTest.java
+++ b/src/test/java/org/yaml/snakeyaml/javabeans/ConstructEmptyBeanTest.java
@@ -21,7 +21,6 @@
 

 import junit.framework.TestCase;

 

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Yaml;

 

 public class ConstructEmptyBeanTest extends TestCase {

@@ -41,9 +40,10 @@
      * global tag is correct (but ignored)

      */

     public void testEmptyBean1() throws IOException {

-        JavaBeanLoader<EmptyBean> beanLoader = new JavaBeanLoader<EmptyBean>(EmptyBean.class);

-        EmptyBean bean = beanLoader

-                .load("!!org.yaml.snakeyaml.javabeans.ConstructEmptyBeanTest$EmptyBean {}");

+        Yaml beanLoader = new Yaml();

+        EmptyBean bean = beanLoader.loadAs(

+                "!!org.yaml.snakeyaml.javabeans.ConstructEmptyBeanTest$EmptyBean {}",

+                EmptyBean.class);

         assertNotNull(bean);

         assertNull(bean.getFirstName());

         assertEquals(5, bean.getHatSize());

@@ -53,8 +53,8 @@
      * global tag is ignored

      */

     public void testEmptyBean2() throws IOException {

-        JavaBeanLoader<EmptyBean> beanLoader = new JavaBeanLoader<EmptyBean>(EmptyBean.class);

-        EmptyBean bean = beanLoader.load("!!Bla-bla-bla {}");

+        Yaml beanLoader = new Yaml();

+        EmptyBean bean = beanLoader.loadAs("!!Bla-bla-bla {}", EmptyBean.class);

         assertNotNull(bean);

         assertNull(bean.getFirstName());

         assertEquals(5, bean.getHatSize());

@@ -64,8 +64,8 @@
      * no tag

      */

     public void testEmptyBean3() throws IOException {

-        JavaBeanLoader<EmptyBean> beanLoader = new JavaBeanLoader<EmptyBean>(EmptyBean.class);

-        EmptyBean bean = beanLoader.load("{   }");

+        Yaml beanLoader = new Yaml();

+        EmptyBean bean = beanLoader.loadAs("{   }", EmptyBean.class);

         assertNotNull(bean);

         assertNull(bean.getFirstName());

         assertEquals(5, bean.getHatSize());

@@ -75,8 +75,8 @@
      * empty document

      */

     public void testEmptyBean4() throws IOException {

-        JavaBeanLoader<EmptyBean> beanLoader = new JavaBeanLoader<EmptyBean>(EmptyBean.class);

-        EmptyBean bean = beanLoader.load("");

+        Yaml beanLoader = new Yaml();

+        EmptyBean bean = beanLoader.loadAs("", EmptyBean.class);

         assertNull(bean);

     }

 

@@ -84,8 +84,8 @@
      * local tag is ignored

      */

     public void testEmptyBean5() throws IOException {

-        JavaBeanLoader<EmptyBean> beanLoader = new JavaBeanLoader<EmptyBean>(EmptyBean.class);

-        EmptyBean bean = beanLoader.load("!Bla-bla-bla {}");

+        Yaml beanLoader = new Yaml();

+        EmptyBean bean = beanLoader.loadAs("!Bla-bla-bla {}", EmptyBean.class);

         assertNotNull(bean);

         assertNull(bean.getFirstName());

         assertEquals(5, bean.getHatSize());

@@ -95,9 +95,9 @@
      * invalid document

      */

     public void testEmptyBean6() throws IOException {

-        JavaBeanLoader<EmptyBean> beanLoader = new JavaBeanLoader<EmptyBean>(EmptyBean.class);

+        Yaml beanLoader = new Yaml();

         try {

-            beanLoader.load("{");

+            beanLoader.loadAs("{", EmptyBean.class);

             fail("Invalid document provided.");

         } catch (Exception e) {

             assertEquals(

diff --git a/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java b/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java
index 9012b7d..0cae5c6 100644
--- a/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java
+++ b/src/test/java/org/yaml/snakeyaml/javabeans/HouseTest.java
@@ -24,9 +24,10 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.TypeDescription;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

+import org.yaml.snakeyaml.constructor.Constructor;

 

 public class HouseTest extends TestCase {

     /**

@@ -56,8 +57,8 @@
         String output2 = beanDumper.dump(house);

         assertEquals(etalon, output2);

         // load

-        JavaBeanLoader<House> beanLoader = new JavaBeanLoader<House>(House.class);

-        House loadedHouse = beanLoader.load(yaml);

+        Yaml beanLoader = new Yaml();

+        House loadedHouse = beanLoader.loadAs(yaml, House.class);

         assertNotNull(loadedHouse);

         assertEquals("Wall Street", loadedHouse.getStreet());

         // dump again

@@ -91,11 +92,14 @@
         // load

         TypeDescription description = new TypeDescription(House.class);

         description.putListPropertyType("rooms", Room.class);

-        JavaBeanLoader<House> beanLoader = new JavaBeanLoader<House>(description);

-        House loadedHouse = beanLoader.load(yaml);

+        Yaml beanLoader = new Yaml(new Constructor(description));

+        House loadedHouse = (House) beanLoader.load(yaml);

+        House loadedHouse2 = (House) beanLoader.loadAs(yaml, House.class);

         assertNotNull(loadedHouse);

+        assertFalse(loadedHouse == loadedHouse2);

         assertEquals("Wall Street", loadedHouse.getStreet());

         assertEquals(1, loadedHouse.getNumber());

+        assertEquals(1, loadedHouse2.getNumber());

         FrontDoor fdoor = loadedHouse.getFrontDoor();

         assertEquals(frontDoor.getId(), fdoor.getId());

         assertEquals(frontDoor.getHeight(), fdoor.getHeight());

@@ -132,8 +136,8 @@
         String etalon = Util.getLocalResource("javabeans/house-dump2.yaml");

         assertEquals(etalon, yaml);

         // load

-        JavaBeanLoader<House> beanLoader = new JavaBeanLoader<House>(House.class);

-        House loadedHouse = beanLoader.load(yaml);

+        Yaml beanLoader = new Yaml();

+        House loadedHouse = beanLoader.loadAs(yaml, House.class);

         assertNotNull(loadedHouse);

         assertEquals("Wall Street", loadedHouse.getStreet());

         // dump again

diff --git a/src/test/java/org/yaml/snakeyaml/javabeans/TriangleBeanTest.java b/src/test/java/org/yaml/snakeyaml/javabeans/TriangleBeanTest.java
index 3ffa34d..674e6d5 100644
--- a/src/test/java/org/yaml/snakeyaml/javabeans/TriangleBeanTest.java
+++ b/src/test/java/org/yaml/snakeyaml/javabeans/TriangleBeanTest.java
@@ -19,7 +19,7 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

+import org.yaml.snakeyaml.Yaml;

 

 public class TriangleBeanTest extends TestCase {

 

@@ -34,9 +34,8 @@
         assertEquals(

                 "name: Bean25\nshape: !!org.yaml.snakeyaml.javabeans.Triangle\n  name: Triangle25\n",

                 output);

-        JavaBeanLoader<TriangleBean> beanLoader = new JavaBeanLoader<TriangleBean>(

-                TriangleBean.class);

-        TriangleBean loadedBean = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        TriangleBean loadedBean = beanLoader.loadAs(output, TriangleBean.class);

         assertNotNull(loadedBean);

         assertEquals("Bean25", loadedBean.getName());

         assertEquals(7, loadedBean.getShape().process());

@@ -44,10 +43,9 @@
 

     public void testClassNotFound() {

         String output = "name: Bean25\nshape: !!org.yaml.snakeyaml.javabeans.Triangle777\n  name: Triangle25\n";

-        JavaBeanLoader<TriangleBean> beanLoader = new JavaBeanLoader<TriangleBean>(

-                TriangleBean.class);

+        Yaml beanLoader = new Yaml();

         try {

-            beanLoader.load(output);

+            beanLoader.loadAs(output, TriangleBean.class);

             fail("Class not found expected.");

         } catch (Exception e) {

             assertEquals(

@@ -61,10 +59,9 @@
      */

     public void testClassAndTag() {

         String output = "name: !!whatever Bean25\nshape: !!org.yaml.snakeyaml.javabeans.Triangle\n  name: Triangle25\n";

-        JavaBeanLoader<TriangleBean> beanLoader = new JavaBeanLoader<TriangleBean>(

-                TriangleBean.class);

+        Yaml beanLoader = new Yaml();

         try {

-            beanLoader.load(output);

+            beanLoader.loadAs(output, TriangleBean.class);

             fail("Runtime class has less priority then an explicit tag");

         } catch (Exception e) {

             assertEquals(

diff --git a/src/test/java/org/yaml/snakeyaml/recursive/HumanTest.java b/src/test/java/org/yaml/snakeyaml/recursive/HumanTest.java
index bf00892..e27ad7d 100644
--- a/src/test/java/org/yaml/snakeyaml/recursive/HumanTest.java
+++ b/src/test/java/org/yaml/snakeyaml/recursive/HumanTest.java
@@ -32,7 +32,6 @@
 import org.yaml.snakeyaml.DumperOptions;

 import org.yaml.snakeyaml.DumperOptions.FlowStyle;

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.TypeDescription;

 import org.yaml.snakeyaml.Util;

 import org.yaml.snakeyaml.Yaml;

@@ -139,9 +138,9 @@
         assertEquals(etalon, output);

         TypeDescription humanDescription = new TypeDescription(Human.class);

         humanDescription.putMapPropertyType("children", Human.class, Object.class);

-        JavaBeanLoader<Human> beanLoader = new JavaBeanLoader<Human>(humanDescription);

+        Yaml beanLoader = new Yaml(new Constructor(humanDescription));

         //

-        Human son2 = beanLoader.load(output);

+        Human son2 = beanLoader.loadAs(output, Human.class);

         assertNotNull(son2);

         assertEquals("Son", son.getName());

 

@@ -212,9 +211,9 @@
         assertEquals(etalon, output);

         TypeDescription humanDescription = new TypeDescription(Human.class);

         humanDescription.putMapPropertyType("children", Human.class, Object.class);

-        JavaBeanLoader<Human> beanLoader = new JavaBeanLoader<Human>(humanDescription);

+        Yaml beanLoader = new Yaml(new Constructor(humanDescription));

         //

-        Human son2 = beanLoader.load(output);

+        Human son2 = beanLoader.loadAs(output, Human.class);

         assertNotNull(son2);

         assertEquals("Son", son.getName());

 

@@ -634,9 +633,9 @@
         assertEquals(etalon, output);

         TypeDescription humanDescription = new TypeDescription(Human.class);

         humanDescription.putMapPropertyType("children", Human.class, Object.class);

-        JavaBeanLoader<Human> beanLoader = new JavaBeanLoader<Human>(humanDescription);

+        Yaml beanLoader = new Yaml(new Constructor(humanDescription));

         //

-        Human son2 = beanLoader.load(output);

+        Human son2 = beanLoader.loadAs(output, Human.class);

         assertNotNull(son2);

         assertEquals("Son", son.getName());

 

@@ -659,5 +658,4 @@
         // check if hashCode is correct

         validateSet(children2);

     }

-

 }

diff --git a/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java b/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
index 929a2e8..e8ba439 100644
--- a/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
+++ b/src/test/java/org/yaml/snakeyaml/recursive/generics/HumanGenericsTest.java
@@ -31,7 +31,6 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.DumperOptions;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.TypeDescription;

 import org.yaml.snakeyaml.Util;

 import org.yaml.snakeyaml.Yaml;

@@ -99,8 +98,8 @@
         String etalon = Util.getLocalResource("recursive/generics/no-children-2.yaml");

         assertEquals(etalon, output);

         //

-        JavaBeanLoader<HumanGen> loader = new JavaBeanLoader<HumanGen>(HumanGen.class);

-        HumanGen father2 = (HumanGen) loader.load(etalon);

+        Yaml loader = new Yaml();

+        HumanGen father2 = (HumanGen) loader.loadAs(etalon, HumanGen.class);

         assertNotNull(father2);

         assertEquals("Father", father2.getName());

         assertEquals("Mother", father2.getPartner().getName());

@@ -231,9 +230,9 @@
         // load

         TypeDescription humanDescription = new TypeDescription(HumanGen2.class);

         humanDescription.putMapPropertyType("children", HumanGen2.class, String.class);

-        JavaBeanLoader<HumanGen2> beanLoader = new JavaBeanLoader<HumanGen2>(humanDescription);

+        Yaml beanLoader = new Yaml(new Constructor(humanDescription));

         //

-        HumanGen2 son2 = beanLoader.load(output);

+        HumanGen2 son2 = beanLoader.loadAs(output, HumanGen2.class);

         assertNotNull(son2);

         assertEquals("Son", son.getName());

 

diff --git a/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java b/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java
index 94c4d61..c43e3dd 100644
--- a/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java
+++ b/src/test/java/org/yaml/snakeyaml/ruby/RubyTest.java
@@ -19,7 +19,6 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.DumperOptions;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.TypeDescription;

 import org.yaml.snakeyaml.Util;

 import org.yaml.snakeyaml.Yaml;

@@ -48,8 +47,8 @@
         assertFalse("No tags expected.", output.contains("Sub1"));

         // System.out.println(output);

         // parse back. Without tags it shall still work

-        JavaBeanLoader<TestObject> beanLoader = new JavaBeanLoader<TestObject>(TestObject.class);

-        TestObject result2 = beanLoader.load(output);

+        Yaml beanLoader = new Yaml();

+        TestObject result2 = beanLoader.loadAs(output, TestObject.class);

         assertEquals(0, result2.getSub1().getAtt2());

         assertEquals("MyString", result2.getSub2().getAtt1());

         assertEquals(1, result2.getSub2().getAtt2().size());

diff --git a/src/test/java/org/yaml/snakeyaml/stress/ParallelTest.java b/src/test/java/org/yaml/snakeyaml/stress/ParallelTest.java
index 4a27b01..0d6020a 100644
--- a/src/test/java/org/yaml/snakeyaml/stress/ParallelTest.java
+++ b/src/test/java/org/yaml/snakeyaml/stress/ParallelTest.java
@@ -21,8 +21,8 @@
 import junit.framework.TestCase;

 

 import org.yaml.snakeyaml.Invoice;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

 

 /**

  * Test that Yaml instances are independent and can be used in multiple threads.

@@ -58,11 +58,11 @@
 

         public void run() {

             System.out.println("Started: " + id);

-            JavaBeanLoader<Invoice> loader = new JavaBeanLoader<Invoice>(Invoice.class);

+            Yaml loader = new Yaml();

             long time1 = System.nanoTime();

             int cycles = 200;

             for (int i = 0; i < cycles; i++) {

-                Invoice invoice = loader.load(doc);

+                Invoice invoice = loader.loadAs(doc, Invoice.class);

                 assertNotNull(invoice);

             }

             long time2 = System.nanoTime();

diff --git a/src/test/java/org/yaml/snakeyaml/stress/StressEmitterTest.java b/src/test/java/org/yaml/snakeyaml/stress/StressEmitterTest.java
index 53e075e..aec885d 100644
--- a/src/test/java/org/yaml/snakeyaml/stress/StressEmitterTest.java
+++ b/src/test/java/org/yaml/snakeyaml/stress/StressEmitterTest.java
@@ -24,8 +24,8 @@
 

 import org.yaml.snakeyaml.Invoice;

 import org.yaml.snakeyaml.JavaBeanDumper;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

+import org.yaml.snakeyaml.Yaml;

 

 public class StressEmitterTest extends TestCase {

 

@@ -38,8 +38,9 @@
     }

 

     public void testPerformance() throws IOException {

-        JavaBeanLoader<Invoice> loader = new JavaBeanLoader<Invoice>(Invoice.class);

-        Invoice invoice = loader.load(Util.getLocalResource("specification/example2_27.yaml"));

+        Yaml loader = new Yaml();

+        Invoice invoice = loader.loadAs(Util.getLocalResource("specification/example2_27.yaml"),

+                Invoice.class);

         JavaBeanDumper dumper = new JavaBeanDumper();

         long time1 = System.nanoTime();

         dumper.dump(invoice);

diff --git a/src/test/java/org/yaml/snakeyaml/stress/StressTest.java b/src/test/java/org/yaml/snakeyaml/stress/StressTest.java
index 7ffed96..701f1b1 100644
--- a/src/test/java/org/yaml/snakeyaml/stress/StressTest.java
+++ b/src/test/java/org/yaml/snakeyaml/stress/StressTest.java
@@ -23,7 +23,6 @@
 import junit.framework.TestSuite;

 

 import org.yaml.snakeyaml.Invoice;

-import org.yaml.snakeyaml.JavaBeanLoader;

 import org.yaml.snakeyaml.Util;

 import org.yaml.snakeyaml.Yaml;

 import org.yaml.snakeyaml.constructor.Constructor;

@@ -50,20 +49,20 @@
         float duration = (time2 - time1) / 1000000;

         System.out.println("Init was " + duration + " ms.");

 

-        JavaBeanLoader<Invoice> loader = new JavaBeanLoader<Invoice>(Invoice.class);

+        Yaml loader = new Yaml();

         time1 = System.nanoTime();

-        loader.load(doc);

+        loader.loadAs(doc, Invoice.class);

         time2 = System.nanoTime();

         duration = (time2 - time1) / 1000000;

         System.out.println("\nSingle load was " + duration + " ms.");

 

-        loader = new JavaBeanLoader<Invoice>(Invoice.class);

+        loader = new Yaml();

         int[] range = new int[] { 1000, 2000 /* , 4000, 8000 */};

         System.out.println("\nOne instance.");

         for (int number : range) {

             time1 = System.nanoTime();

             for (int i = 0; i < number; i++) {

-                loader.load(doc);

+                loader.loadAs(doc, Invoice.class);

             }

             time2 = System.nanoTime();

             duration = ((time2 - time1) / 1000000) / (float) number;

@@ -79,8 +78,8 @@
         for (int number : range) {

             time1 = System.nanoTime();

             for (int i = 0; i < number; i++) {

-                loader = new JavaBeanLoader<Invoice>(Invoice.class);

-                loader.load(doc);

+                loader = new Yaml();

+                loader.loadAs(doc, Invoice.class);

             }

             time2 = System.nanoTime();

             duration = ((time2 - time1) / 1000000) / (float) number;