http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/html/CommonTest.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/test/java/org/apache/juneau/html/CommonTest.java 
b/juneau-core/src/test/java/org/apache/juneau/html/CommonTest.java
index 1549dce..e5f316d 100755
--- a/juneau-core/src/test/java/org/apache/juneau/html/CommonTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/html/CommonTest.java
@@ -42,13 +42,13 @@ public class CommonTest {
 
                s.setProperty(SERIALIZER_trimNullProperties, false);
                String r = s.serialize(t1);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>s1</string></td><td><null/></td></tr><tr><td><string>s2</string></td><td><string>s2</string></td></tr></table>",
 r);
+               
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>s1</td><td><null/></td></tr><tr><td>s2</td><td>s2</td></tr></table>",
 r);
                t2 = p.parse(r, A.class);
                assertEqualObjects(t1, t2);
 
                s.setProperty(SERIALIZER_trimNullProperties, true);
                r = s.serialize(t1);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>s2</string></td><td><string>s2</string></td></tr></table>",
 r);
+               
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>s2</td><td>s2</td></tr></table>",
 r);
                t2 = p.parse(r, A.class);
                assertEqualObjects(t1, t2);
        }
@@ -75,13 +75,13 @@ public class CommonTest {
 
                s.setProperty(SERIALIZER_trimEmptyMaps, false);
                r = s.serialize(t1);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><table
 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr></table></td></tr><tr><td><string>f2</string></td><td><table
 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f2a</string></td><td><null/></td></tr><tr><td><string>f2b</string></td><td><table
 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>s2</string></td><td><string>s2</string></td></tr></table></td></tr></table></td></tr></table>",
 r);
+               
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td><table><tr><th>key</th><th>value</th></tr></table></td></tr><tr><td>f2</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>f2a</td><td><null/></td></tr><tr><td>f2b</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>s2</td><td>s2</td></tr></table></td></tr></table></td></tr></table>",
 r);
                t2 = p.parse(r, B.class);
                assertEqualObjects(t1, t2);
 
                s.setProperty(SERIALIZER_trimEmptyMaps, true);
                r = s.serialize(t1);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f2</string></td><td><table
 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f2a</string></td><td><null/></td></tr><tr><td><string>f2b</string></td><td><table
 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>s2</string></td><td><string>s2</string></td></tr></table></td></tr></table></td></tr></table>",
 r);
+               
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f2</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>f2a</td><td><null/></td></tr><tr><td>f2b</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>s2</td><td>s2</td></tr></table></td></tr></table></td></tr></table>",
 r);
                t2 = p.parse(r, B.class);
                assertNull(t2.f1);
        }
@@ -109,13 +109,13 @@ public class CommonTest {
 
                s.setProperty(SERIALIZER_trimEmptyCollections, false);
                r = s.serialize(t1);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><ul></ul></td></tr><tr><td><string>f2</string></td><td><table
 
_type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td><string>s2</string></td></tr></table></td></tr></table>",
 r);
+               
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td><ul></ul></td></tr><tr><td>f2</td><td><table
 
_type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td>s2</td></tr></table></td></tr></table>",
 r);
                t2 = p.parse(r, C.class);
                assertEqualObjects(t1, t2);
 
                s.setProperty(SERIALIZER_trimEmptyCollections, true);
                r = s.serialize(t1);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f2</string></td><td><table
 
_type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td><string>s2</string></td></tr></table></td></tr></table>",
 r);
+               
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f2</td><td><table
 
_type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td>s2</td></tr></table></td></tr></table>",
 r);
                t2 = p.parse(r, C.class);
                assertNull(t2.f1);
        }
@@ -143,13 +143,45 @@ public class CommonTest {
 
                s.setProperty(SERIALIZER_trimEmptyCollections, false);
                r = s.serialize(t1);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><ul></ul></td></tr><tr><td><string>f2</string></td><td><table
 
_type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td><string>s2</string></td></tr></table></td></tr></table>",
 r);
+               assertEquals(
+                       "<table>"
+                               +"<tr><th>key</th><th>value</th></tr>"
+                               +"<tr>"
+                                       +"<td>f1</td>"
+                                       +"<td><ul></ul></td>"
+                               +"</tr>"
+                               +"<tr>"
+                                       +"<td>f2</td>"
+                                       +"<td>"
+                                               +"<table _type='array'>"
+                                                       +"<tr><th>s2</th></tr>"
+                                                       +"<tr><null/></tr>"
+                                                       +"<tr><td>s2</td></tr>"
+                                               +"</table>"
+                                       +"</td>"
+                               +"</tr>"
+                       +"</table>",
+                       r);
                t2 = p.parse(r, D.class);
                assertEqualObjects(t1, t2);
 
                s.setProperty(SERIALIZER_trimEmptyCollections, true);
                r = s.serialize(t1);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f2</string></td><td><table
 
_type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td><string>s2</string></td></tr></table></td></tr></table>",
 r);
+               assertEquals(
+                       "<table>"
+                               +"<tr><th>key</th><th>value</th></tr>"
+                               +"<tr>"
+                                       +"<td>f2</td>"
+                                       +"<td>"
+                                               +"<table _type='array'>"
+                                                       +"<tr><th>s2</th></tr>"
+                                                       +"<tr><null/></tr>"
+                                                       +"<tr><td>s2</td></tr>"
+                                               +"</table>"
+                                       +"</td>"
+                               +"</tr>"
+                       +"</table>",
+                       r);
                t2 = p.parse(r, D.class);
                assertNull(t2.f1);
        }
@@ -175,7 +207,68 @@ public class CommonTest {
                String r;
 
                r = s.serialize(t);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>x1</string></td><td><table
 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><number>1</number></td></tr></table></td></tr><tr><td><string>x2</string></td><td><table
 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><number>1</number></td></tr></table></td></tr><tr><td><string>x3</string></td><td><table
 
_type='array'><tr><th>f1</th></tr><tr><td><number>1</number></td></tr></table></td></tr><tr><td><string>x4</string></td><td><table
 
_type='array'><tr><th>f1</th></tr><tr><td><number>1</number></td></tr></table></td></tr><tr><td><string>x5</string></td><td><table
 
_type='array'><tr><th>f1</th></tr><tr><td><number>1</number></td></tr></table></td></tr><tr><td><string>x6</string></td><td><table
 _type='array'><tr><th>f1</th></tr><t
 r><td><number>1</number></td></tr></table></td></tr></table>", r);
+               assertEquals(
+                       "<table>"
+                               +"<tr>"
+                                       +"<th>key</th>"
+                                       +"<th>value</th>"
+                               +"</tr>"
+                               +"<tr>"
+                                       +"<td>x1</td>"
+                                       +"<td>"
+                                               +"<table>"
+                                                       
+"<tr><th>key</th><th>value</th></tr>"
+                                                       
+"<tr><td>f1</td><td>1</td></tr>"
+                                               +"</table>"
+                                       +"</td>"
+                               +"</tr>"
+                               +"<tr>"
+                                       +"<td>x2</td>"
+                                       +"<td>"
+                                               +"<table>"
+                                                       
+"<tr><th>key</th><th>value</th></tr>"
+                                                       
+"<tr><td>f1</td><td>3</td></tr>"
+                                               +"</table>"
+                                       +"</td>"
+                               +"</tr>"
+                               +"<tr>"
+                                       +"<td>x3</td>"
+                                       +"<td>"
+                                               +"<table _type='array'>"
+                                                       +"<tr><th>f1</th></tr>"
+                                                       +"<tr><td>1</td></tr>"
+                                               +"</table>"
+                                       +"</td>"
+                               +"</tr>"
+                               +"<tr>"
+                                       +"<td>x4</td>"
+                                       +"<td>"
+                                               +"<table _type='array'>"
+                                                       +"<tr><th>f1</th></tr>"
+                                                       +"<tr><td>1</td></tr>"
+                                               +"</table>"
+                                       +"</td>"
+                               +"</tr>"
+                               +"<tr>"
+                                       +"<td>x5</td>"
+                                       +"<td>"
+                                               +"<table _type='array'>"
+                                                       +"<tr><th>f1</th></tr>"
+                                                       
+"<tr><td><number>5</number></td></tr>"
+                                               +"</table>"
+                                       +"</td>"
+                               +"</tr>"
+                               +"<tr>"
+                                       +"<td>x6</td>"
+                                       +"<td>"
+                                               +"<table _type='array'>"
+                                                       +"<tr><th>f1</th></tr>"
+                                                       
+"<tr><td><number>7</number></td></tr>"
+                                               +"</table>"
+                                       +"</td>"
+                               +"</tr>"
+                       +"</table>",
+               r);
                r = s.getSchemaSerializer().serialize(new E1());
                assertTrue(r.indexOf("f2") == -1);
        }
@@ -183,15 +276,15 @@ public class CommonTest {
        public static class E1 {
                @BeanProperty(properties="f1") public E2 x1 = new E2();
                @BeanProperty(properties="f1") public Map<String,Integer> x2 = 
new LinkedHashMap<String,Integer>() {{
-                       put("f1",1); put("f2",2);
+                       put("f1",3); put("f2",4);
                }};
                @BeanProperty(properties="f1") public E2[] x3 = {new E2()};
                @BeanProperty(properties="f1") public List<E2> x4 = new 
LinkedList<E2>() {{
                        add(new E2());
                }};
-               @BeanProperty(properties="f1") public ObjectMap[] x5 = {new 
ObjectMap().append("f1",1).append("f2",2)};
+               @BeanProperty(properties="f1") public ObjectMap[] x5 = {new 
ObjectMap().append("f1",5).append("f2",6)};
                @BeanProperty(properties="f1") public List<ObjectMap> x6 = new 
LinkedList<ObjectMap>() {{
-                       add(new ObjectMap().append("f1",1).append("f2",2));
+                       add(new ObjectMap().append("f1",7).append("f2",8));
                }};
        }
 
@@ -211,7 +304,19 @@ public class CommonTest {
                t.x1.add(new F());
                l.add(t);
                String html = s.serialize(l);
-               assertEquals("<table 
_type='array'><tr><th>x1</th><th>x2</th></tr><tr><td><table 
_type='array'><tr><th>x2</th></tr><tr><td><number>2</number></td></tr></table></td><td><number>2</number></td></tr></table>",
 html);
+               assertEquals(
+                       "<table _type='array'>"
+                               +"<tr><th>x1</th><th>x2</th></tr>"
+                               +"<tr>"
+                                       +"<td>"
+                                               +"<table _type='array'>"
+                                                       +"<tr><th>x2</th></tr>"
+                                                       +"<tr><td>2</td></tr>"
+                                               +"</table>"
+                                       +"</td>"
+                                       +"<td>2</td>"
+                               +"</tr>"
+                       +"</table>", html);
        }
 
        public static class F {
@@ -428,10 +533,10 @@ public class CommonTest {
 
        private String strip(String html) {
                return html
-                       .replace("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr>",
 "")
+                       .replace("<table><tr><th>key</th><th>value</th></tr>", 
"")
                        .replace("</table>", "")
-                       .replace("<tr><td><string>", "\n[")
-                       .replace("</string></td><td>", "]=")
+                       .replace("<tr><td>", "\n[")
+                       .replace("</td><td>", "]=")
                        .replace("</td></tr>", "");
        }
 
@@ -492,7 +597,7 @@ public class CommonTest {
                }
 
                s.setProperty(SERIALIZER_ignoreRecursions, true);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>name</string></td><td><string>foo</string></td></tr><tr><td><string>r2</string></td><td><table
 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>name</string></td><td><string>bar</string></td></tr><tr><td><string>r3</string></td><td><table
 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>name</string></td><td><string>baz</string></td></tr></table></td></tr></table></td></tr></table>",
+               
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>name</td><td>foo</td></tr><tr><td>r2</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>name</td><td>bar</td></tr><tr><td>r3</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>name</td><td>baz</td></tr></table></td></tr></table></td></tr></table>",
                        s.serialize(r1));
 
                // Make sure this doesn't blow up.
@@ -523,7 +628,14 @@ public class CommonTest {
                a.setF1("J");
                a.setF2(100);
                a.setF3(true);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><string>J</string></td></tr><tr><td><string>f2</string></td><td><number>100</number></td></tr><tr><td><string>f3</string></td><td><boolean>true</boolean></td></tr></table>",
 s.serialize(a));
+               assertEquals(
+                       "<table>"
+                               +"<tr><th>key</th><th>value</th></tr>"
+                               +"<tr><td>f1</td><td>J</td></tr>"
+                               +"<tr><td>f2</td><td>100</td></tr>"
+                               +"<tr><td>f3</td><td>true</td></tr>"
+                       +"</table>",
+                       s.serialize(a));
        }
 
        public static class J {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/html/HtmlTest.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/test/java/org/apache/juneau/html/HtmlTest.java 
b/juneau-core/src/test/java/org/apache/juneau/html/HtmlTest.java
index d9ee860..435f85f 100755
--- a/juneau-core/src/test/java/org/apache/juneau/html/HtmlTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/html/HtmlTest.java
@@ -36,7 +36,7 @@ public class HtmlTest {
 
                t = new Object[] {new A1(), new A1()};
                html = s.serialize(t);
-               assertEquals("<table 
_type='array'><tr><th>f1</th></tr><tr><td><string>f1</string></td></tr><tr><td><string>f1</string></td></tr></table>",
 html);
+               assertEquals("<table 
_type='array'><tr><th>f1</th></tr><tr><td>f1</td></tr><tr><td>f1</td></tr></table>",
 html);
 
        }
 
@@ -189,11 +189,11 @@ public class HtmlTest {
                        +"\n[f7]=<a 
href='http://www.apache.org/f7/x7'>http://www.apache.org/f7/x7</a>"
                        +"\n[f8]=<a href='/cr/f8/x8'>f8/x8</a>"
                        +"\n[f9]=<a href='/cr/f9/x9'>f9/x9</a>"
-                       
+"\n[fa]=<string>http://www.apache.org/fa/xa#MY_LABEL</string>"
-                       
+"\n[fb]=<string>http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar</string>"
-                       
+"\n[fc]=<string>http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL</string>"
-                       
+"\n[fd]=<string>http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar</string>"
-                       
+"\n[fe]=<string>http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL</string>";
+                       +"\n[fa]=http://www.apache.org/fa/xa#MY_LABEL";
+                       
+"\n[fb]=http://www.apache.org/fb/xb?label=MY_LABEL&amp;foo=bar";
+                       
+"\n[fc]=http://www.apache.org/fc/xc?foo=bar&amp;label=MY_LABEL";
+                       
+"\n[fd]=http://www.apache.org/fd/xd?label2=MY_LABEL&amp;foo=bar";
+                       
+"\n[fe]=http://www.apache.org/fe/xe?foo=bar&amp;label2=MY_LABEL";;
                        assertEquals(expected, r);
 
                        s.setProperty(HTML_detectLinksInStrings, true);
@@ -220,10 +220,10 @@ public class HtmlTest {
 
        private String strip(String html) {
                return html
-                       .replace("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr>",
 "")
+                       .replace("<table><tr><th>key</th><th>value</th></tr>", 
"")
                        .replace("</table>", "")
-                       .replace("<tr><td><string>", "\n[")
-                       .replace("</string></td><td>", "]=")
+                       .replace("<tr><td>", "\n[")
+                       .replace("</td><td>", "]=")
                        .replace("</td></tr>", "");
        }
 
@@ -242,7 +242,7 @@ public class HtmlTest {
 
                o = new B2();
                r = s.serialize(o);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><f1></td></tr></table>",
 r);
+               
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td><f1></td></tr></table>",
 r);
        }
 
        @Html(asPlainText=true)
@@ -274,7 +274,7 @@ public class HtmlTest {
 
                o = new C2();
                r = s.serialize(o);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><string>&lt;f1&gt;</string></td></tr></table>",
 r);
+               
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td>&lt;f1&gt;</td></tr></table>",
 r);
        }
 
        @Html(asXml=true)
@@ -300,7 +300,7 @@ public class HtmlTest {
                m.put("foo", "bar");
                o = new ObjectList().append(m);
                r = s.serialize(o);
-               assertEquals("<ul><li><table 
_type='object'><tr><td><string>foo</string></td><td><string>bar</string></td></tr></table></li></ul>",
 r);
+               
assertEquals("<ul><li><table><tr><td>foo</td><td>bar</td></tr></table></li></ul>",
 r);
        }
 
        @Html(noTables=true, noTableHeaders=true)

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/json/JsonParserTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/test/java/org/apache/juneau/json/JsonParserTest.java 
b/juneau-core/src/test/java/org/apache/juneau/json/JsonParserTest.java
index 19eee59..49b359c 100755
--- a/juneau-core/src/test/java/org/apache/juneau/json/JsonParserTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/json/JsonParserTest.java
@@ -108,12 +108,6 @@ public class JsonParserTest {
        }
 
        @Test
-       public void testCognosJson() throws Exception {
-               String json = 
TestUtils.readFile(getClass().getResource("/json/BrokenCognosOutput.json").getPath());
-               p.parse(json, ObjectMap.class);
-       }
-
-       @Test
        public void testStrictMode() throws Exception {
                JsonParser p = sp;
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/transforms/BeanMapTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/test/java/org/apache/juneau/transforms/BeanMapTest.java 
b/juneau-core/src/test/java/org/apache/juneau/transforms/BeanMapTest.java
index 893bf3f..0f44984 100755
--- a/juneau-core/src/test/java/org/apache/juneau/transforms/BeanMapTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/transforms/BeanMapTest.java
@@ -81,14 +81,14 @@ public class BeanMapTest {
                public String f2;
        }
 
-       public static class B1Swap extends PojoSwap<B1,ObjectMap> {
+       public static class B1Swap extends MapSwap<B1> {
                @Override /* PojoSwap */
                public ObjectMap swap(BeanSession session, B1 b1) {
                        return new ObjectMap().append("type", 
"b1").append("f1", b1.f1);
                }
        }
 
-       public static class B2Swap extends PojoSwap<B2,ObjectMap> {
+       public static class B2Swap extends MapSwap<B2> {
                @Override /* PojoSwap */
                public ObjectMap swap(BeanSession session, B2 b2) {
                        return new ObjectMap().append("type", 
"b2").append("f1", b2.f1);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java 
b/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java
index 72889ef..16a79c8 100755
--- 
a/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java
+++ 
b/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java
@@ -164,7 +164,7 @@ public class CalendarSwapTest {
        @Test
        public void testDefaultStringXml() throws Exception {
                Class<?> f = CalendarSwap.ToString.class;
-               WriterSerializer s = new 
XmlSerializer.SimpleSq().addPojoSwaps(f);
+               WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
                ReaderParser p = new XmlParser().addPojoSwaps(f);
                doTest(s, p, true, "<string>Sun Mar 03 10:11:12 PST 
1901</string>");
        }
@@ -231,7 +231,7 @@ public class CalendarSwapTest {
        @Test
        public void testISO8601DTXml() throws Exception {
                Class<?> f = CalendarSwap.ISO8601DT.class;
-               WriterSerializer s = new 
XmlSerializer.SimpleSq().addPojoSwaps(f);
+               WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
                ReaderParser p = new XmlParser().addPojoSwaps(f);
                doTest(s, p, true, 
"<string>1901-03-03T10:11:12-08:00</string>");
        }
@@ -297,7 +297,7 @@ public class CalendarSwapTest {
        @Test
        public void testRFC2822DTXml() throws Exception {
                Class<?> f = CalendarSwap.RFC2822DTZ.class;
-               WriterSerializer s = new 
XmlSerializer.SimpleSq().addPojoSwaps(f);
+               WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
                ReaderParser p = new XmlParser().addPojoSwaps(f);
                doTest(s, p, true, "<string>Sun, 03 Mar 1901 18:11:12 
GMT</string>");
        }
@@ -363,7 +363,7 @@ public class CalendarSwapTest {
        @Test
        public void testDefaultLongXml() throws Exception {
                Class<?> f = CalendarLongSwap.class;
-               WriterSerializer s = new 
XmlSerializer.SimpleSq().addPojoSwaps(f);
+               WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
                ReaderParser p = new XmlParser().addPojoSwaps(f);
                doTest(s, p, true, "<number>-2172116928000</number>");
        }
@@ -429,7 +429,7 @@ public class CalendarSwapTest {
        @Test
        public void testDefaultMapXml() throws Exception {
                Class<?> f = CalendarMapSwap.class;
-               WriterSerializer s = new 
XmlSerializer.SimpleXmlJsonSq().addPojoSwaps(f);
+               WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
                ReaderParser p = new XmlParser().addPojoSwaps(f);
                doTest(s, p, true, "<object><time 
_type='number'>-2172116928000</time><timeZone>PST</timeZone></object>");
        }
@@ -442,7 +442,7 @@ public class CalendarSwapTest {
                Class<?> f = CalendarMapSwap.class;
                WriterSerializer s = new 
HtmlSerializer.Sq().addPojoSwaps(f).setProperty(HTML_addKeyValueTableHeaders, 
true);
                ReaderParser p = new HtmlParser().addPojoSwaps(f);
-               doTest(s, p, true, "<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>time</string></td><td><number>-2172116928000</number></td></tr><tr><td><string>timeZone</string></td><td><string>PST</string></td></tr></table>");
+               doTest(s, p, true, 
"<table><tr><th>key</th><th>value</th></tr><tr><td>time</td><td><number>-2172116928000</number></td></tr><tr><td>timeZone</td><td>PST</td></tr></table>");
        }
 
        
//====================================================================================================
@@ -495,7 +495,7 @@ public class CalendarSwapTest {
        @Test
        public void testDefaultMediumXml() throws Exception {
                Class<?> f = CalendarSwap.DateMedium.class;
-               WriterSerializer s = new 
XmlSerializer.SimpleSq().addPojoSwaps(f);
+               WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f);
                ReaderParser p = new XmlParser().addPojoSwaps(f);
                doTest(s, p, false, "<string>Mar 3, 1901</string>");
        }
@@ -567,7 +567,7 @@ public class CalendarSwapTest {
        
//====================================================================================================
        @Test
        public void testBeanProperyFilterXml() throws Exception {
-               WriterSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               WriterSerializer s = XmlSerializer.DEFAULT_SQ;
                ReaderParser p = XmlParser.DEFAULT;
 
                Calendar c = testDate;
@@ -591,7 +591,7 @@ public class CalendarSwapTest {
                Calendar c = testDate;
                A t = new A(c);
                String html = s.serialize(t);
-               assertEquals("<table 
_type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>d1</string></td><td><string>1901-03-03T18:11:12Z</string></td></tr><tr><td><string>d2</string></td><td><string>Sun,
 03 Mar 1901 18:11:12 
GMT</string></td></tr><tr><td><string>d3</string></td><td><number>-2172116928000</number></td></tr></table>",
 html);
+               
assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>d1</td><td>1901-03-03T18:11:12Z</td></tr><tr><td>d2</td><td>Sun,
 03 Mar 1901 18:11:12 
GMT</td></tr><tr><td>d3</td><td>-2172116928000</td></tr></table>", html);
                t = p.parse(html, A.class);
                assertEquals(t.d1.getTime().getTime(), c.getTime().getTime());
                assertEquals(t.getD2().getTime().getTime(), 
c.getTime().getTime());

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/utils/FilteredMapTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/test/java/org/apache/juneau/utils/FilteredMapTest.java 
b/juneau-core/src/test/java/org/apache/juneau/utils/FilteredMapTest.java
index 48949da..ec75da3 100755
--- a/juneau-core/src/test/java/org/apache/juneau/utils/FilteredMapTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/utils/FilteredMapTest.java
@@ -30,16 +30,21 @@ public class FilteredMapTest {
        // testBasic
        
//====================================================================================================
        @Test
+       @SuppressWarnings("unchecked")
        public void testBasic() throws Exception {
                ObjectMap m = new ObjectMap("{a:'1',b:'2'}");
-               FilteredMap<String,Object> m2 = new 
FilteredMap<String,Object>(m, new String[]{"a"});
+
+               ClassMeta<Map<String,Object>> cm = 
BeanContext.DEFAULT.getMapClassMeta(Map.class, String.class, Object.class);
+               ClassMeta<Map<String,String>> cm2 = 
BeanContext.DEFAULT.getMapClassMeta(Map.class, String.class, String.class);
+
+               FilteredMap<String,Object> m2 = new 
FilteredMap<String,Object>(cm, m, new String[]{"a"});
 
                assertObjectEquals("{a:'1'}", m2);
 
                m2.entrySet().iterator().next().setValue("3");
                assertObjectEquals("{a:'3'}", m2);
 
-               try { m3 = new FilteredMap<String,String>(null, new String[0]); 
fail(); } catch (IllegalArgumentException e) {}
-               try { m3 = new FilteredMap<String,Object>(m, null); fail(); } 
catch (IllegalArgumentException e) {}
+               try { m3 = new FilteredMap<String,String>(cm2, null, new 
String[0]); fail(); } catch (IllegalArgumentException e) {}
+               try { m3 = new FilteredMap<String,Object>(cm, m, null); fail(); 
} catch (IllegalArgumentException e) {}
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/BasicXmlTest.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/test/java/org/apache/juneau/xml/BasicXmlTest.java 
b/juneau-core/src/test/java/org/apache/juneau/xml/BasicXmlTest.java
new file mode 100644
index 0000000..182ffdd
--- /dev/null
+++ b/juneau-core/src/test/java/org/apache/juneau/xml/BasicXmlTest.java
@@ -0,0 +1,1505 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.xml;
+
+import static org.junit.Assert.*;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.xml.annotation.*;
+import org.junit.*;
+import org.junit.runner.*;
+import org.junit.runners.*;
+
+@RunWith(Parameterized.class)
+@SuppressWarnings({"javadoc","serial"})
+public class BasicXmlTest {
+
+       private static final XmlSerializer
+               s1 = XmlSerializer.DEFAULT_SQ,
+               s2 = XmlSerializer.DEFAULT_SQ_READABLE,
+               s3 = XmlSerializer.DEFAULT_NS_SQ;
+       private static final XmlParser parser = XmlParser.DEFAULT;
+
+       @Parameterized.Parameters
+       public static Collection<Object[]> getParameters() {
+               return Arrays.asList(new Object[][] {
+
+                       {
+                               "SimpleTypes-1",
+                               "foo",
+                               "<string>foo</string>",
+                               "<string>foo</string>\n",
+                               "<string>foo</string>",
+                       },
+                       {
+                               "SimpleTypes-2",
+                               true,
+                               "<boolean>true</boolean>",
+                               "<boolean>true</boolean>\n",
+                               "<boolean>true</boolean>",
+                       },
+                       {
+                               "SimpleTypes-3",
+                               123,
+                               "<number>123</number>",
+                               "<number>123</number>\n",
+                               "<number>123</number>",
+                       },
+                       {
+                               "SimpleTypes-4",
+                               1.23f,
+                               "<number>1.23</number>",
+                               "<number>1.23</number>\n",
+                               "<number>1.23</number>",
+                       },
+                       {
+                               "SimpleTypes-5",
+                               null,
+                               "<null/>",
+                               "<null/>\n",
+                               "<null/>",
+                       },
+                       {
+                               "Arrays-1",
+                               new String[]{"foo"},
+                               "<array><string>foo</string></array>",
+                               "<array>\n\t<string>foo</string>\n</array>\n",
+                               "<array><string>foo</string></array>",
+                       },
+                       {
+                               "Arrays-2",
+                               new String[]{null},
+                               "<array><null/></array>",
+                               "<array>\n\t<null/>\n</array>\n",
+                               "<array><null/></array>",
+                       },
+                       {
+                               "Arrays-3",
+                               new Object[]{"foo"},
+                               "<array><string>foo</string></array>",
+                               "<array>\n\t<string>foo</string>\n</array>\n",
+                               "<array><string>foo</string></array>",
+                       },
+                       {
+                               "Arrays-4",
+                               new int[]{123},
+                               "<array><number>123</number></array>",
+                               "<array>\n\t<number>123</number>\n</array>\n",
+                               "<array><number>123</number></array>",
+                       },
+                       {
+                               "Arrays-5",
+                               new boolean[]{true},
+                               "<array><boolean>true</boolean></array>",
+                               
"<array>\n\t<boolean>true</boolean>\n</array>\n",
+                               "<array><boolean>true</boolean></array>",
+                       },
+                       {
+                               "Arrays-6",
+                               new String[][]{{"foo"}},
+                               
"<array><array><string>foo</string></array></array>",
+                               
"<array>\n\t<array>\n\t\t<string>foo</string>\n\t</array>\n</array>\n",
+                               
"<array><array><string>foo</string></array></array>",
+                       },
+                       {
+                               "MapWithStrings",
+                               new MapWithStrings().append("k1", 
"v1").append("k2", null),
+                               "<object><k1>v1</k1><k2 
_type='null'/></object>",
+                               "<object>\n\t<k1>v1</k1>\n\t<k2 
_type='null'/>\n</object>\n",
+                               "<object><k1>v1</k1><k2 
_type='null'/></object>",
+                       },
+                       {
+                               "MapsWithNumbers",
+                               new MapWithNumbers().append("k1", 
123).append("k2", 1.23).append("k3", null),
+                               "<object><k1>123</k1><k2>1.23</k2><k3 
_type='null'/></object>",
+                               
"<object>\n\t<k1>123</k1>\n\t<k2>1.23</k2>\n\t<k3 _type='null'/>\n</object>\n",
+                               "<object><k1>123</k1><k2>1.23</k2><k3 
_type='null'/></object>",
+                       },
+                       {
+                               "MapWithObjects",
+                               new MapWithObjects().append("k1", 
"v1").append("k2", 123).append("k3", 1.23).append("k4", true).append("k5", 
null),
+                               "<object><k1>v1</k1><k2 
_type='number'>123</k2><k3 _type='number'>1.23</k3><k4 
_type='boolean'>true</k4><k5 _type='null'/></object>",
+                               "<object>\n\t<k1>v1</k1>\n\t<k2 
_type='number'>123</k2>\n\t<k3 _type='number'>1.23</k3>\n\t<k4 
_type='boolean'>true</k4>\n\t<k5 _type='null'/>\n</object>\n",
+                               "<object><k1>v1</k1><k2 
_type='number'>123</k2><k3 _type='number'>1.23</k3><k4 
_type='boolean'>true</k4><k5 _type='null'/></object>",
+                       },
+                       {
+                               "ListWithStrings",
+                               new 
ListWithStrings().append("foo").append(null),
+                               "<array><string>foo</string><null/></array>",
+                               
"<array>\n\t<string>foo</string>\n\t<null/>\n</array>\n",
+                               "<array><string>foo</string><null/></array>",
+                       },
+                       {
+                               "ListWithNumbers",
+                               new 
ListWithNumbers().append(123).append(1.23).append(null),
+                               
"<array><number>123</number><number>1.23</number><null/></array>",
+                               
"<array>\n\t<number>123</number>\n\t<number>1.23</number>\n\t<null/>\n</array>\n",
+                               
"<array><number>123</number><number>1.23</number><null/></array>",
+                       },
+                       {
+                               "ListWithObjects",
+                               new 
ListWithObjects().append("foo").append(123).append(1.23).append(true).append(null),
+                               
"<array><string>foo</string><number>123</number><number>1.23</number><boolean>true</boolean><null/></array>",
+                               
"<array>\n\t<string>foo</string>\n\t<number>123</number>\n\t<number>1.23</number>\n\t<boolean>true</boolean>\n\t<null/>\n</array>\n",
+                               
"<array><string>foo</string><number>123</number><number>1.23</number><boolean>true</boolean><null/></array>",
+                       },
+                       {
+                               "BeanWithNormalProperties",
+                               new BeanWithNormalProperties().init(),
+                               "<object>"
+                                       +"<a>foo</a>"
+                                       +"<b>123</b>"
+                                       +"<c>bar</c>"
+                                       +"<d _type='number'>456</d>"
+                                       +"<e>"
+                                               +"<h>qux</h>"
+                                       +"</e>"
+                                       +"<f>"
+                                               +"<string>baz</string>"
+                                       +"</f>"
+                                       +"<g>"
+                                               +"<number>789</number>"
+                                       +"</g>"
+                               +"</object>",
+                               "<object>"
+                                       +"\n\t<a>foo</a>"
+                                       +"\n\t<b>123</b>"
+                                       +"\n\t<c>bar</c>"
+                                       +"\n\t<d _type='number'>456</d>"
+                                       +"\n\t<e>"
+                                               +"\n\t\t<h>qux</h>"
+                                       +"\n\t</e>"
+                                       +"\n\t<f>"
+                                               +"\n\t\t<string>baz</string>"
+                                       +"\n\t</f>"
+                                       +"\n\t<g>"
+                                               +"\n\t\t<number>789</number>"
+                                       +"\n\t</g>"
+                               +"\n</object>\n",
+                               "<object>"
+                                       +"<a>foo</a>"
+                                       +"<b>123</b>"
+                                       +"<c>bar</c>"
+                                       +"<d _type='number'>456</d>"
+                                       +"<e>"
+                                               +"<h>qux</h>"
+                                       +"</e>"
+                                       +"<f>"
+                                               +"<string>baz</string>"
+                                       +"</f>"
+                                       +"<g>"
+                                               +"<number>789</number>"
+                                       +"</g>"
+                               +"</object>",
+                       },
+                       {
+                               "BeanWithMapProperties",
+                               new BeanWithMapProperties().init(),
+                               "<object>"
+                                       +"<a>"
+                                               +"<k1>foo</k1>"
+                                       +"</a>"
+                                       +"<b>"
+                                               +"<k2>123</k2>"
+                                       +"</b>"
+                                       +"<c>"
+                                               +"<k3>bar</k3>"
+                                               +"<k4 _type='number'>456</k4>"
+                                               +"<k5 _type='boolean'>true</k5>"
+                                               +"<k6 _type='null'/>"
+                                       +"</c>"
+                               +"</object>",
+                               "<object>"
+                                       +"\n\t<a>"
+                                               +"\n\t\t<k1>foo</k1>"
+                                       +"\n\t</a>"
+                                       +"\n\t<b>"
+                                               +"\n\t\t<k2>123</k2>"
+                                       +"\n\t</b>"
+                                       +"\n\t<c>"
+                                               +"\n\t\t<k3>bar</k3>"
+                                               +"\n\t\t<k4 
_type='number'>456</k4>"
+                                               +"\n\t\t<k5 
_type='boolean'>true</k5>"
+                                               +"\n\t\t<k6 _type='null'/>"
+                                       +"\n\t</c>"
+                               +"\n</object>\n",
+                               "<object>"
+                                       +"<a>"
+                                               +"<k1>foo</k1>"
+                                       +"</a>"
+                                       +"<b>"
+                                               +"<k2>123</k2>"
+                                       +"</b>"
+                                       +"<c>"
+                                               +"<k3>bar</k3>"
+                                               +"<k4 _type='number'>456</k4>"
+                                               +"<k5 _type='boolean'>true</k5>"
+                                               +"<k6 _type='null'/>"
+                                       +"</c>"
+                               +"</object>",
+                  },
+                       {
+                               "BeanWithTypeName",
+                               new BeanWithTypeName().init(),
+                               "<X><a>123</a><b>foo</b></X>",
+                               "<X>\n\t<a>123</a>\n\t<b>foo</b>\n</X>\n",
+                               "<X><a>123</a><b>foo</b></X>",
+                       },
+                       {
+                               "BeanWithPropertiesWithTypeNames",
+                               new BeanWithPropertiesWithTypeNames().init(),
+                               "<object><b1><b>foo</b></b1><b2 
_type='B'><b>foo</b></b2></object>",
+                               
"<object>\n\t<b1>\n\t\t<b>foo</b>\n\t</b1>\n\t<b2 
_type='B'>\n\t\t<b>foo</b>\n\t</b2>\n</object>\n",
+                               "<object><b1><b>foo</b></b1><b2 
_type='B'><b>foo</b></b2></object>"
+                       },
+                       {
+                               "BeanWithPropertiesWithArrayTypeNames",
+                               new 
BeanWithPropertiesWithArrayTypeNames().init(),
+                               "<object>"
+                                       +"<b1>"
+                                               +"<B>"
+                                                       +"<b>foo</b>"
+                                               +"</B>"
+                                       +"</b1>"
+                                       +"<b2 _type='B^'>"
+                                               +"<B>"
+                                                       +"<b>foo</b>"
+                                               +"</B>"
+                                       +"</b2>"
+                                       +"<b3>"
+                                               +"<B>"
+                                                       +"<b>foo</b>"
+                                               +"</B>"
+                                       +"</b3>"
+                               +"</object>",
+                               "<object>\n"
+                                       +"\t<b1>\n"
+                                               +"\t\t<B>\n"
+                                                       +"\t\t\t<b>foo</b>\n"
+                                               +"\t\t</B>\n"
+                                       +"\t</b1>\n"
+                                       +"\t<b2 _type='B^'>\n"
+                                               +"\t\t<B>\n"
+                                                       +"\t\t\t<b>foo</b>\n"
+                                               +"\t\t</B>\n"
+                                       +"\t</b2>\n"
+                                       +"\t<b3>\n"
+                                               +"\t\t<B>\n"
+                                                       +"\t\t\t<b>foo</b>\n"
+                                               +"\t\t</B>\n"
+                                       +"\t</b3>\n"
+                               +"</object>\n",
+                               "<object>"
+                                       +"<b1>"
+                                               +"<B>"
+                                                       +"<b>foo</b>"
+                                               +"</B>"
+                                       +"</b1>"
+                                       +"<b2 _type='B^'>"
+                                               +"<B>"
+                                                       +"<b>foo</b>"
+                                               +"</B>"
+                                       +"</b2>"
+                                       +"<b3>"
+                                               +"<B>"
+                                                       +"<b>foo</b>"
+                                               +"</B>"
+                                       +"</b3>"
+                               +"</object>",
+                       },
+                       {
+                               "BeanWithPropertiesWithArray2dTypeNames",
+                               new 
BeanWithPropertiesWith2dArrayTypeNames().init(),
+                               "<object>"
+                                       +"<b1>"
+                                               +"<array>"
+                                                       +"<B>"
+                                                               +"<b>foo</b>"
+                                                       +"</B>"
+                                               +"</array>"
+                                       +"</b1>"
+                                       +"<b2 _type='B^^'>"
+                                               +"<array>"
+                                                       +"<B>"
+                                                               +"<b>foo</b>"
+                                                       +"</B>"
+                                               +"</array>"
+                                       +"</b2>"
+                                       +"<b3>"
+                                               +"<array>"
+                                                       +"<B>"
+                                                               +"<b>foo</b>"
+                                                       +"</B>"
+                                               +"</array>"
+                                       +"</b3>"
+                               +"</object>",
+                               "<object>\n"
+                                       +"\t<b1>\n"
+                                               +"\t\t<array>\n"
+                                                       +"\t\t\t<B>\n"
+                                                               
+"\t\t\t\t<b>foo</b>\n"
+                                                       +"\t\t\t</B>\n"
+                                               +"\t\t</array>\n"
+                                       +"\t</b1>\n"
+                                       +"\t<b2 _type='B^^'>\n"
+                                               +"\t\t<array>\n"
+                                                       +"\t\t\t<B>\n"
+                                                               
+"\t\t\t\t<b>foo</b>\n"
+                                                       +"\t\t\t</B>\n"
+                                               +"\t\t</array>\n"
+                                       +"\t</b2>\n"
+                                       +"\t<b3>\n"
+                                               +"\t\t<array>\n"
+                                                       +"\t\t\t<B>\n"
+                                                               
+"\t\t\t\t<b>foo</b>\n"
+                                                       +"\t\t\t</B>\n"
+                                               +"\t\t</array>\n"
+                                       +"\t</b3>\n"
+                               +"</object>\n",
+                               "<object>"
+                                       +"<b1>"
+                                               +"<array>"
+                                                       +"<B>"
+                                                               +"<b>foo</b>"
+                                                       +"</B>"
+                                               +"</array>"
+                                       +"</b1>"
+                                       +"<b2 _type='B^^'>"
+                                               +"<array>"
+                                                       +"<B>"
+                                                               +"<b>foo</b>"
+                                                       +"</B>"
+                                               +"</array>"
+                                       +"</b2>"
+                                       +"<b3>"
+                                               +"<array>"
+                                                       +"<B>"
+                                                               +"<b>foo</b>"
+                                                       +"</B>"
+                                               +"</array>"
+                                       +"</b3>"
+                               +"</object>",
+                       },
+                       {
+                               "BeanWithPropertiesWithMapTypeNames",
+                               new BeanWithPropertiesWithMapTypeNames().init(),
+                               "<object>"
+                                       +"<b1>"
+                                               +"<k1>"
+                                                       +"<b>foo</b>"
+                                               +"</k1>"
+                                       +"</b1>"
+                                       +"<b2>"
+                                               +"<k2 _type='B'>"
+                                                       +"<b>foo</b>"
+                                               +"</k2>"
+                                       +"</b2>"
+                               +"</object>",
+                               "<object>\n"
+                                       +"\t<b1>\n"
+                                               +"\t\t<k1>\n"
+                                                       +"\t\t\t<b>foo</b>\n"
+                                               +"\t\t</k1>\n"
+                                       +"\t</b1>\n"
+                                       +"\t<b2>\n"
+                                               +"\t\t<k2 _type='B'>\n"
+                                                       +"\t\t\t<b>foo</b>\n"
+                                               +"\t\t</k2>\n"
+                                       +"\t</b2>\n"
+                               +"</object>\n",
+                               "<object>"
+                                       +"<b1>"
+                                               +"<k1>"
+                                                       +"<b>foo</b>"
+                                               +"</k1>"
+                                       +"</b1>"
+                                       +"<b2>"
+                                               +"<k2 _type='B'>"
+                                                       +"<b>foo</b>"
+                                               +"</k2>"
+                                       +"</b2>"
+                               +"</object>",
+                       },
+                       {
+                               "BeanWithChildTypeNames",
+                               new BeanWithChildTypeNames().init(),
+                               "<object>"
+                                       +"<a>"
+                                               +"<fx>fx1</fx>"
+                                       +"</a>"
+                                       +"<b _type='X'>"
+                                               +"<fx>fx1</fx>"
+                                       +"</b>"
+                                       +"<c>"
+                                               +"<X>"
+                                                       +"<fx>fx1</fx>"
+                                               +"</X>"
+                                       +"</c>"
+                                       +"<d>"
+                                               +"<X>"
+                                                       +"<fx>fx1</fx>"
+                                               +"</X>"
+                                       +"</d>"
+                               +"</object>",
+                               "<object>"
+                                       +"\n\t<a>"
+                                               +"\n\t\t<fx>fx1</fx>"
+                                       +"\n\t</a>"
+                                       +"\n\t<b _type='X'>"
+                                               +"\n\t\t<fx>fx1</fx>"
+                                       +"\n\t</b>"
+                                       +"\n\t<c>"
+                                               +"\n\t\t<X>"
+                                                       +"\n\t\t\t<fx>fx1</fx>"
+                                               +"\n\t\t</X>"
+                                       +"\n\t</c>"
+                                       +"\n\t<d>"
+                                               +"\n\t\t<X>"
+                                                       +"\n\t\t\t<fx>fx1</fx>"
+                                               +"\n\t\t</X>"
+                                       +"\n\t</d>"
+                               +"\n</object>\n",
+                               "<object>"
+                                       +"<a>"
+                                               +"<fx>fx1</fx>"
+                                       +"</a>"
+                                       +"<b _type='X'>"
+                                               +"<fx>fx1</fx>"
+                                       +"</b>"
+                                       +"<c>"
+                                               +"<X>"
+                                                       +"<fx>fx1</fx>"
+                                               +"</X>"
+                                       +"</c>"
+                                       +"<d>"
+                                               +"<X>"
+                                                       +"<fx>fx1</fx>"
+                                               +"</X>"
+                                       +"</d>"
+                               +"</object>",
+                       },
+                       {
+                               "BeanWithChildName",
+                               new BeanWithChildName().init(),
+                               
"<object><a><X>foo</X><X>bar</X></a><b><Y>123</Y><Y>456</Y></b></object>",
+                               
"<object>\n\t<a>\n\t\t<X>foo</X>\n\t\t<X>bar</X>\n\t</a>\n\t<b>\n\t\t<Y>123</Y>\n\t\t<Y>456</Y>\n\t</b>\n</object>\n",
+                               
"<object><a><X>foo</X><X>bar</X></a><b><Y>123</Y><Y>456</Y></b></object>",
+                       },
+                       {
+                               "BeanWithXmlFormatAttrProperty",
+                               new BeanWithXmlFormatAttrProperty().init(),
+               "<object a='foo' b='123'/>",
+               "<object a='foo' b='123'/>\n",
+               "<object a='foo' b='123'/>",
+                       },
+                       {
+                               "BeanWithXmlFormatAttrs",
+                               new BeanWithXmlFormatAttrs().init(),
+               "<object a='foo' b='123'/>",
+               "<object a='foo' b='123'/>\n",
+               "<object a='foo' b='123'/>",
+                       },
+                       {
+                               "BeanWithXmlFormatElementProperty",
+                               new BeanWithXmlFormatElementProperty().init(),
+                               "<object a='foo'><b>123</b></object>",
+                               "<object a='foo'>\n\t<b>123</b>\n</object>\n",
+                               "<object a='foo'><b>123</b></object>",
+                       },
+                       {
+                               "BeanWithXmlFormatAttrsProperty",
+                               new BeanWithXmlFormatAttrsProperty().init(),
+                               "<object k1='foo' k2='123' b='456'/>",
+                               "<object k1='foo' k2='123' b='456'/>\n",
+                               "<object k1='foo' k2='123' b='456'/>",
+                       },
+                       {
+                               "BeanWithXmlFormatCollapsedProperty",
+                               new BeanWithXmlFormatCollapsedProperty().init(),
+                               
"<object><A>foo</A><A>bar</A><B>123</B><B>456</B></object>",
+                               
"<object>\n\t<A>foo</A>\n\t<A>bar</A>\n\t<B>123</B>\n\t<B>456</B>\n</object>\n",
+                               
"<object><A>foo</A><A>bar</A><B>123</B><B>456</B></object>",
+                       },
+                       {
+                               "BeanWithXmlFormatTextProperty",
+                               new BeanWithXmlFormatTextProperty().init(),
+                               "<object a='foo'>bar</object>",
+                               "<object a='foo'>bar</object>\n",
+                               "<object a='foo'>bar</object>",
+                       },
+                       {
+                               "BeanWithXmlFormatXmlTextProperty",
+                               new BeanWithXmlFormatXmlTextProperty().init(),
+                               "<object a='foo'>bar<b>baz</b>qux</object>",
+                               "<object a='foo'>bar<b>baz</b>qux</object>\n",
+                               "<object a='foo'>bar<b>baz</b>qux</object>",
+                       },
+                       {
+                               "BeanWithXmlFormatElementsPropertyCollection",
+                               new 
BeanWithXmlFormatElementsPropertyCollection().init(),
+                               "<object 
a='foo'><string>bar</string><string>baz</string><number>123</number><boolean>true</boolean><null/></object>",
+                               "<object 
a='foo'>\n\t<string>bar</string>\n\t<string>baz</string>\n\t<number>123</number>\n\t<boolean>true</boolean>\n\t<null/>\n</object>\n",
+                               "<object 
a='foo'><string>bar</string><string>baz</string><number>123</number><boolean>true</boolean><null/></object>",
+                       },
+                       {
+                               "BeanWithMixedContent",
+                               new BeanWithMixedContent().init(),
+                               "<object>foo<X fx='fx1'/>bar<Y 
fy='fy1'/>baz</object>",
+                               "<object>foo<X fx='fx1'/>bar<Y 
fy='fy1'/>baz</object>\n",  // Mixed content doesn't use whitespace!
+                               "<object>foo<X fx='fx1'/>bar<Y 
fy='fy1'/>baz</object>",
+                       },
+                       {
+                               "BeanWithSpecialCharacters",
+                               new BeanWithSpecialCharacters().init(),
+                               
"<object><a>_x000A__x0008__x000C__x0009_</a></object>",
+                               
"<object>\n\t<a>_x000A__x0008__x000C__x0009_</a>\n</object>\n",
+                               
"<object><a>_x000A__x0008__x000C__x0009_</a></object>"
+                       },
+                       {
+                               "BeanWithSpecialCharacters2",
+                               new BeanWithSpecialCharacters2().init(),
+                               
"<_x0024__x0023__x0021_><_x002A__x0028__x0029_>_x000A__x0008__x000C__x0009_</_x002A__x0028__x0029_></_x0024__x0023__x0021_>",
+                               
"<_x0024__x0023__x0021_>\n\t<_x002A__x0028__x0029_>_x000A__x0008__x000C__x0009_</_x002A__x0028__x0029_>\n</_x0024__x0023__x0021_>\n",
+                               
"<_x0024__x0023__x0021_><_x002A__x0028__x0029_>_x000A__x0008__x000C__x0009_</_x002A__x0028__x0029_></_x0024__x0023__x0021_>"
+                       },
+                       {
+                               "BeanWithNullProperties",
+                               new BeanWithNullProperties(),
+                               "<object/>",
+                               "<object/>\n",
+                               "<object/>"
+                       },
+                       {
+                               "BeanWithAbstractFields",
+                               new BeanWithAbstractFields().init(),
+                               "<object>"
+                                       +"<a>"
+                                               +"<a>foo</a>"
+                                       +"</a>"
+                                       +"<ia _type='A'>"
+                                               +"<a>foo</a>"
+                                       +"</ia>"
+                                       +"<aa _type='A'>"
+                                               +"<a>foo</a>"
+                                       +"</aa>"
+                                       +"<o _type='A'>"
+                                               +"<a>foo</a>"
+                                       +"</o>"
+                               +"</object>",
+                               "<object>\n"
+                                       +"\t<a>\n"
+                                               +"\t\t<a>foo</a>\n"
+                                       +"\t</a>\n"
+                                       +"\t<ia _type='A'>\n"
+                                               +"\t\t<a>foo</a>\n"
+                                       +"\t</ia>\n"
+                                       +"\t<aa _type='A'>\n"
+                                               +"\t\t<a>foo</a>\n"
+                                       +"\t</aa>\n"
+                                       +"\t<o _type='A'>\n"
+                                               +"\t\t<a>foo</a>\n"
+                                       +"\t</o>\n"
+                               +"</object>\n",
+                               "<object>"
+                                       +"<a>"
+                                               +"<a>foo</a>"
+                                       +"</a>"
+                                       +"<ia _type='A'>"
+                                               +"<a>foo</a>"
+                                       +"</ia>"
+                                       +"<aa _type='A'>"
+                                               +"<a>foo</a>"
+                                       +"</aa>"
+                                       +"<o _type='A'>"
+                                               +"<a>foo</a>"
+                                       +"</o>"
+                               +"</object>",
+                       },
+                       {
+                               "BeanWithAbstractArrayFields",
+                               new BeanWithAbstractArrayFields().init(),
+                               "<object>"
+                                       +"<a>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</a>"
+                                       +"<ia1 _type='A^'>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</ia1>"
+                                       +"<ia2>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</ia2>"
+                                       +"<aa1 _type='A^'>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</aa1>"
+                                       +"<aa2>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</aa2>"
+                                       +"<o1 _type='A^'>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</o1>"
+                                       +"<o2>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</o2>"
+                               +"</object>",
+                               "<object>\n"
+                                       +"\t<a>\n"
+                                               +"\t\t<A>\n"
+                                                       +"\t\t\t<a>foo</a>\n"
+                                               +"\t\t</A>\n"
+                                       +"\t</a>\n"
+                                       +"\t<ia1 _type='A^'>\n"
+                                               +"\t\t<A>\n"
+                                                       +"\t\t\t<a>foo</a>\n"
+                                               +"\t\t</A>\n"
+                                       +"\t</ia1>\n"
+                                       +"\t<ia2>\n"
+                                               +"\t\t<A>\n"
+                                                       +"\t\t\t<a>foo</a>\n"
+                                               +"\t\t</A>\n"
+                                       +"\t</ia2>\n"
+                                       +"\t<aa1 _type='A^'>\n"
+                                               +"\t\t<A>\n"
+                                                       +"\t\t\t<a>foo</a>\n"
+                                               +"\t\t</A>\n"
+                                       +"\t</aa1>\n"
+                                       +"\t<aa2>\n"
+                                               +"\t\t<A>\n"
+                                                       +"\t\t\t<a>foo</a>\n"
+                                               +"\t\t</A>\n"
+                                       +"\t</aa2>\n"
+                                       +"\t<o1 _type='A^'>\n"
+                                               +"\t\t<A>\n"
+                                                       +"\t\t\t<a>foo</a>\n"
+                                               +"\t\t</A>\n"
+                                       +"\t</o1>\n"
+                                       +"\t<o2>\n"
+                                               +"\t\t<A>\n"
+                                                       +"\t\t\t<a>foo</a>\n"
+                                               +"\t\t</A>\n"
+                                       +"\t</o2>\n"
+                               +"</object>\n",
+                               "<object>"
+                                       +"<a>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</a>"
+                                       +"<ia1 _type='A^'>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</ia1>"
+                                       +"<ia2>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</ia2>"
+                                       +"<aa1 _type='A^'>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</aa1>"
+                                       +"<aa2>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</aa2>"
+                                       +"<o1 _type='A^'>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</o1>"
+                                       +"<o2>"
+                                               +"<A>"
+                                                       +"<a>foo</a>"
+                                               +"</A>"
+                                       +"</o2>"
+                               +"</object>",
+                       },
+                       {
+                               "BeanWithAbstractMapFields",
+                               new BeanWithAbstractMapFields().init(),
+                               "<object>"
+                                       +"<a>"
+                                               +"<k1>"
+                                                       +"<a>foo</a>"
+                                               +"</k1>"
+                                       +"</a>"
+                                       +"<b>"
+                                               +"<k2 _type='A'>"
+                                                       +"<a>foo</a>"
+                                               +"</k2>"
+                                       +"</b>"
+                                       +"<c>"
+                                               +"<k3 _type='A'>"
+                                                       +"<a>foo</a>"
+                                               +"</k3>"
+                                       +"</c>"
+                               +"</object>",
+                               "<object>\n"
+                                       +"\t<a>\n"
+                                               +"\t\t<k1>\n"
+                                                       +"\t\t\t<a>foo</a>\n"
+                                               +"\t\t</k1>\n"
+                                       +"\t</a>\n"
+                                       +"\t<b>\n"
+                                               +"\t\t<k2 _type='A'>\n"
+                                                       +"\t\t\t<a>foo</a>\n"
+                                               +"\t\t</k2>\n"
+                                       +"\t</b>\n"
+                                       +"\t<c>\n"
+                                               +"\t\t<k3 _type='A'>\n"
+                                                       +"\t\t\t<a>foo</a>\n"
+                                               +"\t\t</k3>\n"
+                                       +"\t</c>\n"
+                               +"</object>\n",
+                               "<object>"
+                                       +"<a>"
+                                               +"<k1>"
+                                                       +"<a>foo</a>"
+                                               +"</k1>"
+                                       +"</a>"
+                                       +"<b>"
+                                               +"<k2 _type='A'>"
+                                                       +"<a>foo</a>"
+                                               +"</k2>"
+                                       +"</b>"
+                                       +"<c>"
+                                               +"<k3 _type='A'>"
+                                                       +"<a>foo</a>"
+                                               +"</k3>"
+                                       +"</c>"
+                               +"</object>",
+                       },
+                       {
+                               "BeanWithAbstractMapArrayFields",
+                               new BeanWithAbstractMapArrayFields().init(),
+                               "<object>"
+                                       +"<a>"
+                                               +"<a1>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</a1>"
+                                       +"</a>"
+                                       +"<ia>"
+                                               +"<ia1 _type='A^'>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</ia1>"
+                                               +"<ia2>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</ia2>"
+                                       +"</ia>"
+                                       +"<aa>"
+                                               +"<aa1 _type='A^'>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</aa1>"
+                                               +"<aa2>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</aa2>"
+                                       +"</aa>"
+                                       +"<o>"
+                                               +"<o1 _type='A^'>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</o1>"
+                                               +"<o2>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</o2>"
+                                       +"</o>"
+                               +"</object>",
+                               "<object>\n"
+                                       +"\t<a>\n"
+                                               +"\t\t<a1>\n"
+                                                       +"\t\t\t<A>\n"
+                                                               
+"\t\t\t\t<a>foo</a>\n"
+                                                       +"\t\t\t</A>\n"
+                                               +"\t\t</a1>\n"
+                                       +"\t</a>\n"
+                                       +"\t<ia>\n"
+                                               +"\t\t<ia1 _type='A^'>\n"
+                                                       +"\t\t\t<A>\n"
+                                                               
+"\t\t\t\t<a>foo</a>\n"
+                                                       +"\t\t\t</A>\n"
+                                               +"\t\t</ia1>\n"
+                                               +"\t\t<ia2>\n"
+                                                       +"\t\t\t<A>\n"
+                                                               
+"\t\t\t\t<a>foo</a>\n"
+                                                       +"\t\t\t</A>\n"
+                                               +"\t\t</ia2>\n"
+                                       +"\t</ia>\n"
+                                       +"\t<aa>\n"
+                                               +"\t\t<aa1 _type='A^'>\n"
+                                                       +"\t\t\t<A>\n"
+                                                               
+"\t\t\t\t<a>foo</a>\n"
+                                                       +"\t\t\t</A>\n"
+                                               +"\t\t</aa1>\n"
+                                               +"\t\t<aa2>\n"
+                                                       +"\t\t\t<A>\n"
+                                                               
+"\t\t\t\t<a>foo</a>\n"
+                                                       +"\t\t\t</A>\n"
+                                               +"\t\t</aa2>\n"
+                                       +"\t</aa>\n"
+                                       +"\t<o>\n"
+                                               +"\t\t<o1 _type='A^'>\n"
+                                                       +"\t\t\t<A>\n"
+                                                               
+"\t\t\t\t<a>foo</a>\n"
+                                                       +"\t\t\t</A>\n"
+                                               +"\t\t</o1>\n"
+                                               +"\t\t<o2>\n"
+                                                       +"\t\t\t<A>\n"
+                                                               
+"\t\t\t\t<a>foo</a>\n"
+                                                       +"\t\t\t</A>\n"
+                                               +"\t\t</o2>\n"
+                                       +"\t</o>\n"
+                               +"</object>\n",
+                               "<object>"
+                                       +"<a>"
+                                               +"<a1>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</a1>"
+                                       +"</a>"
+                                       +"<ia>"
+                                               +"<ia1 _type='A^'>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</ia1>"
+                                               +"<ia2>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</ia2>"
+                                       +"</ia>"
+                                       +"<aa>"
+                                               +"<aa1 _type='A^'>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</aa1>"
+                                               +"<aa2>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</aa2>"
+                                       +"</aa>"
+                                       +"<o>"
+                                               +"<o1 _type='A^'>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</o1>"
+                                               +"<o2>"
+                                                       +"<A>"
+                                                               +"<a>foo</a>"
+                                                       +"</A>"
+                                               +"</o2>"
+                                       +"</o>"
+                               +"</object>",
+                       }
+               });
+       }
+
+       private String label, e1, e2, e3;
+       private Object in;
+
+       public BasicXmlTest(String label, Object in, String e1, String e2, 
String e3) throws Exception {
+               this.label = label;
+               this.in = in;
+               this.e1 = e1;
+               this.e2 = e2;
+               this.e3 = e3;
+       }
+
+       @Test
+       public void serializeNormal() {
+               try {
+                       String r = s1.serialize(in);
+                       assertEquals(label + " serialize-normal failed", e1, r);
+               } catch (AssertionError e) {
+                       throw e;
+               } catch (Throwable e) {
+                       throw new RuntimeException(label + " test failed", e);
+               }
+       }
+
+       @Test
+       public void parseNormal() {
+               try {
+                       String r = s1.serialize(in);
+                       Object o = parser.parse(r, in == null ? Object.class : 
in.getClass());
+                       r = s1.serialize(o);
+                       assertEquals(label + " parse-normal failed", e1, r);
+               } catch (AssertionError e) {
+                       throw e;
+               } catch (Throwable e) {
+                       throw new RuntimeException(label + " test failed", e);
+               }
+       }
+
+       @Test
+       public void serializeReadable() {
+               try {
+                       String r = s2.serialize(in);
+                       assertEquals(label + " serialize-readable failed", e2, 
r);
+               } catch (AssertionError e) {
+                       throw e;
+               } catch (Throwable e) {
+                       throw new RuntimeException(label + " test failed", e);
+               }
+       }
+
+       @Test
+       public void parseReadable() {
+               try {
+                       String r = s2.serialize(in);
+                       Object o = parser.parse(r, in == null ? Object.class : 
in.getClass());
+                       r = s2.serialize(o);
+                       assertEquals(label + " parse-readable failed", e2, r);
+               } catch (AssertionError e) {
+                       throw e;
+               } catch (Throwable e) {
+                       throw new RuntimeException(label + " test failed", e);
+               }
+       }
+
+       @Test
+       public void serializeNsEnabled() {
+               try {
+                       String r = s3.serialize(in);
+                       assertEquals(label + " serialize-ns-enabled failed", 
e3, r);
+               } catch (AssertionError e) {
+                       throw e;
+               } catch (Throwable e) {
+                       throw new RuntimeException(label + " test failed", e);
+               }
+       }
+
+       @Test
+       public void parseNsEnabled() {
+               try {
+                       String r = s3.serialize(in);
+                       Object o = parser.parse(r, in == null ? Object.class : 
in.getClass());
+                       r = s3.serialize(o);
+                       assertEquals(label + " parse-ns-enabled failed", e3, r);
+               } catch (AssertionError e) {
+                       throw e;
+               } catch (Throwable e) {
+                       throw new RuntimeException(label + " test failed", e);
+               }
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Test beans
+       
//--------------------------------------------------------------------------------
+
+       public static class MapWithStrings extends LinkedHashMap<String,String> 
{
+               public MapWithStrings append(String key, String value) {
+                       put(key, value);
+                       return this;
+               }
+       }
+
+       public static class MapWithNumbers extends LinkedHashMap<String,Number> 
{
+               public MapWithNumbers append(String key, Number value) {
+                       put(key, value);
+                       return this;
+               }
+       }
+
+       public static class MapWithObjects extends LinkedHashMap<String,Object> 
{
+               public MapWithObjects append(String key, Object value) {
+                       put(key, value);
+                       return this;
+               }
+       }
+
+       public static class ListWithStrings extends ArrayList<String> {
+               public ListWithStrings append(String value) {
+                       this.add(value);
+                       return this;
+               }
+       }
+
+       public static class ListWithNumbers extends ArrayList<Number> {
+               public ListWithNumbers append(Number value) {
+                       this.add(value);
+                       return this;
+               }
+       }
+
+       public static class ListWithObjects extends ArrayList<Object> {
+               public ListWithObjects append(Object value) {
+                       this.add(value);
+                       return this;
+               }
+       }
+
+       public static class BeanWithNormalProperties {
+               public String a;
+               public int b;
+               public Object c;
+               public Object d;
+               public Bean1a e;
+               public String[] f;
+               public int[] g;
+
+               BeanWithNormalProperties init() {
+                       a = "foo";
+                       b = 123;
+                       c = "bar";
+                       d = 456;
+                       e = new Bean1a().init();
+                       f = new String[]{ "baz" };
+                       g = new int[]{ 789 };
+                       return this;
+               }
+       }
+
+       public static class Bean1a {
+               public String h;
+
+               Bean1a init() {
+                       h = "qux";
+                       return this;
+               }
+       }
+
+       public static class BeanWithMapProperties {
+               @BeanProperty(type=MapWithStrings.class)
+               public Map<String,String> a;
+               @BeanProperty(type=MapWithNumbers.class)
+               public Map<String,Number> b;
+               @BeanProperty(type=MapWithObjects.class)
+               public Map<String,Object> c;
+
+               BeanWithMapProperties init() {
+                       a = new MapWithStrings().append("k1","foo");
+                       b = new MapWithNumbers().append("k2",123);
+                       c = new 
MapWithObjects().append("k3","bar").append("k4",456).append("k5",true).append("k6",null);
+                       return this;
+               }
+       }
+
+       @Bean(typeName="X")
+       public static class BeanWithTypeName {
+               public int a;
+               public String b;
+
+               BeanWithTypeName init() {
+                       a = 123;
+                       b = "foo";
+                       return this;
+               }
+       }
+
+       @Bean(beanDictionary={B.class})
+       public static class BeanWithPropertiesWithTypeNames {
+               public B b1;
+               public Object b2;
+
+               BeanWithPropertiesWithTypeNames init() {
+                       b1 = new B().init();
+                       b2 = new B().init();
+                       return this;
+               }
+       }
+
+       @Bean(beanDictionary={B.class})
+       public static class BeanWithPropertiesWithArrayTypeNames {
+               public B[] b1;
+               public Object[] b2;
+               public Object[] b3;
+
+               BeanWithPropertiesWithArrayTypeNames init() {
+                       b1 = new B[]{new B().init()};
+                       b2 = new B[]{new B().init()};
+                       b3 = new Object[]{new B().init()};
+                       return this;
+               }
+       }
+
+       @Bean(beanDictionary={B.class})
+       public static class BeanWithPropertiesWith2dArrayTypeNames {
+               public B[][] b1;
+               public Object[][] b2;
+               public Object[][] b3;
+
+               BeanWithPropertiesWith2dArrayTypeNames init() {
+                       b1 = new B[][]{{new B().init()}};
+                       b2 = new B[][]{{new B().init()}};
+                       b3 = new Object[][]{{new B().init()}};
+                       return this;
+               }
+       }
+
+       @Bean(beanDictionary={B.class})
+       public static class BeanWithPropertiesWithMapTypeNames {
+               public Map<String,B> b1;
+               public Map<String,Object> b2;
+
+               BeanWithPropertiesWithMapTypeNames init() {
+                       b1 = new HashMap<String,B>();
+                       b1.put("k1", new B().init());
+                       b2 = new HashMap<String,Object>();
+                       b2.put("k2", new B().init());
+                       return this;
+               }
+       }
+
+       @Bean(typeName="B")
+       public static class B {
+               public String b;
+
+               B init() {
+                       b = "foo";
+                       return this;
+               }
+       }
+
+       public static class BeanWithChildTypeNames {
+               public BeanX a;
+               @BeanProperty(beanDictionary=BeanX.class)
+               public Object b;
+               public BeanX[] c;
+               @BeanProperty(beanDictionary=BeanX.class)
+               public Object[] d;
+               BeanWithChildTypeNames init() {
+                       a = new BeanX().init();
+                       b = new BeanX().init();
+                       c = new BeanX[]{new BeanX().init()};
+                       d = new Object[]{new BeanX().init()};
+                       return this;
+               }
+       }
+
+       public static class BeanWithChildName {
+               @Xml(childName = "X")
+               public String[] a;
+               @Xml(childName = "Y")
+               public int[] b;
+               BeanWithChildName init() {
+                       a = new String[] { "foo", "bar" };
+                       b = new int[] { 123, 456 };
+                       return this;
+               }
+       }
+
+       public static class BeanWithXmlFormatAttrProperty {
+               @Xml(format=XmlFormat.ATTR)
+               public String a;
+               @Xml(format=XmlFormat.ATTR)
+               public int b;
+               BeanWithXmlFormatAttrProperty init() {
+                       a = "foo";
+                       b = 123;
+                       return this;
+               }
+       }
+
+       @Xml(format=XmlFormat.ATTRS)
+       public static class BeanWithXmlFormatAttrs {
+               public String a;
+               public int b;
+               BeanWithXmlFormatAttrs init() {
+                       a = "foo";
+                       b = 123;
+                       return this;
+               }
+       }
+
+       @Xml(format=XmlFormat.ATTRS)
+       public static class BeanWithXmlFormatElementProperty {
+               public String a;
+               @Xml(format=XmlFormat.ELEMENT)
+               public int b;
+               BeanWithXmlFormatElementProperty init() {
+                       a = "foo";
+                       b = 123;
+                       return this;
+               }
+       }
+
+       public static class BeanWithXmlFormatAttrsProperty {
+               @Xml(format=XmlFormat.ATTRS)
+               public Map<String,Object> a;
+               @Xml(format=XmlFormat.ATTR)
+               public int b;
+               BeanWithXmlFormatAttrsProperty init() {
+                       a = new ObjectMap().append("k1", "foo").append("k2", 
123);
+                       b = 456;
+                       return this;
+               }
+       }
+
+       public static class BeanWithXmlFormatCollapsedProperty {
+               @Xml(childName="A",format=XmlFormat.COLLAPSED)
+               public String[] a;
+               @Xml(childName="B",format=XmlFormat.COLLAPSED)
+               public int[] b;
+               BeanWithXmlFormatCollapsedProperty init() {
+                       a = new String[]{"foo","bar"};
+                       b = new int[]{123,456};
+                       return this;
+               }
+       }
+
+       public static class BeanWithXmlFormatTextProperty {
+               @Xml(format=XmlFormat.ATTR)
+               public String a;
+               @Xml(format=XmlFormat.TEXT)
+               public String b;
+               BeanWithXmlFormatTextProperty init() {
+                       a = "foo";
+                       b = "bar";
+                       return this;
+               }
+       }
+
+       public static class BeanWithXmlFormatXmlTextProperty {
+               @Xml(format=XmlFormat.ATTR)
+               public String a;
+               @Xml(format=XmlFormat.XMLTEXT)
+               public String b;
+               BeanWithXmlFormatXmlTextProperty init() {
+                       a = "foo";
+                       b = "bar<b>baz</b>qux";
+                       return this;
+               }
+       }
+
+       public static class BeanWithXmlFormatElementsPropertyCollection {
+               @Xml(format=XmlFormat.ATTR)
+               public String a;
+               @Xml(format=XmlFormat.ELEMENTS)
+               public Object[] b;
+               BeanWithXmlFormatElementsPropertyCollection init() {
+                       a = "foo";
+                       b = new Object[]{"bar","baz",123,true,null};
+                       return this;
+               }
+       }
+
+       public static class BeanWithMixedContent {
+               @Xml(format=XmlFormat.MIXED)
+               @BeanProperty(beanDictionary={BeanXSimple.class, 
BeanYSimple.class})
+               public Object[] a;
+               BeanWithMixedContent init() {
+                       a = new Object[]{
+                               "foo",
+                               new BeanXSimple().init(),
+                               "bar",
+                               new BeanYSimple().init(),
+                               "baz"
+                       };
+                       return this;
+               }
+       }
+
+       @Bean(typeName="X")
+       public static class BeanX {
+               public String fx;
+               BeanX init() {
+                       fx = "fx1";
+                       return this;
+               }
+       }
+
+       @Bean(typeName="X")
+       public static class BeanXSimple {
+               @Xml(format=XmlFormat.ATTR)
+               public String fx;
+               BeanXSimple init() {
+                       fx = "fx1";
+                       return this;
+               }
+       }
+
+       @Bean(typeName="Y")
+       public static class BeanY {
+               public String fy;
+               BeanY init() {
+                       fy = "fy1";
+                       return this;
+               }
+       }
+
+       @Bean(typeName="Y")
+       public static class BeanYSimple {
+               @Xml(format=XmlFormat.ATTR)
+               public String fy;
+               BeanYSimple init() {
+                       fy = "fy1";
+                       return this;
+               }
+       }
+
+       public static class BeanWithSpecialCharacters {
+               public String a;
+
+               BeanWithSpecialCharacters init() {
+                       a = "\n\b\f\t";
+                       return this;
+               }
+       }
+
+       @Bean(typeName="$#!")
+       public static class BeanWithSpecialCharacters2 {
+
+               @BeanProperty(name="*()")
+               public String a;
+
+               BeanWithSpecialCharacters2 init() {
+                       a = "\n\b\f\t";
+                       return this;
+               }
+       }
+
+       public static class BeanWithNullProperties {
+               public String a;
+               public String[] b;
+       }
+
+       @Bean(beanDictionary={A.class})
+       public static class BeanWithAbstractFields {
+               public A a;
+               public IA ia;
+               public AA aa;
+               public Object o;
+
+               BeanWithAbstractFields init() {
+                       ia = new A().init();
+                       aa = new A().init();
+                       a = new A().init();
+                       o = new A().init();
+                       return this;
+               }
+       }
+
+       @Bean(beanDictionary={A.class})
+       public static class BeanWithAbstractArrayFields {
+               public A[] a;
+               public IA[] ia1, ia2;
+               public AA[] aa1, aa2;
+               public Object[] o1, o2;
+
+               BeanWithAbstractArrayFields init() {
+                       a = new A[]{new A().init()};
+                       ia1 = new A[]{new A().init()};
+                       aa1 = new A[]{new A().init()};
+                       o1 = new A[]{new A().init()};
+                       ia2 = new IA[]{new A().init()};
+                       aa2 = new AA[]{new A().init()};
+                       o2 = new Object[]{new A().init()};
+                       return this;
+               }
+       }
+
+       @Bean(beanDictionary={A.class})
+       public static class BeanWithAbstractMapFields {
+               public Map<String,A> a;
+               public Map<String,AA> b;
+               public Map<String,Object> c;
+
+               BeanWithAbstractMapFields init() {
+                       a = new HashMap<String,A>();
+                       b = new HashMap<String,AA>();
+                       c = new HashMap<String,Object>();
+                       a.put("k1", new A().init());
+                       b.put("k2", new A().init());
+                       c.put("k3", new A().init());
+                       return this;
+               }
+       }
+
+       @Bean(beanDictionary={A.class})
+       public static class BeanWithAbstractMapArrayFields {
+               public Map<String,A[]> a;
+               public Map<String,IA[]> ia;
+               public Map<String,AA[]> aa;
+               public Map<String,Object[]> o;
+
+               BeanWithAbstractMapArrayFields init() {
+                       a = new LinkedHashMap<String,A[]>();
+                       ia = new LinkedHashMap<String,IA[]>();
+                       aa = new LinkedHashMap<String,AA[]>();
+                       o = new LinkedHashMap<String,Object[]>();
+                       a.put("a1", new A[]{new A().init()});
+                       ia.put("ia1", new A[]{new A().init()});
+                       ia.put("ia2", new IA[]{new A().init()});
+                       aa.put("aa1", new A[]{new A().init()});
+                       aa.put("aa2", new AA[]{new A().init()});
+                       o.put("o1", new A[]{new A().init()});
+                       o.put("o2", new Object[]{new A().init()});
+                       return this;
+               }
+       }
+
+       public static interface IA {
+               public String getA();
+               public void setA(String a);
+       }
+
+       public static abstract class AA implements IA {}
+
+       @Bean(typeName="A")
+       public static class A extends AA {
+               private String a;
+
+               @Override
+               public String getA() {
+                       return a;
+               }
+
+               @Override
+               public void setA(String a) {
+                       this.a = a;
+               }
+
+               A init() {
+                       this.a = "foo";
+                       return this;
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java 
b/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java
index 7081e83..481cfb7 100755
--- a/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java
@@ -74,11 +74,11 @@ public class CommonParserTest {
                t2.add(new A3("name0","value0"));
                t2.add(new A3("name1","value1"));
                t1.list = t2;
-               String r = XmlSerializer.DEFAULT.serialize(t1);
+               String r = XmlSerializer.DEFAULT_NS.serialize(t1);
                t1 = p.parse(r, A1.class);
                assertEquals("value1", t1.list.get(1).value);
 
-               r = XmlSerializer.DEFAULT.serialize(t1);
+               r = XmlSerializer.DEFAULT_NS.serialize(t1);
                t1 = p.parse(r, A1.class);
                assertEquals("value1", t1.list.get(1).value);
        }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/CommonTest.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/test/java/org/apache/juneau/xml/CommonTest.java 
b/juneau-core/src/test/java/org/apache/juneau/xml/CommonTest.java
index f6cb225..7ef01fd 100755
--- a/juneau-core/src/test/java/org/apache/juneau/xml/CommonTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/xml/CommonTest.java
@@ -38,13 +38,13 @@ public class CommonTest {
        
//====================================================================================================
        @Test
        public void testTrimNullsFromBeans() throws Exception {
-               XmlSerializer s = new XmlSerializer.SimpleSq();
+               XmlSerializer s = new XmlSerializer.Sq();
                XmlParser p = new XmlParser();
                A t1 = A.create(), t2;
 
                s.setProperty(SERIALIZER_trimNullProperties, false);
                String r = s.serialize(t1);
-               assertEquals("<object><s1 nil='true'/><s2>s2</s2></object>", r);
+               assertEquals("<object><s1 _type='null'/><s2>s2</s2></object>", 
r);
                t2 = p.parse(r, A.class);
                assertEqualObjects(t1, t2);
 
@@ -70,20 +70,20 @@ public class CommonTest {
        
//====================================================================================================
        @Test
        public void testTrimEmptyMaps() throws Exception {
-               XmlSerializer s = new XmlSerializer.SimpleSq();
+               XmlSerializer s = new XmlSerializer.Sq();
                XmlParser p = XmlParser.DEFAULT;
                B t1 = B.create(), t2;
                String r;
 
                s.setProperty(SERIALIZER_trimEmptyMaps, false);
                r = s.serialize(t1);
-               assertEquals("<object><f1/><f2><f2a 
nil='true'/><f2b><s2>s2</s2></f2b></f2></object>", r);
+               assertEquals("<object><f1/><f2><f2a 
_type='null'/><f2b><s2>s2</s2></f2b></f2></object>", r);
                t2 = p.parse(r, B.class);
                assertEqualObjects(t1, t2);
 
                s.setProperty(SERIALIZER_trimEmptyMaps, true);
                r = s.serialize(t1);
-               assertEquals("<object><f2><f2a 
nil='true'/><f2b><s2>s2</s2></f2b></f2></object>", r);
+               assertEquals("<object><f2><f2a 
_type='null'/><f2b><s2>s2</s2></f2b></f2></object>", r);
                t2 = p.parse(r, B.class);
                assertNull(t2.f1);
        }
@@ -104,7 +104,7 @@ public class CommonTest {
        
//====================================================================================================
        @Test
        public void testTrimEmptyLists() throws Exception {
-               XmlSerializer s = new XmlSerializer.SimpleSq();
+               XmlSerializer s = new XmlSerializer.Sq();
                XmlParser p = XmlParser.DEFAULT;
                C t1 = C.create(), t2;
                String r;
@@ -138,7 +138,7 @@ public class CommonTest {
        
//====================================================================================================
        @Test
        public void testTrimEmptyArrays() throws Exception {
-               XmlSerializer s = new XmlSerializer.SimpleSq();
+               XmlSerializer s = new XmlSerializer.Sq();
                XmlParser p = XmlParser.DEFAULT;
                D t1 = D.create(), t2;
                String r;
@@ -172,10 +172,19 @@ public class CommonTest {
        
//====================================================================================================
        @Test
        public void testBeanPropertyProperties() throws Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                E1 t = new E1();
                String r = s.serialize(t);
-               assertEquals("<object><x1 
f2='2'><f1>1</f1></x1><x2><f1>1</f1></x2><x3><object 
f2='2'><f1>1</f1></object></x3><x4><object 
f2='2'><f1>1</f1></object></x4><x5><object><f1>1</f1></object></x5><x6><object><f1>1</f1></object></x6></object>",
 r);
+               assertEquals(
+                       "<object>"
+                               +"<x1 f2='2'><f1>1</f1></x1>"
+                               +"<x2><f1>1</f1></x2>"
+                               +"<x3><object f2='2'><f1>1</f1></object></x3>"
+                               +"<x4><object f2='2'><f1>1</f1></object></x4>"
+                               +"<x5><object><f1 
_type='number'>1</f1></object></x5>"
+                               +"<x6><object><f1 
_type='number'>1</f1></object></x6>"
+                       +"</object>",
+                       r);
                TestUtils.validateXml(t);
        }
 
@@ -206,7 +215,7 @@ public class CommonTest {
        
//====================================================================================================
        @Test
        public void testBeanPropertyPropertiesOnListOfBeans() throws Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                List<Test7b> l = new LinkedList<Test7b>();
                Test7b t = new Test7b();
                t.x1.add(new Test7b());
@@ -225,7 +234,7 @@ public class CommonTest {
        
//====================================================================================================
        @Test
        public void testURIAttr() throws Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                XmlParser p = XmlParser.DEFAULT;
 
                G t = new G();
@@ -251,7 +260,7 @@ public class CommonTest {
        
//====================================================================================================
        @Test
        public void testUris() throws Exception {
-               WriterSerializer s = new XmlSerializer.SimpleSq();
+               WriterSerializer s = new XmlSerializer.Sq();
                TestURI t = new TestURI();
                String r;
                String expected;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/CommonXmlTest.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/test/java/org/apache/juneau/xml/CommonXmlTest.java 
b/juneau-core/src/test/java/org/apache/juneau/xml/CommonXmlTest.java
index 848d76a..e2fd383 100755
--- a/juneau-core/src/test/java/org/apache/juneau/xml/CommonXmlTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/xml/CommonXmlTest.java
@@ -31,7 +31,7 @@ public class CommonXmlTest {
        @Test
        public void testBeanUriAnnotation() throws Exception {
                XmlParser p = XmlParser.DEFAULT;
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
 
                A t = new A("http://foo";, 123, "bar");
                String xml = s.serialize(t);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/InvalidXmlBeansTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/test/java/org/apache/juneau/xml/InvalidXmlBeansTest.java 
b/juneau-core/src/test/java/org/apache/juneau/xml/InvalidXmlBeansTest.java
new file mode 100644
index 0000000..1bfec26
--- /dev/null
+++ b/juneau-core/src/test/java/org/apache/juneau/xml/InvalidXmlBeansTest.java
@@ -0,0 +1,230 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
+// * with the License.  You may obtain a copy of the License at                
                                              *
+// *                                                                           
                                              *
+// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
+// *                                                                           
                                              *
+// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
+// * specific language governing permissions and limitations under the 
License.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau.xml;
+
+import static org.junit.Assert.*;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.xml.annotation.*;
+import org.junit.*;
+import org.junit.runner.*;
+import org.junit.runners.*;
+
+/**
+ * Verifies that the correct error messages are displayed when you do 
something wrong with the @Xml annotation.
+ */
+@RunWith(Parameterized.class)
+@SuppressWarnings({"javadoc"})
+public class InvalidXmlBeansTest {
+
+       private static final XmlSerializer
+               s1 = XmlSerializer.DEFAULT_SQ;
+
+       @Parameterized.Parameters
+       public static Collection<Object[]> getParameters() {
+               return Arrays.asList(new Object[][] {
+
+                       {
+                               "BeanWithAttrFormat",
+                               new BeanWithAttrFormat(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithAttrFormat: Invalid format 
specified in @Xml annotation on bean: ATTR.  Must be one of the following: 
DEFAULT,ATTRS,ELEMENTS",
+                       },
+                       {
+                               "BeanWithElementFormat",
+                               new BeanWithElementFormat(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementFormat: Invalid 
format specified in @Xml annotation on bean: ELEMENT.  Must be one of the 
following: DEFAULT,ATTRS,ELEMENTS",
+                       },
+                       {
+                               "BeanWithCollapsedFormat",
+                               new BeanWithCollapsedFormat(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithCollapsedFormat: Invalid 
format specified in @Xml annotation on bean: COLLAPSED.  Must be one of the 
following: DEFAULT,ATTRS,ELEMENTS",
+                       },
+                       {
+                               "BeanWithMixedFormat",
+                               new BeanWithMixedFormat(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMixedFormat: Invalid format 
specified in @Xml annotation on bean: MIXED.  Must be one of the following: 
DEFAULT,ATTRS,ELEMENTS",
+                       },
+                       {
+                               "BeanWithMultipleAttrs",
+                               new BeanWithMultipleAttrs(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMultipleAttrs: Multiple 
instances of ATTRS properties defined on class.  Only one property can be 
designated as such.",
+                       },
+                       {
+                               "BeanWithWrongAttrsType",
+                               new BeanWithWrongAttrsType(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithWrongAttrsType: Invalid type 
for ATTRS property.  Only properties of type Map and bean can be used.",
+                       },
+                       {
+                               "BeanWithMulipleElements",
+                               new BeanWithMulipleElements(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMulipleElements: Multiple 
instances of ELEMENTS properties defined on class.  Only one property can be 
designated as such.",
+                       },
+                       {
+                               "BeanWithWrongElementsType",
+                               new BeanWithWrongElementsType(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithWrongElementsType: Invalid 
type for ELEMENTS property.  Only properties of type Collection and array can 
be used.",
+                       },
+                       {
+                               "BeanWithMulipleMixed",
+                               new BeanWithMulipleMixed(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMulipleMixed: Multiple 
instances of MIXED properties defined on class.  Only one property can be 
designated as such.",
+                       },
+                       {
+                               "BeanWithConflictingChildNames",
+                               new BeanWithConflictingChildNames(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithConflictingChildNames: 
Multiple properties found with the child name 'X'.",
+                       },
+                       {
+                               "BeanWithElementsAndMixed",
+                               new BeanWithElementsAndMixed(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndMixed: ELEMENTS 
and MIXED properties found on the same bean.  Only one property can be 
designated as such.",
+                       },
+                       {
+                               "BeanWithElementsAndElement",
+                               new BeanWithElementsAndElement(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndElement: ELEMENTS 
and ELEMENT properties found on the same bean.  These cannot be mixed.",
+                       },
+                       {
+                               "BeanWithElementsAndDefault",
+                               new BeanWithElementsAndDefault(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndDefault: ELEMENTS 
and ELEMENT properties found on the same bean.  These cannot be mixed.",
+                       },
+                       {
+                               "BeanWithElementsAndCollapsed",
+                               new BeanWithElementsAndCollapsed(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndCollapsed: 
ELEMENTS and COLLAPSED properties found on the same bean.  These cannot be 
mixed.",
+                       },
+                       {
+                               "BeanWithChildAndPropNameConflict",
+                               new BeanWithChildAndPropNameConflict(),
+                               
"org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithChildAndPropNameConflict: 
Child element name conflicts found with another property.",
+                       },
+               });
+       }
+
+       private String label, expected;
+       private Object in;
+
+       public InvalidXmlBeansTest(String label, Object in, String expected) 
throws Exception {
+               this.label = label;
+               this.in = in;
+               this.expected = expected;
+       }
+
+       @Test
+       public void test() {
+               try {
+                       s1.serialize(in);
+                       fail(label + ":  Expected exception didn't occur.");
+               } catch (Exception e) {
+                       assertEquals(label + ":  Wrong error message.", 
expected, e.getLocalizedMessage());
+               }
+       }
+
+       
//--------------------------------------------------------------------------------
+       // Test beans
+       
//--------------------------------------------------------------------------------
+
+       @Xml(format=XmlFormat.ATTR)
+       public static class BeanWithAttrFormat {
+               public int f1;
+       }
+
+       @Xml(format=XmlFormat.ELEMENT)
+       public static class BeanWithElementFormat {
+               public int f1;
+       }
+
+       @Xml(format=XmlFormat.COLLAPSED)
+       public static class BeanWithCollapsedFormat {
+               public int f1;
+       }
+
+       @Xml(format=XmlFormat.MIXED)
+       public static class BeanWithMixedFormat {
+               public int f1;
+       }
+
+       public static class BeanWithMultipleAttrs {
+               @Xml(format=XmlFormat.ATTRS)
+               public ObjectMap f1;
+               @Xml(format=XmlFormat.ATTRS)
+               public ObjectMap f2;
+       }
+
+       public static class BeanWithWrongAttrsType {
+               @Xml(format=XmlFormat.ATTRS)
+               public ObjectList f1;
+       }
+
+       public static class BeanWithMulipleElements {
+               @Xml(format=XmlFormat.ELEMENTS)
+               public ObjectList f1;
+               @Xml(format=XmlFormat.ELEMENTS)
+               public ObjectList f2;
+       }
+
+       public static class BeanWithWrongElementsType {
+               @Xml(format=XmlFormat.ELEMENTS)
+               public ObjectMap f1;
+       }
+
+       public static class BeanWithMulipleMixed {
+               @Xml(format=XmlFormat.MIXED)
+               public ObjectList f1;
+               @Xml(format=XmlFormat.MIXED)
+               public ObjectList f2;
+       }
+
+       public static class BeanWithConflictingChildNames {
+               @Xml(format=XmlFormat.COLLAPSED, childName="X")
+               public ObjectList f1;
+               @Xml(format=XmlFormat.COLLAPSED, childName="X")
+               public ObjectList f2;
+       }
+
+       public static class BeanWithElementsAndMixed {
+               @Xml(format=XmlFormat.ELEMENTS)
+               public ObjectList f1;
+               @Xml(format=XmlFormat.MIXED)
+               public ObjectList f2;
+       }
+
+       public static class BeanWithElementsAndElement {
+               @Xml(format=XmlFormat.ELEMENTS)
+               public ObjectList f1;
+               @Xml(format=XmlFormat.ELEMENT)
+               public ObjectList f2;
+       }
+
+       public static class BeanWithElementsAndDefault {
+               @Xml(format=XmlFormat.ELEMENTS)
+               public ObjectList f1;
+               public ObjectList f2;
+       }
+
+       public static class BeanWithElementsAndCollapsed {
+               @Xml(format=XmlFormat.ELEMENTS)
+               public ObjectList f1;
+               @Xml(format=XmlFormat.COLLAPSED)
+               public ObjectList f2;
+       }
+
+       public static class BeanWithChildAndPropNameConflict {
+               @Xml(format=XmlFormat.COLLAPSED, childName="f2")
+               public ObjectList f1;
+               public ObjectList f2;
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java 
b/juneau-core/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java
index c7d1417..1baf835 100755
--- a/juneau-core/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java
@@ -19,7 +19,6 @@ import static org.junit.Assert.*;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.serializer.*;
 import org.apache.juneau.xml.annotation.*;
 import org.junit.*;
 
@@ -31,7 +30,7 @@ public class XmlCollapsedTest {
        
//====================================================================================================
        @Test
        public void testBasic() throws Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                XmlParser p = XmlParser.DEFAULT;
                A t = new A();
 
@@ -71,7 +70,7 @@ public class XmlCollapsedTest {
        
//====================================================================================================
        @Test
        public void testUninitializedFields() throws Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                XmlParser p = XmlParser.DEFAULT;
                B t = new B();
 
@@ -111,7 +110,7 @@ public class XmlCollapsedTest {
        
//====================================================================================================
        @Test
        public void testInitializedFields() throws Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                XmlParser p = XmlParser.DEFAULT;
                C t = new C();
 
@@ -158,7 +157,7 @@ public class XmlCollapsedTest {
        @Test
        @SuppressWarnings("synthetic-access")
        public void testGetters() throws Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                XmlParser p = XmlParser.DEFAULT;
                D t = new D();
 
@@ -219,7 +218,7 @@ public class XmlCollapsedTest {
        @Test
        @SuppressWarnings("synthetic-access")
        public void testNullConstructibleCollectionFields() throws Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                XmlParser p = XmlParser.DEFAULT;
                E t = new E();
 
@@ -265,7 +264,7 @@ public class XmlCollapsedTest {
        
//====================================================================================================
        @Test
        public void testElementNameOnElementClass() throws Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                XmlParser p = XmlParser.DEFAULT;
                Object t1 = FA.newInstance(), t2;
                String r;
@@ -282,14 +281,6 @@ public class XmlCollapsedTest {
                t2 = p.parse(r, FB.class);
                assertEqualObjects(t1, t2);
                validateXml(t1, s);
-
-               t1 = FC.newInstance();
-               try {
-                       r = s.serialize(t1);
-                       fail("Exception expected.");
-               } catch (SerializeException e) {
-                       
assertEquals("org.apache.juneau.xml.XmlCollapsedTest$FC: Multiple properties 
found with the name 'xf1'.", e.getLocalizedMessage());
-               }
        }
 
        public static class FA {
@@ -320,25 +311,10 @@ public class XmlCollapsedTest {
                }
        }
 
-       // Should cause name collision.
-       public static class FC {
-
-               @Xml(format=COLLAPSED)
-               public List<F1> f1;
-
-               @Xml(format=COLLAPSED)
-               public F1[] f2;
-
-               public static FC newInstance() {
-                       FC t = new FC();
-                       return t;
-               }
-       }
-
        @Bean(typeName="xf1")
        public static class F1 {
 
-               @Xml(format=CONTENT)
+               @Xml(format=TEXT)
                public String text;
 
                public static F1 newInstance(String text) {
@@ -355,7 +331,7 @@ public class XmlCollapsedTest {
        
//====================================================================================================
        @Test
        public void testElementNameOnElementClassOverridden() throws Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                XmlParser p = XmlParser.DEFAULT;
                G t = G.newInstance(), t2;
 
@@ -389,7 +365,7 @@ public class XmlCollapsedTest {
        
//====================================================================================================
        @Test
        public void testElementNameOnCollectionClass() throws Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                XmlParser p = XmlParser.DEFAULT;
                H t = H.newInstance(), t2;
 
@@ -428,7 +404,7 @@ public class XmlCollapsedTest {
        
//====================================================================================================
        @Test
        public void testElementNameOnCollectionClassOverridden() throws 
Exception {
-               XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ;
+               XmlSerializer s = XmlSerializer.DEFAULT_SQ;
                XmlParser p = XmlParser.DEFAULT;
                G t = G.newInstance(), t2;
 

Reply via email to