juneau-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jamesbog...@apache.org
Subject [6/8] incubator-juneau git commit: Modification to UON spec. Remove bean subtype support.
Date Wed, 15 Feb 2017 20:50:45 GMT
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UonTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UonTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UonTest.java
index 9b51a35..37f2376 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UonTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UonTest.java
@@ -35,11 +35,11 @@ public class CommonParser_UonTest {
 		Map m = null;
 		String in;
 
-		in = "$o(a=$n(1))";
+		in = "(a=1)";
 		m = (Map)p.parse(in, Object.class);
 		assertEquals(1, m.get("a"));
 
-		in = "$o(a=$n(1),b=foo+bar)";
+		in = "(a=1,b='foo+bar')";
 		m = (Map)p.parse(in, Object.class);
 		assertEquals(1, m.get("a"));
 		assertEquals("foo+bar", m.get("b"));
@@ -47,19 +47,19 @@ public class CommonParser_UonTest {
 		assertEquals(1, m.get("a"));
 		assertEquals("foo bar", m.get("b"));
 
-		in = "$o(a=$n(1),b=foo+bar,c=$b(false))";
+		in = "(a=1,b='foo+bar',c=false)";
 		m = (Map)pe.parse(in, Object.class);
 		assertEquals(1, m.get("a"));
 		assertEquals("foo bar", m.get("b"));
 		assertEquals(false, m.get("c"));
 
-		in = "$o(a=$n(1),b=foo%20bar,c=$b(false))";
+		in = "(a=1,b='foo%20bar',c=false)";
 		m = (Map)pe.parse(in, Object.class);
 		assertEquals(1, m.get("a"));
 		assertEquals("foo bar", m.get("b"));
 		assertEquals(false, m.get("c"));
 
-		ObjectList jl = (ObjectList)p.parse("$a($o(attribute=value),$o(attribute='value'))", Object.class);
+		ObjectList jl = (ObjectList)p.parse("@((attribute=value),(attribute=~'value~'))", Object.class);
 		assertEquals("value", jl.getObjectMap(0).getString("attribute"));
 		assertEquals("'value'", jl.getObjectMap(1).getString("attribute"));
 
@@ -127,7 +127,7 @@ public class CommonParser_UonTest {
 
 		ReaderParser p = UonParser.DEFAULT;
 
-		String json = "(ints=(1,2,3),beans=((a=1,b=2)))";
+		String json = "(ints=@(1,2,3),beans=@((a=1,b=2)))";
 		C t = p.parse(json, C.class);
 		assertEquals(t.getInts().size(), 3);
 		assertEquals(t.getBeans().get(0).b, 2);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
index 2690017..e026be1 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java
@@ -36,32 +36,32 @@ public class CommonParser_UrlEncodingTest {
 		Map m = null;
 		String in;
 
-		in = "a=$n(1)";
+		in = "a=1";
 		m = (Map)p.parse(in, Object.class);
 		assertEquals(1, m.get("a"));
 
-		in = "a=$n(1)&b=foo+bar";
+		in = "a=1&b='foo+bar'";
 		m = (Map)p.parse(in, Object.class);
 		assertEquals(1, m.get("a"));
 		assertEquals("foo bar", m.get("b"));
 
-		in = "a=$n(1)&b=foo+bar&c=$b(false)";
+		in = "a=1&b='foo+bar'&c=false";
 		m = (Map)p.parse(in, Object.class);
 		assertEquals(1, m.get("a"));
 		assertEquals("foo bar", m.get("b"));
 		assertEquals(false, m.get("c"));
 
-		in = "a=$n(1)&b=foo%20bar&c=$b(false)";
+		in = "a=1&b='foo%20bar'&c=false";
 		m = (Map)p.parse(in, Object.class);
 		assertEquals(1, m.get("a"));
 		assertEquals("foo bar", m.get("b"));
 		assertEquals(false, m.get("c"));
 
-		ObjectMap jm = (ObjectMap)p.parse("x=$a($o(attribute=value),$o(attribute='value'))", Object.class);
+		ObjectMap jm = (ObjectMap)p.parse("x=@((attribute=value),(attribute=~'value~'))", Object.class);
 		assertEquals("value", jm.getObjectList("x").getObjectMap(0).getString("attribute"));
 		assertEquals("'value'", jm.getObjectList("x").getObjectMap(1).getString("attribute"));
 
-		ObjectList jl = (ObjectList)p.parse("_value=$a($o(attribute=value),$o(attribute='value'))", Object.class);
+		ObjectList jl = (ObjectList)p.parse("_value=@((attribute=value),(attribute=~'value~'))", Object.class);
 		assertEquals("value", jl.getObjectMap(0).getString("attribute"));
 		assertEquals("'value'", jl.getObjectMap(1).getString("attribute"));
 
@@ -129,7 +129,7 @@ public class CommonParser_UrlEncodingTest {
 
 		ReaderParser p = UrlEncodingParser.DEFAULT;
 
-		String json = "ints=(1,2,3)&beans=((a=1,b=2))";
+		String json = "ints=@(1,2,3)&beans=@((a=1,b=2))";
 		C t = p.parse(json, C.class);
 		assertEquals(t.getInts().size(), 3);
 		assertEquals(t.getBeans().get(0).b, 2);
@@ -170,7 +170,7 @@ public class CommonParser_UrlEncodingTest {
 
 	@Test
 	public void testCollections() throws Exception {
-		WriterSerializer s = new UrlEncodingSerializer().setSimpleMode(true);
+		WriterSerializer s = new UrlEncodingSerializer();
 		ReaderParser p = new UrlEncodingParser();
 
 		List l = new ObjectList("foo","bar");

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UonTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UonTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UonTest.java
index 3a819ee..00643d0 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UonTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UonTest.java
@@ -40,13 +40,13 @@ public class Common_UonTest {
 
 		s.setTrimNullProperties(false);
 		String r = s.serialize(t1);
-		assertEquals("$o(s1=%00,s2=s2)", r);
+		assertEquals("(s1=null,s2=s2)", r);
 		t2 = pe.parse(r, A.class);
 		assertEqualObjects(t1, t2);
 
 		s.setTrimNullProperties(true);
 		r = s.serialize(t1);
-		assertEquals("$o(s2=s2)", r);
+		assertEquals("(s2=s2)", r);
 		t2 = p.parse(r, A.class);
 		assertEqualObjects(t1, t2);
 	}
@@ -66,19 +66,19 @@ public class Common_UonTest {
 	//====================================================================================================
 	@Test
 	public void testTrimEmptyMaps() throws Exception {
-		UonSerializer s = UonSerializer.DEFAULT_SIMPLE_ENCODING.clone();
+		UonSerializer s = UonSerializer.DEFAULT_ENCODING.clone();
 		B t1 = B.create(), t2;
 		String r;
 
 		s.setTrimEmptyMaps(false);
 		r = s.serialize(t1);
-		assertEquals("(f1=(),f2=(f2a=%00,f2b=(s2=s2)))", r);
+		assertEquals("(f1=(),f2=(f2a=null,f2b=(s2=s2)))", r);
 		t2 = pe.parse(r, B.class);
 		assertEqualObjects(t1, t2);
 
 		s.setTrimEmptyMaps(true);
 		r = s.serialize(t1);
-		assertEquals("(f2=(f2a=%00,f2b=(s2=s2)))", r);
+		assertEquals("(f2=(f2a=null,f2b=(s2=s2)))", r);
 		t2 = pe.parse(r, B.class);
 		assertNull(t2.f1);
 	}
@@ -105,13 +105,13 @@ public class Common_UonTest {
 
 		s.setTrimEmptyCollections(false);
 		r = s.serialize(t1);
-		assertEquals("$o(f1=$a(),f2=$a(%00,$o(s2=s2)))", r);
+		assertEquals("(f1=@(),f2=@(null,(s2=s2)))", r);
 		t2 = pe.parse(r, C.class);
 		assertEqualObjects(t1, t2);
 
 		s.setTrimEmptyCollections(true);
 		r = s.serialize(t1);
-		assertEquals("$o(f2=$a(%00,$o(s2=s2)))", r);
+		assertEquals("(f2=@(null,(s2=s2)))", r);
 		t2 = pe.parse(r, C.class);
 		assertNull(t2.f1);
 	}
@@ -138,13 +138,13 @@ public class Common_UonTest {
 
 		s.setTrimEmptyCollections(false);
 		r = s.serialize(t1);
-		assertEquals("$o(f1=$a(),f2=$a(%00,$o(s2=s2)))", r);
+		assertEquals("(f1=@(),f2=@(null,(s2=s2)))", r);
 		t2 = pe.parse(r, D.class);
 		assertEqualObjects(t1, t2);
 
 		s.setTrimEmptyCollections(true);
 		r = s.serialize(t1);
-		assertEquals("$o(f2=$a(%00,$o(s2=s2)))", r);
+		assertEquals("(f2=@(null,(s2=s2)))", r);
 		t2 = pe.parse(r, D.class);
 		assertNull(t2.f1);
 	}
@@ -166,11 +166,8 @@ public class Common_UonTest {
 	@Test
 	public void testBeanPropertyProperies() throws Exception {
 		UonSerializer s = UonSerializer.DEFAULT;
-		UonSerializer ss = UonSerializer.DEFAULT_SIMPLE;
-		String ue = ss.serialize(new E1());
-		assertEquals("(x1=(f1=1),x2=(f1=1),x3=((f1=1)),x4=((f1=1)),x5=((f1=1)),x6=((f1=1)))", ue);
-		ue = s.serialize(new E1());
-		assertEquals("$o(x1=$o(f1=$n(1)),x2=$o(f1=$n(1)),x3=$a($o(f1=$n(1))),x4=$a($o(f1=$n(1))),x5=$a($o(f1=$n(1))),x6=$a($o(f1=$n(1))))", ue);
+		String ue = s.serialize(new E1());
+		assertEquals("(x1=(f1=1),x2=(f1=1),x3=@((f1=1)),x4=@((f1=1)),x5=@((f1=1)),x6=@((f1=1)))", ue);
 	}
 
 	public static class E1 {
@@ -204,7 +201,7 @@ public class Common_UonTest {
 		t.x1.add(new F());
 		l.add(t);
 		String xml = s.serialize(l);
-		assertEquals("$a($o(x1=$a($o(x2=$n(2))),x2=$n(2)))", xml);
+		assertEquals("@((x1=@((x2=2)),x2=2))", xml);
 	}
 
 	public static class F {
@@ -251,7 +248,7 @@ public class Common_UonTest {
 		s.setRelativeUriBase(null);
 		r = s.serialize(t);
 		expected = ""
-			+"$o("
+			+"("
 			+"f0=f0/x0,"
 			+"f1=f1/x1,"
 			+"f2=/f2/x2,"
@@ -263,10 +260,10 @@ public class Common_UonTest {
 			+"f8=f8/x8,"
 			+"f9=f9/x9,"
 			+"fa=http://www.apache.org/fa/xa#MY_LABEL,"
-			+"fb=http://www.apache.org/fb/xb?label~=MY_LABEL&foo~=bar,"
-			+"fc=http://www.apache.org/fc/xc?foo~=bar&label~=MY_LABEL,"
-			+"fd=http://www.apache.org/fd/xd?label2~=MY_LABEL&foo~=bar,"
-			+"fe=http://www.apache.org/fe/xe?foo~=bar&label2~=MY_LABEL"
+			+"fb='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar',"
+			+"fc='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL',"
+			+"fd='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar',"
+			+"fe='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'"
 			+")";
 		assertEquals(expected, r);
 
@@ -277,7 +274,7 @@ public class Common_UonTest {
 		s.setRelativeUriBase("/cr");
 		r = s.serialize(t);
 		expected = ""
-			+"$o("
+			+"("
 			+"f0=/cr/f0/x0,"
 			+"f1=/cr/f1/x1,"
 			+"f2=/f2/x2,"
@@ -289,10 +286,10 @@ public class Common_UonTest {
 			+"f8=/cr/f8/x8,"
 			+"f9=/cr/f9/x9,"
 			+"fa=http://www.apache.org/fa/xa#MY_LABEL,"
-			+"fb=http://www.apache.org/fb/xb?label~=MY_LABEL&foo~=bar,"
-			+"fc=http://www.apache.org/fc/xc?foo~=bar&label~=MY_LABEL,"
-			+"fd=http://www.apache.org/fd/xd?label2~=MY_LABEL&foo~=bar,"
-			+"fe=http://www.apache.org/fe/xe?foo~=bar&label2~=MY_LABEL"
+			+"fb='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar',"
+			+"fc='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL',"
+			+"fd='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar',"
+			+"fe='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'"
 			+")";
 		assertEquals(expected, r);
 
@@ -303,7 +300,7 @@ public class Common_UonTest {
 		s.setRelativeUriBase("/");
 		r = s.serialize(t);
 		expected = ""
-			+"$o("
+			+"("
 			+"f0=/f0/x0,"
 			+"f1=/f1/x1,"
 			+"f2=/f2/x2,"
@@ -315,10 +312,10 @@ public class Common_UonTest {
 			+"f8=/f8/x8,"
 			+"f9=/f9/x9,"
 			+"fa=http://www.apache.org/fa/xa#MY_LABEL,"
-			+"fb=http://www.apache.org/fb/xb?label~=MY_LABEL&foo~=bar,"
-			+"fc=http://www.apache.org/fc/xc?foo~=bar&label~=MY_LABEL,"
-			+"fd=http://www.apache.org/fd/xd?label2~=MY_LABEL&foo~=bar,"
-			+"fe=http://www.apache.org/fe/xe?foo~=bar&label2~=MY_LABEL"
+			+"fb='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar',"
+			+"fc='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL',"
+			+"fd='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar',"
+			+"fe='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'"
 			+")";
 		assertEquals(expected, r);
 
@@ -327,7 +324,7 @@ public class Common_UonTest {
 		s.setAbsolutePathUriBase("http://foo");
 		r = s.serialize(t);
 		expected = ""
-			+"$o("
+			+"("
 			+"f0=f0/x0,"
 			+"f1=f1/x1,"
 			+"f2=http://foo/f2/x2,"
@@ -339,10 +336,10 @@ public class Common_UonTest {
 			+"f8=f8/x8,"
 			+"f9=f9/x9,"
 			+"fa=http://www.apache.org/fa/xa#MY_LABEL,"
-			+"fb=http://www.apache.org/fb/xb?label~=MY_LABEL&foo~=bar,"
-			+"fc=http://www.apache.org/fc/xc?foo~=bar&label~=MY_LABEL,"
-			+"fd=http://www.apache.org/fd/xd?label2~=MY_LABEL&foo~=bar,"
-			+"fe=http://www.apache.org/fe/xe?foo~=bar&label2~=MY_LABEL"
+			+"fb='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar',"
+			+"fc='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL',"
+			+"fd='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar',"
+			+"fe='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'"
 			+")";
 		assertEquals(expected, r);
 
@@ -353,7 +350,7 @@ public class Common_UonTest {
 		s.setAbsolutePathUriBase("");  // Same as null.
 		r = s.serialize(t);
 		expected = ""
-			+"$o("
+			+"("
 			+"f0=f0/x0,"
 			+"f1=f1/x1,"
 			+"f2=/f2/x2,"
@@ -365,10 +362,10 @@ public class Common_UonTest {
 			+"f8=f8/x8,"
 			+"f9=f9/x9,"
 			+"fa=http://www.apache.org/fa/xa#MY_LABEL,"
-			+"fb=http://www.apache.org/fb/xb?label~=MY_LABEL&foo~=bar,"
-			+"fc=http://www.apache.org/fc/xc?foo~=bar&label~=MY_LABEL,"
-			+"fd=http://www.apache.org/fd/xd?label2~=MY_LABEL&foo~=bar,"
-			+"fe=http://www.apache.org/fe/xe?foo~=bar&label2~=MY_LABEL"
+			+"fb='http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar',"
+			+"fc='http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL',"
+			+"fd='http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar',"
+			+"fe='http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL'"
 			+")";
 		assertEquals(expected, r);
 	}
@@ -380,7 +377,7 @@ public class Common_UonTest {
 	public void testLockedSerializer() throws Exception {
 		UonSerializer s = new UonSerializer().lock();
 		try {
-			s.setSimpleMode(true);
+			s.setUseWhitespace(true);
 			fail("Locked exception not thrown");
 		} catch (LockedException e) {}
 		try {
@@ -430,7 +427,7 @@ public class Common_UonTest {
 		}
 
 		s.setIgnoreRecursions(true);
-		assertEquals("$o(name=foo,r2=$o(name=bar,r3=$o(name=baz)))", s.serialize(r1));
+		assertEquals("(name=foo,r2=(name=bar,r3=(name=baz)))", s.serialize(r1));
 	}
 
 	public static class R1 {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java
index efd9e93..c8f40d3 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/Common_UrlEncodingTest.java
@@ -39,7 +39,7 @@ public class Common_UrlEncodingTest {
 
 		s.setTrimNullProperties(false);
 		String r = s.serialize(t1);
-		assertEquals("s1=%00&s2=s2", r);
+		assertEquals("s1=null&s2=s2", r);
 		t2 = p.parse(r, A.class);
 		assertEqualObjects(t1, t2);
 
@@ -65,19 +65,19 @@ public class Common_UrlEncodingTest {
 	//====================================================================================================
 	@Test
 	public void testTrimEmptyMaps() throws Exception {
-		UrlEncodingSerializer s = UrlEncodingSerializer.DEFAULT_SIMPLE.clone();
+		UrlEncodingSerializer s = UrlEncodingSerializer.DEFAULT.clone();
 		B t1 = B.create(), t2;
 		String r;
 
 		s.setTrimEmptyMaps(false);
 		r = s.serialize(t1);
-		assertEquals("f1=()&f2=(f2a=%00,f2b=(s2=s2))", r);
+		assertEquals("f1=()&f2=(f2a=null,f2b=(s2=s2))", r);
 		t2 = p.parse(r, B.class);
 		assertEqualObjects(t1, t2);
 
 		s.setTrimEmptyMaps(true);
 		r = s.serialize(t1);
-		assertEquals("f2=(f2a=%00,f2b=(s2=s2))", r);
+		assertEquals("f2=(f2a=null,f2b=(s2=s2))", r);
 		t2 = p.parse(r, B.class);
 		assertNull(t2.f1);
 	}
@@ -104,13 +104,13 @@ public class Common_UrlEncodingTest {
 
 		s.setTrimEmptyCollections(false);
 		r = s.serialize(t1);
-		assertEquals("f1=$a()&f2=$a(%00,$o(s2=s2))", r);
+		assertEquals("f1=@()&f2=@(null,(s2=s2))", r);
 		t2 = p.parse(r, C.class);
 		assertEqualObjects(t1, t2);
 
 		s.setTrimEmptyCollections(true);
 		r = s.serialize(t1);
-		assertEquals("f2=$a(%00,$o(s2=s2))", r);
+		assertEquals("f2=@(null,(s2=s2))", r);
 		t2 = p.parse(r, C.class);
 		assertNull(t2.f1);
 	}
@@ -137,13 +137,13 @@ public class Common_UrlEncodingTest {
 
 		s.setTrimEmptyCollections(false);
 		r = s.serialize(t1);
-		assertEquals("f1=$a()&f2=$a(%00,$o(s2=s2))", r);
+		assertEquals("f1=@()&f2=@(null,(s2=s2))", r);
 		t2 = p.parse(r, D.class);
 		assertEqualObjects(t1, t2);
 
 		s.setTrimEmptyCollections(true);
 		r = s.serialize(t1);
-		assertEquals("f2=$a(%00,$o(s2=s2))", r);
+		assertEquals("f2=@(null,(s2=s2))", r);
 		t2 = p.parse(r, D.class);
 		assertNull(t2.f1);
 	}
@@ -165,11 +165,8 @@ public class Common_UrlEncodingTest {
 	@Test
 	public void testBeanPropertyProperies() throws Exception {
 		UrlEncodingSerializer s = UrlEncodingSerializer.DEFAULT;
-		UrlEncodingSerializer ss = UrlEncodingSerializer.DEFAULT_SIMPLE;
-		String ue = ss.serialize(new E1());
-		assertEquals("x1=(f1=1)&x2=(f1=1)&x3=((f1=1))&x4=((f1=1))&x5=((f1=1))&x6=((f1=1))", ue);
-		ue = s.serialize(new E1());
-		assertEquals("x1=$o(f1=$n(1))&x2=$o(f1=$n(1))&x3=$a($o(f1=$n(1)))&x4=$a($o(f1=$n(1)))&x5=$a($o(f1=$n(1)))&x6=$a($o(f1=$n(1)))", ue);
+		String ue = s.serialize(new E1());
+		assertEquals("x1=(f1=1)&x2=(f1=1)&x3=@((f1=1))&x4=@((f1=1))&x5=@((f1=1))&x6=@((f1=1))", ue);
 	}
 
 	public static class E1 {
@@ -204,9 +201,9 @@ public class Common_UrlEncodingTest {
 		l.add(t);
 		ObjectMap m = new ObjectMap().append("t", l);
 		String xml = s.serialize(m);
-		assertEquals("t=$a($o(x1=$a($o(x2=$n(2))),x2=$n(2)))", xml);
+		assertEquals("t=@((x1=@((x2=2)),x2=2))", xml);
 		xml = s.serialize(l);
-		assertEquals("$n(0)=$o(x1=$a($o(x2=$n(2))),x2=$n(2))", xml);
+		assertEquals("0=(x1=@((x2=2)),x2=2)", xml);
 	}
 
 	public static class F {
@@ -264,10 +261,10 @@ public class Common_UrlEncodingTest {
 			+"&f8=f8/x8"
 			+"&f9=f9/x9"
 			+"&fa=http://www.apache.org/fa/xa%23MY_LABEL"
-			+"&fb=http://www.apache.org/fb/xb?label=MY_LABEL%26foo=bar"
-			+"&fc=http://www.apache.org/fc/xc?foo=bar%26label=MY_LABEL"
-			+"&fd=http://www.apache.org/fd/xd?label2=MY_LABEL%26foo=bar"
-			+"&fe=http://www.apache.org/fe/xe?foo=bar%26label2=MY_LABEL";
+			+"&fb='http://www.apache.org/fb/xb?label=MY_LABEL%26foo=bar'"
+			+"&fc='http://www.apache.org/fc/xc?foo=bar%26label=MY_LABEL'"
+			+"&fd='http://www.apache.org/fd/xd?label2=MY_LABEL%26foo=bar'"
+			+"&fe='http://www.apache.org/fe/xe?foo=bar%26label2=MY_LABEL'";
 		assertEquals(expected, r);
 
 		s.setRelativeUriBase("");  // Same as null.
@@ -288,10 +285,10 @@ public class Common_UrlEncodingTest {
 			+"&f8=/cr/f8/x8"
 			+"&f9=/cr/f9/x9"
 			+"&fa=http://www.apache.org/fa/xa%23MY_LABEL"
-			+"&fb=http://www.apache.org/fb/xb?label=MY_LABEL%26foo=bar"
-			+"&fc=http://www.apache.org/fc/xc?foo=bar%26label=MY_LABEL"
-			+"&fd=http://www.apache.org/fd/xd?label2=MY_LABEL%26foo=bar"
-			+"&fe=http://www.apache.org/fe/xe?foo=bar%26label2=MY_LABEL";
+			+"&fb='http://www.apache.org/fb/xb?label=MY_LABEL%26foo=bar'"
+			+"&fc='http://www.apache.org/fc/xc?foo=bar%26label=MY_LABEL'"
+			+"&fd='http://www.apache.org/fd/xd?label2=MY_LABEL%26foo=bar'"
+			+"&fe='http://www.apache.org/fe/xe?foo=bar%26label2=MY_LABEL'";
 		assertEquals(expected, r);
 
 		s.setRelativeUriBase("/cr/");  // Same as above
@@ -312,10 +309,10 @@ public class Common_UrlEncodingTest {
 			+"&f8=/f8/x8"
 			+"&f9=/f9/x9"
 			+"&fa=http://www.apache.org/fa/xa%23MY_LABEL"
-			+"&fb=http://www.apache.org/fb/xb?label=MY_LABEL%26foo=bar"
-			+"&fc=http://www.apache.org/fc/xc?foo=bar%26label=MY_LABEL"
-			+"&fd=http://www.apache.org/fd/xd?label2=MY_LABEL%26foo=bar"
-			+"&fe=http://www.apache.org/fe/xe?foo=bar%26label2=MY_LABEL";
+			+"&fb='http://www.apache.org/fb/xb?label=MY_LABEL%26foo=bar'"
+			+"&fc='http://www.apache.org/fc/xc?foo=bar%26label=MY_LABEL'"
+			+"&fd='http://www.apache.org/fd/xd?label2=MY_LABEL%26foo=bar'"
+			+"&fe='http://www.apache.org/fe/xe?foo=bar%26label2=MY_LABEL'";
 		assertEquals(expected, r);
 
 		s.setRelativeUriBase(null);
@@ -334,10 +331,10 @@ public class Common_UrlEncodingTest {
 			+"&f8=f8/x8"
 			+"&f9=f9/x9"
 			+"&fa=http://www.apache.org/fa/xa%23MY_LABEL"
-			+"&fb=http://www.apache.org/fb/xb?label=MY_LABEL%26foo=bar"
-			+"&fc=http://www.apache.org/fc/xc?foo=bar%26label=MY_LABEL"
-			+"&fd=http://www.apache.org/fd/xd?label2=MY_LABEL%26foo=bar"
-			+"&fe=http://www.apache.org/fe/xe?foo=bar%26label2=MY_LABEL";
+			+"&fb='http://www.apache.org/fb/xb?label=MY_LABEL%26foo=bar'"
+			+"&fc='http://www.apache.org/fc/xc?foo=bar%26label=MY_LABEL'"
+			+"&fd='http://www.apache.org/fd/xd?label2=MY_LABEL%26foo=bar'"
+			+"&fe='http://www.apache.org/fe/xe?foo=bar%26label2=MY_LABEL'";
 		assertEquals(expected, r);
 
 		s.setAbsolutePathUriBase("http://foo/");
@@ -358,10 +355,10 @@ public class Common_UrlEncodingTest {
 			+"&f8=f8/x8"
 			+"&f9=f9/x9"
 			+"&fa=http://www.apache.org/fa/xa%23MY_LABEL"
-			+"&fb=http://www.apache.org/fb/xb?label=MY_LABEL%26foo=bar"
-			+"&fc=http://www.apache.org/fc/xc?foo=bar%26label=MY_LABEL"
-			+"&fd=http://www.apache.org/fd/xd?label2=MY_LABEL%26foo=bar"
-			+"&fe=http://www.apache.org/fe/xe?foo=bar%26label2=MY_LABEL";
+			+"&fb='http://www.apache.org/fb/xb?label=MY_LABEL%26foo=bar'"
+			+"&fc='http://www.apache.org/fc/xc?foo=bar%26label=MY_LABEL'"
+			+"&fd='http://www.apache.org/fd/xd?label2=MY_LABEL%26foo=bar'"
+			+"&fe='http://www.apache.org/fe/xe?foo=bar%26label2=MY_LABEL'";
 		assertEquals(expected, r);
 	}
 
@@ -372,7 +369,7 @@ public class Common_UrlEncodingTest {
 	public void testLockedSerializer() throws Exception {
 		UrlEncodingSerializer s = new UrlEncodingSerializer().lock();
 		try {
-			s.setSimpleMode(true);
+			s.setUseWhitespace(true);
 			fail("Locked exception not thrown");
 		} catch (LockedException e) {}
 		try {
@@ -422,7 +419,7 @@ public class Common_UrlEncodingTest {
 		}
 
 		s.setIgnoreRecursions(true);
-		assertEquals("name=foo&r2=$o(name=bar,r3=$o(name=baz))", s.serialize(r1));
+		assertEquals("name=foo&r2=(name=bar,r3=(name=baz))", s.serialize(r1));
 	}
 
 	public static class R1 {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java
index 375de89..de54711 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonParserTest.java
@@ -40,24 +40,24 @@ public class UonParserTest {
 		assertEquals("a", p.parse(t, String.class));
 		assertEquals("a", p.parse(t, Object.class));
 		assertEquals("a", pe.parse(t, String.class));
-		t = "(a)";
+		t = "'a'";
 		assertEquals("a", p.parse(t, String.class));
 		assertEquals("a", p.parse(t, Object.class));
-		t = "$s(a)";
+		t = " 'a' ";
 		assertEquals("a", p.parse(t, String.class));
 
 		// 2nd level
-		t = "$o(a=a)";
+		t = "(a=a)";
 		assertEquals("a", ((Map)p.parse(t, Map.class)).get("a"));
 		assertEquals("a", ((Map)pe.parse(t, Map.class)).get("a"));
 
-		t = "(a=a)";
+		t = "('a'='a')";
 		assertEquals("a", ((Map)p.parse(t, Map.class)).get("a"));
 		assertEquals("a", ((Map)pe.parse(t, Map.class)).get("a"));
 
 		// Simple map
 		// Top level
-		t = "$o(a=b,c=$n(123),d=$b(false),e=$b(true),f=%00)";
+		t = "(a=b,c=123,d=false,e=true,f=null)";
 		m = p.parse(t, Map.class);
 		assertEquals("b", m.get("a"));
 		assertTrue(m.get("c") instanceof Number);
@@ -76,26 +76,20 @@ public class UonParserTest {
 
 		// null
 		// Top level
-		t = "%00";
-		assertEquals("%00", p.parse(t, Object.class));
+		t = "null";
+		assertNull(p.parse(t, Object.class));
 		assertNull(pe.parse(t, Object.class));
 
 		// 2nd level
-		t = "$o(%00=%00)";
+		t = "(null=null)";
 		m = p.parse(t, Map.class);
-		assertEquals("%00", m.get("%00"));
-		m = pe.parse(t, Map.class);
 		assertTrue(m.containsKey(null));
 		assertNull(m.get(null));
-
-		t = "(%00=%00)";
-		m = p.parse(t, Map.class);
-		assertEquals("%00", m.get("%00"));
 		m = pe.parse(t, Map.class);
 		assertTrue(m.containsKey(null));
 		assertNull(m.get(null));
 
-		t = "(\u0000=\u0000)";
+		t = " ( null = null ) ";
 		m = p.parse(t, Map.class);
 		assertTrue(m.containsKey(null));
 		assertNull(m.get(null));
@@ -104,42 +98,43 @@ public class UonParserTest {
 		assertNull(m.get(null));
 
 		// 3rd level
-		t = "$o(%00=$o(%00=%00))";
+		t = "(null=(null=null))";
 		m = p.parse(t, Map.class);
-		assertEquals("%00", ((Map)m.get("%00")).get("%00"));
+		assertTrue(((Map)m.get(null)).containsKey(null));
+		assertNull(((Map)m.get(null)).get(null));
 		m = pe.parse(t, Map.class);
 		assertTrue(((Map)m.get(null)).containsKey(null));
 		assertNull(((Map)m.get(null)).get(null));
 
 		// Empty array
 		// Top level
-		t = "$a()";
+		t = "@()";
 		List l = (List)p.parse(t, Object.class);
 		assertTrue(l.isEmpty());
-		t = "()";
+		t = " @( ) ";
 		l = p.parse(t, List.class);
 		assertTrue(l.isEmpty());
 
 		// 2nd level in map
-		t = "$o(x=$a())";
+		t = "(x=@())";
 		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
 		m = (Map)p.parse(t, Object.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
-		t = "(x=())";
+		t = " ( x = @( ) )";
 		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
 
 		// Empty 2 dimensional array
-		t = "$a($a())";
+		t = "@(@())";
 		l = (List)p.parse(t, Object.class);
 		assertTrue(l.size() == 1);
 		l = (List)l.get(0);
 		assertTrue(l.isEmpty());
-		t = "(())";
+		t = " @( @( ) ) ";
 		l = p.parse(t, LinkedList.class, List.class);
 		assertTrue(l.size() == 1);
 		l = (List)l.get(0);
@@ -147,31 +142,31 @@ public class UonParserTest {
 
 		// Array containing empty string
 		// Top level
-		t = "$a(())";
+		t = "@('')";
 		l = (List)p.parse(t, Object.class);
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
-		t = "(())";
+		t = " @( '' ) ";
 		l = p.parse(t, List.class, String.class);
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
 
 		// 2nd level
-		t = "$o(()=$a(()))";
+		t = "(''=@(''))";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("", ((List)m.get("")).get(0));
-		t = "(=(()))";
+		t = " ( '' = @( '' ) ) ";
 		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertEquals("", ((List)m.get("")).get(0));
 
 		// Array containing 3 empty strings
-		t = "$a(,,)";
+		t = "@('','','')";
 		l = (List)p.parse(t, Object.class);
 		assertTrue(l.size() == 3);
 		assertEquals("", l.get(0));
 		assertEquals("", l.get(1));
 		assertEquals("", l.get(2));
-		t = "(,,)";
+		t = " @( '' , '' , '' ) ";
 		l = p.parse(t, List.class, Object.class);
 		assertTrue(l.size() == 3);
 		assertEquals("", l.get(0));
@@ -180,18 +175,18 @@ public class UonParserTest {
 
 		// String containing \u0000
 		// Top level
-		t = "$s(\u0000)";
+		t = "'\u0000'";
 		assertEquals("\u0000", p.parse(t, Object.class));
-		t = "(\u0000)";
+		t = " '\u0000' ";
 		assertEquals("\u0000", p.parse(t, String.class));
 		assertEquals("\u0000", p.parse(t, Object.class));
 
 		// 2nd level
-		t = "$o((\u0000)=(\u0000))";
+		t = "('\u0000'='\u0000')";
 		m = (Map)p.parse(t, Object.class);
 		assertTrue(m.size() == 1);
 		assertEquals("\u0000", m.get("\u0000"));
-		t = "((\u0000)=(\u0000))";
+		t = " ( '\u0000' = '\u0000' ) ";
 		m = p.parse(t, HashMap.class, String.class, String.class);
 		assertTrue(m.size() == 1);
 		assertEquals("\u0000", m.get("\u0000"));
@@ -201,29 +196,26 @@ public class UonParserTest {
 
 		// Boolean
 		// Top level
-		t = "$b(false)";
+		t = "false";
 		Boolean b = (Boolean)p.parse(t, Object.class);
 		assertEquals(Boolean.FALSE, b);
 		b = p.parse(t, Boolean.class);
 		assertEquals(Boolean.FALSE, b);
-		t = "false";
+		t = " false ";
 		b = p.parse(t, Boolean.class);
 		assertEquals(Boolean.FALSE, b);
 
 		// 2nd level
-		t = "$o(x=$b(false))";
+		t = "(x=false)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals(Boolean.FALSE, m.get("x"));
-		t = "(x=$b(false))";
+		t = " ( x = false ) ";
 		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals(Boolean.FALSE, m.get("x"));
-		t = "(x=false)";
-		m = p.parse(t, HashMap.class, String.class, Boolean.class);
-		assertEquals(Boolean.FALSE, m.get("x"));
 
 		// Number
 		// Top level
-		t = "$n(123)";
+		t = "123";
 		Integer i = (Integer)p.parse(t, Object.class);
 		assertEquals(123, i.intValue());
 		i = p.parse(t, Integer.class);
@@ -232,15 +224,15 @@ public class UonParserTest {
 		assertEquals(123, d.intValue());
 		Float f = p.parse(t, Float.class);
 		assertEquals(123, f.intValue());
-		t = "123";
+		t = " 123 ";
 		i = p.parse(t, Integer.class);
 		assertEquals(123, i.intValue());
 
 		// 2nd level
-		t = "$o(x=$n(123))";
+		t = "(x=123)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals(123, ((Integer)m.get("x")).intValue());
-		t = "(x=123)";
+		t = " ( x = 123 ) ";
 		m = p.parse(t, HashMap.class, String.class, Number.class);
 		assertEquals(123, ((Integer)m.get("x")).intValue());
 		m = p.parse(t, HashMap.class, String.class, Double.class);
@@ -248,12 +240,12 @@ public class UonParserTest {
 
 		// Unencoded chars
 		// Top level
-		t = "x;/?:@-_.!*'";
+		t = "x;/?:@-_.!*~'";
 		assertEquals("x;/?:@-_.!*'", p.parse(t, Object.class));
 		assertEquals("x;/?:@-_.!*'", pe.parse(t, Object.class));
 
 		// 2nd level
-		t = "$o(x;/?:@-_.!*'=x;/?:@-_.!*')";
+		t = "(x;/?:@-_.!*~'=x;/?:@-_.!*~')";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x;/?:@-_.!*'", m.get("x;/?:@-_.!*'"));
 		m = p.parse(t, HashMap.class, String.class, Object.class);
@@ -277,7 +269,7 @@ public class UonParserTest {
 		assertEquals("x{}|\\^[]`<>#%\"&+", pe.parse(t, String.class));
 
 		// 2nd level
-		t = "$o(x{}|\\^[]`<>#%\"&+=x{}|\\^[]`<>#%\"&+)";
+		t = "(x{}|\\^[]`<>#%\"&+=x{}|\\^[]`<>#%\"&+)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x{}|\\^[]`<>#%\"&+", m.get("x{}|\\^[]`<>#%\"&+"));
 		try {
@@ -286,30 +278,24 @@ public class UonParserTest {
 		} catch (ParseException e) {
 			// Good.
 		}
-		t = "$o(x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B=x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B)";
+		t = "(x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B=x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B)";
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("x{}|\\^[]`<>#%\"&+", m.get("x{}|\\^[]`<>#%\"&+"));
 
 		// Special chars
 		// Top level
-		t = "x~$~,~(~)";
-		assertEquals("x$,()", p.parse(t, Object.class));
-		t = "(x~$~,~(~))";
-		assertEquals("x$,()", p.parse(t, Object.class));
-		t = "$s(x~$~,~(~))";
-		assertEquals("x$,()", p.parse(t, Object.class));
+		t = "'x$,()~''";
+		assertEquals("x$,()'", p.parse(t, Object.class));
+		t = " 'x$,()~'' ";
+		assertEquals("x$,()'", p.parse(t, Object.class));
 
 		// 2nd level
-		// Note behavior on serializeParams() is different since 2nd-level is top level.
-		t = "$o(x~$~,~(~)=x~$~,~(~))";
+		t = "('x$,()~''='x$,()~'')";
 		m = (Map)p.parse(t, Object.class);
-		assertEquals("x$,()", m.get("x$,()"));
-		t = "$o((x~$~,~(~))=(x~$~,~(~)))";
+		assertEquals("x$,()'", m.get("x$,()'"));
+		t = " ( 'x$,()~'' = 'x$,()~'' ) ";
 		m = (Map)p.parse(t, Object.class);
-		assertEquals("x$,()", m.get("x$,()"));
-		t = "$o($s(x~$~,~(~))=$s(x~$~,~(~)))";
-		m = (Map)p.parse(t, Object.class);
-		assertEquals("x$,()", m.get("x$,()"));
+		assertEquals("x$,()'", m.get("x$,()'"));
 
 		// Equals sign
 		// Gets encoded at top level, and encoded+escaped at 2nd level.
@@ -320,79 +306,64 @@ public class UonParserTest {
 		assertEquals("x=", pe.parse(t, Object.class));
 
 		// 2nd level
-		t = "$o(x~==x~=)";
+		t = "('x='='x=')";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x=", m.get("x="));
-		t = "$o((x~=)=(x~=))";
+		t = "('x='='x=')";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x=", m.get("x="));
-		t = "$o($s(x~=)=$s(x~=))";
+		t = " ( 'x=' = 'x=' ) ";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x=", m.get("x="));
-		t = "(x~==x~=)";
+		t = "('x='='x=')";
 		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("x=", m.get("x="));
-		t = "((x~=)=(x~=))";
+		t = " ( 'x=' = 'x=' ) ";
 		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("x=", m.get("x="));
-		t = "($s(x~=)=$s(x~=))";
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("x=", m.get("x="));
-		t = "$o(x~%3D=x~%3D)";
-		m = (Map)pe.parse(t, Object.class);
-		assertEquals("x=", m.get("x="));
-		t = "$o((x~%3D)=(x~%3D))";
+		t = "('x%3D'='x%3D')";
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("x=", m.get("x="));
-		t = "$o($s(x~%3D)=$s(x~%3D))";
+		t = " ( 'x%3D' = 'x%3D' ) ";
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("x=", m.get("x="));
-		t = "(x~%3D=x~%3D)";
-		m = pe.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("x=", m.get("x="));
-		t = "((x~%3D)=(x~%3D))";
-		m = pe.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("x=", m.get("x="));
-		t = "($s(x~%3D)=$s(x~%3D))";
-		m = pe.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("x=", m.get("x="));
 
 		// String starting with parenthesis
 		// Top level
-		t = "~(~)";
+		t = "'()'";
 		assertEquals("()", p.parse(t, Object.class));
 		assertEquals("()", p.parse(t, String.class));
 
-		t = "(~(~))";
-		assertEquals("()", p.parse(t, Object.class));
-		assertEquals("()", p.parse(t, String.class));
-		t = "$s(~(~))";
+		t = " '()' ";
 		assertEquals("()", p.parse(t, Object.class));
 		assertEquals("()", p.parse(t, String.class));
 
 		// 2nd level
-		t = "$o((~(~))=(~(~)))";
+		t = "('()'='()')";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("()", m.get("()"));
-		t = "((~(~))=(~(~)))";
-		m = p.parse(t, HashMap.class, String.class, Object.class);
-		assertEquals("()", m.get("()"));
-		t = "($s(~(~))=$s(~(~)))";
+		t = " ( '()' = '()' ) ";
 		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("()", m.get("()"));
 
 		// String starting with $
 		// Top level
-		t = "($a)";
+		t = "$a";
 		assertEquals("$a", p.parse(t, Object.class));
-		t = "($a)";
+		t = "'$a'";
 		assertEquals("$a", p.parse(t, Object.class));
 
 		// 2nd level
-		t = "$o(($a)=($a))";
+		t = "($a=$a)";
+		m = (Map)p.parse(t, Object.class);
+		assertEquals("$a", m.get("$a"));
+		t = " ( $a = $a ) ";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("$a", m.get("$a"));
-		t = "(($a)=($a))";
+		t = "('$a'='$a')";
+		m = p.parse(t, HashMap.class, String.class, Object.class);
+		assertEquals("$a", m.get("$a"));
+		t = " ( '$a' = '$a' ) ";
 		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("$a", m.get("$a"));
 
@@ -403,36 +374,36 @@ public class UonParserTest {
 		assertEquals("", pe.parse(t, Object.class));
 
 		// 2nd level
-		t = "$o(=)";
+		t = "(=)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("", m.get(""));
-		t = "(=)";
+		t = "(''='')";
 		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("", m.get(""));
 
 		// 3rd level
-		t = "$o(=$o(=))";
+		t = "(=(=))";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("", ((Map)m.get("")).get(""));
-		t = "(=(=))";
+		t = " ( = ( = ) ) ";
 		m = p.parse(t, HashMap.class, String.class, HashMap.class);
 		assertEquals("", ((Map)m.get("")).get(""));
 
 		// Newline character
 		// Top level
-		t = "(%0A)";
+		t = "'%0A'";
 		assertEquals("\n", pe.parse(t, Object.class));
 		assertEquals("%0A", p.parse(t, Object.class));
 
 		// 2nd level
-		t = "$o((%0A)=(%0A))";
+		t = "('%0A'='%0A')";
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("\n", m.get("\n"));
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("%0A", m.get("%0A"));
 
 		// 3rd level
-		t = "$o((%0A)=$o((%0A)=(%0A)))";
+		t = "('%0A'=('%0A'='%0A'))";
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("\n", ((Map)m.get("\n")).get("\n"));
 	}
@@ -455,18 +426,18 @@ public class UonParserTest {
 		assertEquals("¢", pe.parse(t, String.class));
 
 		// 2nd level
-		t = "$o(¢=¢)";
+		t = "(¢=¢)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("¢", m.get("¢"));
-		t = "$o(%C2%A2=%C2%A2)";
+		t = "(%C2%A2=%C2%A2)";
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("¢", m.get("¢"));
 
 		// 3rd level
-		t = "$o(¢=$o(¢=¢))";
+		t = "(¢=(¢=¢))";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("¢", ((Map)m.get("¢")).get("¢"));
-		t = "$o(%C2%A2=$o(%C2%A2=%C2%A2))";
+		t = "(%C2%A2=(%C2%A2=%C2%A2))";
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("¢", ((Map)m.get("¢")).get("¢"));
 
@@ -480,18 +451,18 @@ public class UonParserTest {
 		assertEquals("€", pe.parse(t, String.class));
 
 		// 2nd level
-		t = "$o(€=€)";
+		t = "(€=€)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("€", m.get("€"));
-		t = "$o(%E2%82%AC=%E2%82%AC)";
+		t = "(%E2%82%AC=%E2%82%AC)";
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("€", m.get("€"));
 
 		// 3rd level
-		t = "$o(€=$o(€=€))";
+		t = "(€=(€=€))";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("€", ((Map)m.get("€")).get("€"));
-		t = "$o(%E2%82%AC=$o(%E2%82%AC=%E2%82%AC))";
+		t = "(%E2%82%AC=(%E2%82%AC=%E2%82%AC))";
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("€", ((Map)m.get("€")).get("€"));
 
@@ -505,18 +476,18 @@ public class UonParserTest {
 		assertEquals("𤭢", pe.parse(t, String.class));
 
 		// 2nd level
-		t = "$o(𤭢=𤭢)";
+		t = "(𤭢=𤭢)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("𤭢", m.get("𤭢"));
-		t = "$o(%F0%A4%AD%A2=%F0%A4%AD%A2)";
+		t = "(%F0%A4%AD%A2=%F0%A4%AD%A2)";
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("𤭢", m.get("𤭢"));
 
 		// 3rd level
-		t = "$o(𤭢=$o(𤭢=𤭢))";
+		t = "(𤭢=(𤭢=𤭢))";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("𤭢", ((Map)m.get("𤭢")).get("𤭢"));
-		t = "$o(%F0%A4%AD%A2=$o(%F0%A4%AD%A2=%F0%A4%AD%A2))";
+		t = "(%F0%A4%AD%A2=(%F0%A4%AD%A2=%F0%A4%AD%A2))";
 		m = (Map)pe.parse(t, Object.class);
 		assertEquals("𤭢", ((Map)m.get("𤭢")).get("𤭢"));
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonSerializerTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonSerializerTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonSerializerTest.java
index 3787f90..4c6d001 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonSerializerTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UonSerializerTest.java
@@ -21,9 +21,7 @@ import org.junit.*;
 public class UonSerializerTest {
 
 	static UonSerializer s = UonSerializer.DEFAULT_ENCODING;
-	static UonSerializer ss = UonSerializer.DEFAULT_SIMPLE_ENCODING;
 	static UonSerializer su = UonSerializer.DEFAULT;
-	static UonSerializer ssu = UonSerializer.DEFAULT_SIMPLE;
 	static UonSerializer sr = UonSerializer.DEFAULT_READABLE;
 
 
@@ -39,341 +37,261 @@ public class UonSerializerTest {
 		// Top level
 		t = "a";
 		assertEquals("a", s.serialize(t));
-		assertEquals("a", ss.serialize(t));
 		assertEquals("a", su.serialize(t));
-		assertEquals("a", ssu.serialize(t));
 		assertEquals("a", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{a:'a'}");
-		assertEquals("$o(a=a)", s.serialize(t));
-		assertEquals("(a=a)", ss.serialize(t));
-		assertEquals("$o(a=a)", su.serialize(t));
-		assertEquals("(a=a)", ssu.serialize(t));
-		assertEquals("$o(\n\ta=a\n)", sr.serialize(t));
+		assertEquals("(a=a)", s.serialize(t));
+		assertEquals("(a=a)", su.serialize(t));
+		assertEquals("(\n\ta=a\n)", sr.serialize(t));
 
 		// Simple map
 		// Top level
 		t = new ObjectMap("{a:'b',c:123,d:false,e:true,f:null}");
-		assertEquals("$o(a=b,c=$n(123),d=$b(false),e=$b(true),f=%00)", s.serialize(t));
-		assertEquals("(a=b,c=123,d=false,e=true,f=%00)", ss.serialize(t));
-		assertEquals("$o(a=b,c=$n(123),d=$b(false),e=$b(true),f=\u0000)", su.serialize(t));
-		assertEquals("(a=b,c=123,d=false,e=true,f=\u0000)", ssu.serialize(t));
-		assertEquals("$o(\n\ta=b,\n\tc=$n(123),\n\td=$b(false),\n\te=$b(true),\n\tf=\u0000\n)", sr.serialize(t));
+		assertEquals("(a=b,c=123,d=false,e=true,f=null)", s.serialize(t));
+		assertEquals("(a=b,c=123,d=false,e=true,f=null)", su.serialize(t));
+		assertEquals("(\n\ta=b,\n\tc=123,\n\td=false,\n\te=true,\n\tf=null\n)", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{a:{a:'b',c:123,d:false,e:true,f:null}}");
-		assertEquals("$o(a=$o(a=b,c=$n(123),d=$b(false),e=$b(true),f=%00))", s.serialize(t));
-		assertEquals("(a=(a=b,c=123,d=false,e=true,f=%00))", ss.serialize(t));
-		assertEquals("$o(a=$o(a=b,c=$n(123),d=$b(false),e=$b(true),f=\u0000))", su.serialize(t));
-		assertEquals("(a=(a=b,c=123,d=false,e=true,f=\u0000))", ssu.serialize(t));
-		assertEquals("$o(\n\ta=$o(\n\t\ta=b,\n\t\tc=$n(123),\n\t\td=$b(false),\n\t\te=$b(true),\n\t\tf=\u0000\n\t)\n)", sr.serialize(t));
+		assertEquals("(a=(a=b,c=123,d=false,e=true,f=null))", s.serialize(t));
+		assertEquals("(a=(a=b,c=123,d=false,e=true,f=null))", su.serialize(t));
+		assertEquals("(\n\ta=(\n\t\ta=b,\n\t\tc=123,\n\t\td=false,\n\t\te=true,\n\t\tf=null\n\t)\n)", sr.serialize(t));
 
 		// Simple map with primitives as literals
 		t = new ObjectMap("{a:'b',c:'123',d:'false',e:'true',f:'null'}");
-		assertEquals("$o(a=b,c=123,d=false,e=true,f=null)", s.serialize(t));
-		assertEquals("(a=b,c=123,d=false,e=true,f=null)", ss.serialize(t));
-		assertEquals("$o(a=b,c=123,d=false,e=true,f=null)", su.serialize(t));
-		assertEquals("(a=b,c=123,d=false,e=true,f=null)", ssu.serialize(t));
-		assertEquals("$o(\n\ta=b,\n\tc=123,\n\td=false,\n\te=true,\n\tf=null\n)", sr.serialize(t));
+		assertEquals("(a=b,c='123',d='false',e='true',f='null')", s.serialize(t));
+		assertEquals("(a=b,c='123',d='false',e='true',f='null')", su.serialize(t));
+		assertEquals("(\n\ta=b,\n\tc='123',\n\td='false',\n\te='true',\n\tf='null'\n)", sr.serialize(t));
 
 		// null
 		// Note that serializeParams is always encoded.
 		// Top level
 		t = null;
-		assertEquals("%00", s.serialize(t));
-		assertEquals("%00", ss.serialize(t));
-		assertEquals("\u0000", su.serialize(t));
-		assertEquals("\u0000", ssu.serialize(t));
-		assertEquals("\u0000", sr.serialize(t));
+		assertEquals("null", s.serialize(t));
+		assertEquals("null", su.serialize(t));
+		assertEquals("null", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{null:null}");
-		assertEquals("$o(%00=%00)", s.serialize(t));
-		assertEquals("(%00=%00)", ss.serialize(t));
-		assertEquals("$o(\u0000=\u0000)", su.serialize(t));
-		assertEquals("(\u0000=\u0000)", ssu.serialize(t));
-		assertEquals("$o(\n\t\u0000=\u0000\n)", sr.serialize(t));
+		assertEquals("(null=null)", s.serialize(t));
+		assertEquals("(null=null)", su.serialize(t));
+		assertEquals("(\n\tnull=null\n)", sr.serialize(t));
 
 		// 3rd level
 		t = new ObjectMap("{null:{null:null}}");
-		assertEquals("$o(%00=$o(%00=%00))", s.serialize(t));
-		assertEquals("(%00=(%00=%00))", ss.serialize(t));
-		assertEquals("$o(\u0000=$o(\u0000=\u0000))", su.serialize(t));
-		assertEquals("(\u0000=(\u0000=\u0000))", ssu.serialize(t));
-		assertEquals("$o(\n\t\u0000=$o(\n\t\t\u0000=\u0000\n\t)\n)", sr.serialize(t));
+		assertEquals("(null=(null=null))", s.serialize(t));
+		assertEquals("(null=(null=null))", su.serialize(t));
+		assertEquals("(\n\tnull=(\n\t\tnull=null\n\t)\n)", sr.serialize(t));
 
 		// Empty array
 		// Top level
 		t = new String[0];
-		assertEquals("$a()", s.serialize(t));
-		assertEquals("()", ss.serialize(t));
-		assertEquals("$a()", su.serialize(t));
-		assertEquals("()", ssu.serialize(t));
-		assertEquals("$a()", sr.serialize(t));
+		assertEquals("@()", s.serialize(t));
+		assertEquals("@()", su.serialize(t));
+		assertEquals("@()", sr.serialize(t));
 
 		// 2nd level in map
 		t = new ObjectMap("{x:[]}");
-		assertEquals("$o(x=$a())", s.serialize(t));
-		assertEquals("(x=())", ss.serialize(t));
-		assertEquals("$o(x=$a())", su.serialize(t));
-		assertEquals("(x=())", ssu.serialize(t));
-		assertEquals("$o(\n\tx=$a()\n)", sr.serialize(t));
+		assertEquals("(x=@())", s.serialize(t));
+		assertEquals("(x=@())", su.serialize(t));
+		assertEquals("(\n\tx=@()\n)", sr.serialize(t));
 
 		// Empty 2 dimensional array
 		t = new String[1][0];
-		assertEquals("$a($a())", s.serialize(t));
-		assertEquals("(())", ss.serialize(t));
-		assertEquals("$a($a())", su.serialize(t));
-		assertEquals("(())", ssu.serialize(t));
-		assertEquals("$a(\n\t$a()\n)", sr.serialize(t));
+		assertEquals("@(@())", s.serialize(t));
+		assertEquals("@(@())", su.serialize(t));
+		assertEquals("@(\n\t@()\n)", sr.serialize(t));
 
 		// Array containing empty string
 		// Top level
 		t = new String[]{""};
-		assertEquals("$a(())", s.serialize(t));
-		assertEquals("(())", ss.serialize(t));
-		assertEquals("$a(())", su.serialize(t));
-		assertEquals("(())", ssu.serialize(t));
-		assertEquals("$a(\n\t()\n)", sr.serialize(t));
+		assertEquals("@('')", s.serialize(t));
+		assertEquals("@('')", su.serialize(t));
+		assertEquals("@(\n\t''\n)", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{x:['']}");
-		assertEquals("$o(x=$a(()))", s.serialize(t));
-		assertEquals("(x=(()))", ss.serialize(t));
-		assertEquals("$o(x=$a(()))", su.serialize(t));
-		assertEquals("(x=(()))", ssu.serialize(t));
-		assertEquals("$o(\n\tx=$a(\n\t\t()\n\t)\n)", sr.serialize(t));
+		assertEquals("(x=@(''))", s.serialize(t));
+		assertEquals("(x=@(''))", su.serialize(t));
+		assertEquals("(\n\tx=@(\n\t\t''\n\t)\n)", sr.serialize(t));
 
 		// Array containing 3 empty strings
 		t = new String[]{"","",""};
-		assertEquals("$a(,,)", s.serialize(t));
-		assertEquals("(,,)", ss.serialize(t));
-		assertEquals("$a(,,)", su.serialize(t));
-		assertEquals("(,,)", ssu.serialize(t));
-		assertEquals("$a(\n\t(),\n\t(),\n\t()\n)", sr.serialize(t));
+		assertEquals("@('','','')", s.serialize(t));
+		assertEquals("@('','','')", su.serialize(t));
+		assertEquals("@(\n\t'',\n\t'',\n\t''\n)", sr.serialize(t));
 
 		// String containing \u0000
 		// Top level
 		t = "\u0000";
-		assertEquals("(%00)", s.serialize(t));
-		assertEquals("(%00)", ss.serialize(t));
-		assertEquals("(\u0000)", su.serialize(t));
-		assertEquals("(\u0000)", ssu.serialize(t));
-		assertEquals("(\u0000)", sr.serialize(t));
+		assertEquals("%00", s.serialize(t));
+		assertEquals("\u0000", su.serialize(t));
+		assertEquals("\u0000", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{'\u0000':'\u0000'}");
-		assertEquals("$o((%00)=(%00))", s.serialize(t));
-		assertEquals("((%00)=(%00))", ss.serialize(t));
-		assertEquals("$o((\u0000)=(\u0000))", su.serialize(t));
-		assertEquals("((\u0000)=(\u0000))", ssu.serialize(t));
-		assertEquals("$o(\n\t(\u0000)=(\u0000)\n)", sr.serialize(t));
+		assertEquals("(%00=%00)", s.serialize(t));
+		assertEquals("(\u0000=\u0000)", su.serialize(t));
+		assertEquals("(\n\t\u0000=\u0000\n)", sr.serialize(t));
 
 		// Boolean
 		// Top level
 		t = false;
-		assertEquals("$b(false)", s.serialize(t));
-		assertEquals("false", ss.serialize(t));
-		assertEquals("$b(false)", su.serialize(t));
-		assertEquals("false", ssu.serialize(t));
-		assertEquals("$b(false)", sr.serialize(t));
+		assertEquals("false", s.serialize(t));
+		assertEquals("false", su.serialize(t));
+		assertEquals("false", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{x:false}");
-		assertEquals("$o(x=$b(false))", s.serialize(t));
-		assertEquals("(x=false)", ss.serialize(t));
-		assertEquals("$o(x=$b(false))", su.serialize(t));
-		assertEquals("(x=false)", ssu.serialize(t));
-		assertEquals("$o(\n\tx=$b(false)\n)", sr.serialize(t));
+		assertEquals("(x=false)", s.serialize(t));
+		assertEquals("(x=false)", su.serialize(t));
+		assertEquals("(\n\tx=false\n)", sr.serialize(t));
 
 		// Number
 		// Top level
 		t = 123;
-		assertEquals("$n(123)", s.serialize(t));
-		assertEquals("123", ss.serialize(t));
-		assertEquals("$n(123)", su.serialize(t));
-		assertEquals("123", ssu.serialize(t));
-		assertEquals("$n(123)", sr.serialize(t));
+		assertEquals("123", s.serialize(t));
+		assertEquals("123", su.serialize(t));
+		assertEquals("123", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{x:123}");
-		assertEquals("$o(x=$n(123))", s.serialize(t));
-		assertEquals("(x=123)", ss.serialize(t));
-		assertEquals("$o(x=$n(123))", su.serialize(t));
-		assertEquals("(x=123)", ssu.serialize(t));
-		assertEquals("$o(\n\tx=$n(123)\n)", sr.serialize(t));
+		assertEquals("(x=123)", s.serialize(t));
+		assertEquals("(x=123)", su.serialize(t));
+		assertEquals("(\n\tx=123\n)", sr.serialize(t));
 
 		// Unencoded chars
 		// Top level
 		t = "x;/?:@-_.!*'";
-		assertEquals("x;/?:@-_.!*'", s.serialize(t));
-		assertEquals("x;/?:@-_.!*'", ss.serialize(t));
-		assertEquals("x;/?:@-_.!*'", su.serialize(t));
-		assertEquals("x;/?:@-_.!*'", ssu.serialize(t));
-		assertEquals("x;/?:@-_.!*'", sr.serialize(t));
+		assertEquals("x;/?:@-_.!*~'", s.serialize(t));
+		assertEquals("x;/?:@-_.!*~'", su.serialize(t));
+		assertEquals("x;/?:@-_.!*~'", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{x:'x;/?:@-_.!*\\''}");
-		assertEquals("$o(x=x;/?:@-_.!*')", s.serialize(t));
-		assertEquals("(x=x;/?:@-_.!*')", ss.serialize(t));
-		assertEquals("$o(x=x;/?:@-_.!*')", su.serialize(t));
-		assertEquals("(x=x;/?:@-_.!*')", ssu.serialize(t));
-		assertEquals("$o(\n\tx=x;/?:@-_.!*'\n)", sr.serialize(t));
+		assertEquals("(x=x;/?:@-_.!*~')", s.serialize(t));
+		assertEquals("(x=x;/?:@-_.!*~')", su.serialize(t));
+		assertEquals("(\n\tx=x;/?:@-_.!*~'\n)", sr.serialize(t));
 
 		// Encoded chars
 		// Top level
 		t = "x{}|\\^[]`<>#%\"&+";
 		assertEquals("x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B", s.serialize(t));
-		assertEquals("x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B", ss.serialize(t));
 		assertEquals("x{}|\\^[]`<>#%\"&+", su.serialize(t));
-		assertEquals("x{}|\\^[]`<>#%\"&+", ssu.serialize(t));
 		assertEquals("x{}|\\^[]`<>#%\"&+", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{'x{}|\\\\^[]`<>#%\"&+':'x{}|\\\\^[]`<>#%\"&+'}");
-		assertEquals("$o(x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B=x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B)", s.serialize(t));
-		assertEquals("(x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B=x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B)", ss.serialize(t));
-		assertEquals("$o(x{}|\\^[]`<>#%\"&+=x{}|\\^[]`<>#%\"&+)", su.serialize(t));
-		assertEquals("(x{}|\\^[]`<>#%\"&+=x{}|\\^[]`<>#%\"&+)", ssu.serialize(t));
-		assertEquals("$o(\n\tx{}|\\^[]`<>#%\"&+=x{}|\\^[]`<>#%\"&+\n)", sr.serialize(t));
+		assertEquals("(x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B=x%7B%7D%7C%5C%5E%5B%5D%60%3C%3E%23%25%22%26%2B)", s.serialize(t));
+		assertEquals("(x{}|\\^[]`<>#%\"&+=x{}|\\^[]`<>#%\"&+)", su.serialize(t));
+		assertEquals("(\n\tx{}|\\^[]`<>#%\"&+=x{}|\\^[]`<>#%\"&+\n)", sr.serialize(t));
 
 		// Escaped chars
 		// Top level
 		t = "x$,()~";
-		assertEquals("x$,()~", s.serialize(t));
-		assertEquals("x$,()~", ss.serialize(t));
-		assertEquals("x$,()~", su.serialize(t));
-		assertEquals("x$,()~", ssu.serialize(t));
-		assertEquals("x$,()~", sr.serialize(t));
+		assertEquals("'x$,()~~'", s.serialize(t));
+		assertEquals("'x$,()~~'", su.serialize(t));
+		assertEquals("'x$,()~~'", sr.serialize(t));
 
 		// 2nd level
 		// Note behavior on serializeParams() is different since 2nd-level is top level.
 		t = new ObjectMap("{'x$,()~':'x$,()~'}");
-		assertEquals("$o(x$~,~(~)~~=x$~,~(~)~~)", s.serialize(t));
-		assertEquals("(x$~,~(~)~~=x$~,~(~)~~)", ss.serialize(t));
-		assertEquals("$o(x$~,~(~)~~=x$~,~(~)~~)", su.serialize(t));
-		assertEquals("(x$~,~(~)~~=x$~,~(~)~~)", ssu.serialize(t));
-		assertEquals("$o(\n\tx$~,~(~)~~=x$~,~(~)~~\n)", sr.serialize(t));
+		assertEquals("('x$,()~~'='x$,()~~')", s.serialize(t));
+		assertEquals("('x$,()~~'='x$,()~~')", su.serialize(t));
+		assertEquals("(\n\t'x$,()~~'='x$,()~~'\n)", sr.serialize(t));
 
 		// 3rd level
 		// Note behavior on serializeParams().
 		t = new ObjectMap("{'x$,()~':{'x$,()~':'x$,()~'}}");
-		assertEquals("$o(x$~,~(~)~~=$o(x$~,~(~)~~=x$~,~(~)~~))", s.serialize(t));
-		assertEquals("(x$~,~(~)~~=(x$~,~(~)~~=x$~,~(~)~~))", ss.serialize(t));
-		assertEquals("$o(x$~,~(~)~~=$o(x$~,~(~)~~=x$~,~(~)~~))", su.serialize(t));
-		assertEquals("(x$~,~(~)~~=(x$~,~(~)~~=x$~,~(~)~~))", ssu.serialize(t));
-		assertEquals("$o(\n\tx$~,~(~)~~=$o(\n\t\tx$~,~(~)~~=x$~,~(~)~~\n\t)\n)", sr.serialize(t));
+		assertEquals("('x$,()~~'=('x$,()~~'='x$,()~~'))", s.serialize(t));
+		assertEquals("('x$,()~~'=('x$,()~~'='x$,()~~'))", su.serialize(t));
+		assertEquals("(\n\t'x$,()~~'=(\n\t\t'x$,()~~'='x$,()~~'\n\t)\n)", sr.serialize(t));
 
 		// Equals sign
 		// Gets encoded at top level, and encoded+escaped at 2nd level.
 		// Top level
 		t = "x=";
-		assertEquals("x=", s.serialize(t));
-		assertEquals("x=", ss.serialize(t));
-		assertEquals("x=", su.serialize(t));
-		assertEquals("x=", ssu.serialize(t));
-		assertEquals("x=", sr.serialize(t));
+		assertEquals("'x='", s.serialize(t));
+		assertEquals("'x='", su.serialize(t));
+		assertEquals("'x='", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{'x=':'x='}");
-		assertEquals("$o(x~==x~=)", s.serialize(t));
-		assertEquals("(x~==x~=)", ss.serialize(t));
-		assertEquals("$o(x~==x~=)", su.serialize(t));
-		assertEquals("(x~==x~=)", ssu.serialize(t));
-		assertEquals("$o(\n\tx~==x~=\n)", sr.serialize(t));
+		assertEquals("('x='='x=')", s.serialize(t));
+		assertEquals("('x='='x=')", su.serialize(t));
+		assertEquals("(\n\t'x='='x='\n)", sr.serialize(t));
 
 		// 3rd level
 		t = new ObjectMap("{'x=':{'x=':'x='}}");
-		assertEquals("$o(x~==$o(x~==x~=))", s.serialize(t));
-		assertEquals("(x~==(x~==x~=))", ss.serialize(t));
-		assertEquals("$o(x~==$o(x~==x~=))", su.serialize(t));
-		assertEquals("(x~==(x~==x~=))", ssu.serialize(t));
-		assertEquals("$o(\n\tx~==$o(\n\t\tx~==x~=\n\t)\n)", sr.serialize(t));
+		assertEquals("('x='=('x='='x='))", s.serialize(t));
+		assertEquals("('x='=('x='='x='))", su.serialize(t));
+		assertEquals("(\n\t'x='=(\n\t\t'x='='x='\n\t)\n)", sr.serialize(t));
 
 		// String starting with parenthesis
 		// Top level
 		t = "()";
-		assertEquals("(~(~))", s.serialize(t));
-		assertEquals("(~(~))", ss.serialize(t));
-		assertEquals("(~(~))", su.serialize(t));
-		assertEquals("(~(~))", ssu.serialize(t));
-		assertEquals("(~(~))", sr.serialize(t));
+		assertEquals("'()'", s.serialize(t));
+		assertEquals("'()'", su.serialize(t));
+		assertEquals("'()'", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{'()':'()'}");
-		assertEquals("$o((~(~))=(~(~)))", s.serialize(t));
-		assertEquals("((~(~))=(~(~)))", ss.serialize(t));
-		assertEquals("$o((~(~))=(~(~)))", su.serialize(t));
-		assertEquals("((~(~))=(~(~)))", ssu.serialize(t));
-		assertEquals("$o(\n\t(~(~))=(~(~))\n)", sr.serialize(t));
+		assertEquals("('()'='()')", s.serialize(t));
+		assertEquals("('()'='()')", su.serialize(t));
+		assertEquals("(\n\t'()'='()'\n)", sr.serialize(t));
 
 		// String starting with $
 		// Top level
 		t = "$a";
-		assertEquals("($a)", s.serialize(t));
-		assertEquals("($a)", ss.serialize(t));
-		assertEquals("($a)", su.serialize(t));
-		assertEquals("($a)", ssu.serialize(t));
-		assertEquals("($a)", sr.serialize(t));
+		assertEquals("$a", s.serialize(t));
+		assertEquals("$a", su.serialize(t));
+		assertEquals("$a", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{$a:'$a'}");
-		assertEquals("$o(($a)=($a))", s.serialize(t));
-		assertEquals("(($a)=($a))", ss.serialize(t));
-		assertEquals("$o(($a)=($a))", su.serialize(t));
-		assertEquals("(($a)=($a))", ssu.serialize(t));
-		assertEquals("$o(\n\t($a)=($a)\n)", sr.serialize(t));
+		assertEquals("($a=$a)", s.serialize(t));
+		assertEquals("($a=$a)", su.serialize(t));
+		assertEquals("(\n\t$a=$a\n)", sr.serialize(t));
 
 		// Blank string
 		// Top level
 		t = "";
-		assertEquals("", s.serialize(t));
-		assertEquals("", ss.serialize(t));
-		assertEquals("", su.serialize(t));
-		assertEquals("", ssu.serialize(t));
-		assertEquals("", sr.serialize(t));
+		assertEquals("''", s.serialize(t));
+		assertEquals("''", su.serialize(t));
+		assertEquals("''", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{'':''}");
-		assertEquals("$o(=)", s.serialize(t));
-		assertEquals("(=)", ss.serialize(t));
-		assertEquals("$o(=)", su.serialize(t));
-		assertEquals("(=)", ssu.serialize(t));
-		assertEquals("$o(\n\t()=()\n)", sr.serialize(t));
+		assertEquals("(''='')", s.serialize(t));
+		assertEquals("(''='')", su.serialize(t));
+		assertEquals("(\n\t''=''\n)", sr.serialize(t));
 
 		// 3rd level
 		t = new ObjectMap("{'':{'':''}}");
-		assertEquals("$o(=$o(=))", s.serialize(t));
-		assertEquals("(=(=))", ss.serialize(t));
-		assertEquals("$o(=$o(=))", su.serialize(t));
-		assertEquals("(=(=))", ssu.serialize(t));
-		assertEquals("$o(\n\t()=$o(\n\t\t()=()\n\t)\n)", sr.serialize(t));
+		assertEquals("(''=(''=''))", s.serialize(t));
+		assertEquals("(''=(''=''))", su.serialize(t));
+		assertEquals("(\n\t''=(\n\t\t''=''\n\t)\n)", sr.serialize(t));
 
 		// Newline character
 		// Top level
 		t = "\n";
-		assertEquals("%0A", s.serialize(t));
-		assertEquals("%0A", ss.serialize(t));
-		assertEquals("\n", su.serialize(t));
-		assertEquals("\n", ssu.serialize(t));
-		assertEquals("(\n)", sr.serialize(t));
+		assertEquals("'%0A'", s.serialize(t));
+		assertEquals("'\n'", su.serialize(t));
+		assertEquals("'\n'", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{'\n':'\n'}");
-		assertEquals("$o(%0A=%0A)", s.serialize(t));
-		assertEquals("(%0A=%0A)", ss.serialize(t));
-		assertEquals("$o(\n=\n)", su.serialize(t));
-		assertEquals("(\n=\n)", ssu.serialize(t));
-		assertEquals("$o(\n\t(\n)=(\n)\n)", sr.serialize(t));
+		assertEquals("('%0A'='%0A')", s.serialize(t));
+		assertEquals("('\n'='\n')", su.serialize(t));
+		assertEquals("(\n\t'\n'='\n'\n)", sr.serialize(t));
 
 		// 3rd level
 		t = new ObjectMap("{'\n':{'\n':'\n'}}");
-		assertEquals("$o(%0A=$o(%0A=%0A))", s.serialize(t));
-		assertEquals("(%0A=(%0A=%0A))", ss.serialize(t));
-		assertEquals("$o(\n=$o(\n=\n))", su.serialize(t));
-		assertEquals("(\n=(\n=\n))", ssu.serialize(t));
-		assertEquals("$o(\n\t(\n)=$o(\n\t\t(\n)=(\n)\n\t)\n)", sr.serialize(t));
+		assertEquals("('%0A'=('%0A'='%0A'))", s.serialize(t));
+		assertEquals("('\n'=('\n'='\n'))", su.serialize(t));
+		assertEquals("(\n\t'\n'=(\n\t\t'\n'='\n'\n\t)\n)", sr.serialize(t));
 	}
 
 	//====================================================================================================
@@ -387,75 +305,57 @@ public class UonSerializerTest {
 		// Top level
 		t = "¢";
 		assertEquals("%C2%A2", s.serialize(t));
-		assertEquals("%C2%A2", ss.serialize(t));
 		assertEquals("¢", su.serialize(t));
-		assertEquals("¢", ssu.serialize(t));
 		assertEquals("¢", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{'¢':'¢'}");
-		assertEquals("$o(%C2%A2=%C2%A2)", s.serialize(t));
-		assertEquals("(%C2%A2=%C2%A2)", ss.serialize(t));
-		assertEquals("$o(¢=¢)", su.serialize(t));
-		assertEquals("(¢=¢)", ssu.serialize(t));
-		assertEquals("$o(\n\t¢=¢\n)", sr.serialize(t));
+		assertEquals("(%C2%A2=%C2%A2)", s.serialize(t));
+		assertEquals("(¢=¢)", su.serialize(t));
+		assertEquals("(\n\t¢=¢\n)", sr.serialize(t));
 
 		// 3rd level
 		t = new ObjectMap("{'¢':{'¢':'¢'}}");
-		assertEquals("$o(%C2%A2=$o(%C2%A2=%C2%A2))", s.serialize(t));
-		assertEquals("(%C2%A2=(%C2%A2=%C2%A2))", ss.serialize(t));
-		assertEquals("$o(¢=$o(¢=¢))", su.serialize(t));
-		assertEquals("(¢=(¢=¢))", ssu.serialize(t));
-		assertEquals("$o(\n\t¢=$o(\n\t\t¢=¢\n\t)\n)", sr.serialize(t));
+		assertEquals("(%C2%A2=(%C2%A2=%C2%A2))", s.serialize(t));
+		assertEquals("(¢=(¢=¢))", su.serialize(t));
+		assertEquals("(\n\t¢=(\n\t\t¢=¢\n\t)\n)", sr.serialize(t));
 
 		// 3-byte UTF-8 character
 		// Top level
 		t = "€";
 		assertEquals("%E2%82%AC", s.serialize(t));
-		assertEquals("%E2%82%AC", ss.serialize(t));
 		assertEquals("€", su.serialize(t));
-		assertEquals("€", ssu.serialize(t));
 		assertEquals("€", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{'€':'€'}");
-		assertEquals("$o(%E2%82%AC=%E2%82%AC)", s.serialize(t));
-		assertEquals("(%E2%82%AC=%E2%82%AC)", ss.serialize(t));
-		assertEquals("$o(€=€)", su.serialize(t));
-		assertEquals("(€=€)", ssu.serialize(t));
-		assertEquals("$o(\n\t€=€\n)", sr.serialize(t));
+		assertEquals("(%E2%82%AC=%E2%82%AC)", s.serialize(t));
+		assertEquals("(€=€)", su.serialize(t));
+		assertEquals("(\n\t€=€\n)", sr.serialize(t));
 
 		// 3rd level
 		t = new ObjectMap("{'€':{'€':'€'}}");
-		assertEquals("$o(%E2%82%AC=$o(%E2%82%AC=%E2%82%AC))", s.serialize(t));
-		assertEquals("(%E2%82%AC=(%E2%82%AC=%E2%82%AC))", ss.serialize(t));
-		assertEquals("$o(€=$o(€=€))", su.serialize(t));
-		assertEquals("(€=(€=€))", ssu.serialize(t));
-		assertEquals("$o(\n\t€=$o(\n\t\t€=€\n\t)\n)", sr.serialize(t));
+		assertEquals("(%E2%82%AC=(%E2%82%AC=%E2%82%AC))", s.serialize(t));
+		assertEquals("(€=(€=€))", su.serialize(t));
+		assertEquals("(\n\t€=(\n\t\t€=€\n\t)\n)", sr.serialize(t));
 
 		// 4-byte UTF-8 character
 		// Top level
 		t = "𤭢";
 		assertEquals("%F0%A4%AD%A2", s.serialize(t));
-		assertEquals("%F0%A4%AD%A2", ss.serialize(t));
 		assertEquals("𤭢", su.serialize(t));
-		assertEquals("𤭢", ssu.serialize(t));
 		assertEquals("𤭢", sr.serialize(t));
 
 		// 2nd level
 		t = new ObjectMap("{'𤭢':'𤭢'}");
-		assertEquals("$o(%F0%A4%AD%A2=%F0%A4%AD%A2)", s.serialize(t));
-		assertEquals("(%F0%A4%AD%A2=%F0%A4%AD%A2)", ss.serialize(t));
-		assertEquals("$o(𤭢=𤭢)", su.serialize(t));
-		assertEquals("(𤭢=𤭢)", ssu.serialize(t));
-		assertEquals("$o(\n\t𤭢=𤭢\n)", sr.serialize(t));
+		assertEquals("(%F0%A4%AD%A2=%F0%A4%AD%A2)", s.serialize(t));
+		assertEquals("(𤭢=𤭢)", su.serialize(t));
+		assertEquals("(\n\t𤭢=𤭢\n)", sr.serialize(t));
 
 		// 3rd level
 		t = new ObjectMap("{'𤭢':{'𤭢':'𤭢'}}");
-		assertEquals("$o(%F0%A4%AD%A2=$o(%F0%A4%AD%A2=%F0%A4%AD%A2))", s.serialize(t));
-		assertEquals("(%F0%A4%AD%A2=(%F0%A4%AD%A2=%F0%A4%AD%A2))", ss.serialize(t));
-		assertEquals("$o(𤭢=$o(𤭢=𤭢))", su.serialize(t));
-		assertEquals("(𤭢=(𤭢=𤭢))", ssu.serialize(t));
-		assertEquals("$o(\n\t𤭢=$o(\n\t\t𤭢=𤭢\n\t)\n)", sr.serialize(t));
+		assertEquals("(%F0%A4%AD%A2=(%F0%A4%AD%A2=%F0%A4%AD%A2))", s.serialize(t));
+		assertEquals("(𤭢=(𤭢=𤭢))", su.serialize(t));
+		assertEquals("(\n\t𤭢=(\n\t\t𤭢=𤭢\n\t)\n)", sr.serialize(t));
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
index 30ab795..753d585 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
@@ -41,19 +41,19 @@ public class UrlEncodingParserTest {
 		t = "_value=a";
 		assertEquals("a", p.parse(t, Object.class));
 		assertEquals("a", p.parse(t, String.class));
-		t = "_value=(a)";
+		t = "_value='a'";
 		assertEquals("a", p.parse(t, String.class));
 		assertEquals("a", p.parse(t, Object.class));
-		t = "_value=$s(a)";
+		t = "_value= 'a' ";
 		assertEquals("a", p.parse(t, String.class));
 
 		t = "a";
 		assertEquals("a", p.parseParameter(t, Object.class));
 		assertEquals("a", p.parseParameter(t, String.class));
-		t = "(a)";
+		t = "'a'";
 		assertEquals("a", p.parseParameter(t, String.class));
 		assertEquals("a", p.parseParameter(t, Object.class));
-		t = "$s(a)";
+		t = " 'a' ";
 		assertEquals("a", p.parseParameter(t, String.class));
 
 		// 2nd level
@@ -62,7 +62,7 @@ public class UrlEncodingParserTest {
 
 		// Simple map
 		// Top level
-		t = "?a=b&c=$n(123)&d=$b(false)&e=$b(true)&f=%00";
+		t = "?a=b&c=123&d=false&e=true&f=null";
 		m = p.parse(t, Map.class);
 		assertEquals("b", m.get("a"));
 		assertTrue(m.get("c") instanceof Number);
@@ -73,7 +73,7 @@ public class UrlEncodingParserTest {
 		assertEquals(Boolean.TRUE, m.get("e"));
 		assertNull(m.get("f"));
 
-		t = "$o(a=b,c=$n(123),d=$b(false),e=$b(true),f=%00)";
+		t = "(a=b,c=123,d=false,e=true,f=%00)";
 		m = p.parseParameter(t, Map.class);
 		assertEquals("b", m.get("a"));
 		assertTrue(m.get("c") instanceof Number);
@@ -84,7 +84,7 @@ public class UrlEncodingParserTest {
 		assertEquals(Boolean.TRUE, m.get("e"));
 		assertEquals("%00", m.get("f"));
 
-		t = "$o(a=b,c=$n(123),d=$b(false),e=$b(true),f=\u0000)";
+		t = "(a=b,c=123,d=false,e=true,f=null)";
 		m = p.parseParameter(t, Map.class);
 		assertTrue(m.containsKey("f"));
 		assertNull(m.get("f"));
@@ -96,75 +96,73 @@ public class UrlEncodingParserTest {
 
 		// null
 		// Top level
-		t = "_value=%00";
+		t = "_value=null";
 		assertNull(p.parse(t, Object.class));
-		t = "\u0000";
+		t = "null";
 		assertNull(p.parseParameter(t, Object.class));
-		t = "%00";
-		assertEquals("%00", p.parseParameter(t, Object.class));
 
 		// 2nd level
-		t = "?%00=%00";
+		t = "?null=null";
 		m = p.parse(t, Map.class);
 		assertTrue(m.containsKey(null));
 		assertNull(m.get(null));
 
-		t = "?\u0000=\u0000";
+		t = "?null=null";
 		m = p.parse(t, Map.class);
 		assertTrue(m.containsKey(null));
 		assertNull(m.get(null));
 
 		// 3rd level
-		t = "?%00=$o(%00=%00)";
+		t = "?null=(null=null)";
 		m = p.parse(t, Map.class);
 		assertTrue(((Map)m.get(null)).containsKey(null));
 		assertNull(((Map)m.get(null)).get(null));
 
 		// Empty array
 		// Top level
-		t = "_value=$a()";
+		t = "_value=@()";
 		l = (List)p.parse(t, Object.class);
 		assertTrue(l.isEmpty());
-		t = "_value=()";
+		t = "_value= @( ) ";
 		l = p.parse(t, List.class);
 		assertTrue(l.isEmpty());
-		t = "$a()";
+		t = "@()";
 		l = (List)p.parseParameter(t, Object.class);
 		assertTrue(l.isEmpty());
-		t = "()";
+		t = " @( ) ";
 		l = p.parseParameter(t, List.class);
 		assertTrue(l.isEmpty());
 
 		// 2nd level in map
-		t = "?x=$a()";
+		t = "?x=@()";
 		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
 		m = (Map)p.parse(t, Object.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
-		t = "?x=()";
+		t = "?x=@()";
 		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertTrue(m.containsKey("x"));
 		assertTrue(((List)m.get("x")).isEmpty());
 
 		// Empty 2 dimensional array
-		t = "_value=$a($a())";
+		t = "_value=@(@())";
 		l = (List)p.parse(t, Object.class);
 		assertTrue(l.size() == 1);
 		l = (List)l.get(0);
 		assertTrue(l.isEmpty());
-		t = "0=()";
+		t = "0=@()";
 		l = p.parse(t, LinkedList.class, List.class);
 		assertTrue(l.size() == 1);
 		l = (List)l.get(0);
 		assertTrue(l.isEmpty());
-		t = "$a($a())";
+		t = "@(@())";
 		l = (List)p.parseParameter(t, Object.class);
 		assertTrue(l.size() == 1);
 		l = (List)l.get(0);
 		assertTrue(l.isEmpty());
-		t = "(())";
+		t = "@(@())";
 		l = (List)p.parseParameter(t, LinkedList.class, List.class);
 		assertTrue(l.size() == 1);
 		l = (List)l.get(0);
@@ -172,51 +170,51 @@ public class UrlEncodingParserTest {
 
 		// Array containing empty string
 		// Top level
-		t = "_value=$a(())";
+		t = "_value=@('')";
 		l = (List)p.parse(t, Object.class);
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
-		t = "0=()";
+		t = "0=''";
 		l = p.parse(t, List.class, String.class);
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
-		t = "$a(())";
+		t = "@('')";
 		l = (List)p.parseParameter(t, Object.class);
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
-		t = "(())";
+		t = "@('')";
 		l = (List)p.parseParameter(t, List.class, String.class);
 		assertTrue(l.size() == 1);
 		assertEquals("", l.get(0));
 
 		// 2nd level
-		t = "?()=$a(())";
+		t = "?''=@('')";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("", ((List)m.get("")).get(0));
-		t = "?()=(())";
+		t = "?''=@('')";
 		m = p.parse(t, HashMap.class, String.class, List.class);
 		assertEquals("", ((List)m.get("")).get(0));
 
 		// Array containing 3 empty strings
-		t = "_value=$a(,,)";
+		t = "_value=@('','','')";
 		l = (List)p.parse(t, Object.class);
 		assertTrue(l.size() == 3);
 		assertEquals("", l.get(0));
 		assertEquals("", l.get(1));
 		assertEquals("", l.get(2));
-		t = "0=&1=&2=";
+		t = "0=''&1=''&2=''";
 		l = p.parse(t, List.class, Object.class);
 		assertTrue(l.size() == 3);
 		assertEquals("", l.get(0));
 		assertEquals("", l.get(1));
 		assertEquals("", l.get(2));
-		t = "$a(,,)";
+		t = "@('','','')";
 		l = (List)p.parseParameter(t, Object.class);
 		assertTrue(l.size() == 3);
 		assertEquals("", l.get(0));
 		assertEquals("", l.get(1));
 		assertEquals("", l.get(2));
-		t = "(,,)";
+		t = "@('','','')";
 		l = (List)p.parseParameter(t, List.class, Object.class);
 		assertTrue(l.size() == 3);
 		assertEquals("", l.get(0));
@@ -225,19 +223,19 @@ public class UrlEncodingParserTest {
 
 		// String containing \u0000
 		// Top level
-		t = "_value=$s(\u0000)";
+		t = "_value='\u0000'";
 		assertEquals("\u0000", p.parse(t, Object.class));
-		t = "_value=(\u0000)";
+		t = "_value='\u0000'";
 		assertEquals("\u0000", p.parse(t, String.class));
 		assertEquals("\u0000", p.parse(t, Object.class));
-		t = "$s(\u0000)";
+		t = "'\u0000'";
 		assertEquals("\u0000", p.parseParameter(t, Object.class));
-		t = "(\u0000)";
+		t = "'\u0000'";
 		assertEquals("\u0000", p.parseParameter(t, String.class));
 		assertEquals("\u0000", p.parseParameter(t, Object.class));
 
 		// 2nd level
-		t = "?(\u0000)=(\u0000)";
+		t = "?'\u0000'='\u0000'";
 		m = (Map)p.parse(t, Object.class);
 		assertTrue(m.size() == 1);
 		assertEquals("\u0000", m.get("\u0000"));
@@ -247,7 +245,7 @@ public class UrlEncodingParserTest {
 
 		// Boolean
 		// Top level
-		t = "_value=$b(false)";
+		t = "_value=false";
 		Boolean b = (Boolean)p.parse(t, Object.class);
 		assertEquals(Boolean.FALSE, b);
 		b = p.parse(t, Boolean.class);
@@ -255,7 +253,7 @@ public class UrlEncodingParserTest {
 		t = "_value=false";
 		b = p.parse(t, Boolean.class);
 		assertEquals(Boolean.FALSE, b);
-		t = "$b(false)";
+		t = "false";
 		b = (Boolean)p.parseParameter(t, Object.class);
 		assertEquals(Boolean.FALSE, b);
 		b = p.parseParameter(t, Boolean.class);
@@ -265,7 +263,7 @@ public class UrlEncodingParserTest {
 		assertEquals(Boolean.FALSE, b);
 
 		// 2nd level
-		t = "?x=$b(false)";
+		t = "?x=false";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals(Boolean.FALSE, m.get("x"));
 		t = "?x=false";
@@ -274,7 +272,7 @@ public class UrlEncodingParserTest {
 
 		// Number
 		// Top level
-		t = "_value=$n(123)";
+		t = "_value=123";
 		Integer i = (Integer)p.parse(t, Object.class);
 		assertEquals(123, i.intValue());
 		i = p.parse(t, Integer.class);
@@ -286,7 +284,7 @@ public class UrlEncodingParserTest {
 		t = "_value=123";
 		i = p.parse(t, Integer.class);
 		assertEquals(123, i.intValue());
-		t = "$n(123)";
+		t = "123";
 		i = (Integer)p.parseParameter(t, Object.class);
 		assertEquals(123, i.intValue());
 		i = p.parseParameter(t, Integer.class);
@@ -300,7 +298,7 @@ public class UrlEncodingParserTest {
 		assertEquals(123, i.intValue());
 
 		// 2nd level
-		t = "?x=$n(123)";
+		t = "?x=123";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals(123, ((Integer)m.get("x")).intValue());
 		m = p.parse(t, HashMap.class, String.class, Double.class);
@@ -355,86 +353,77 @@ public class UrlEncodingParserTest {
 		// Special chars
 		// These characters are escaped and not encoded.
 		// Top level
-		t = "_value=x~$~,~(~)";
+		t = "_value='x$,()'";
 		assertEquals("x$,()", p.parse(t, Object.class));
-		t = "x~$~,~(~)";
+		t = "'x$,()'";
 		assertEquals("x$,()", p.parseParameter(t, Object.class));
-		t = "_value=x~~$~~,~~(~~)";
+		t = "_value='x~~$~~,~~(~~)'";
 		assertEquals("x~$~,~(~)", p.parse(t, Object.class));
-		t = "x~~$~~,~~(~~)";
+		t = "'x~~$~~,~~(~~)'";
 		assertEquals("x~$~,~(~)", p.parseParameter(t, Object.class));
 
 		// At secondary levels, these characters are escaped and not encoded.
 		// 2nd level
-		t = "?x~$~,~(~)=x~$~,~(~)";
+		t = "?'x$,()'='x$,()'";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x$,()", m.get("x$,()"));
-		t = "?x~~$~~,~~(~~)=x~~$~~,~~(~~)";
+		t = "?'x~~$~~,~~(~~)'='x~~$~~,~~(~~)'";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x~$~,~(~)", m.get("x~$~,~(~)"));
 
 		// Equals sign
 		// Gets encoded at top level, and encoded+escaped at 2nd level.
 		// Top level
-		t = "_value=x=";
+		t = "_value='x='";
 		assertEquals("x=", p.parse(t, Object.class));
-		t = "_value=x%3D";
+		t = "_value='x%3D'";
 		assertEquals("x=", p.parse(t, Object.class));
-		t = "x=";
+		t = "'x='";
 		assertEquals("x=", p.parseParameter(t, Object.class));
-		t = "x%3D";
+		t = "'x%3D'";
 		assertEquals("x%3D", p.parseParameter(t, Object.class));
 
 		// 2nd level
-		t = "?x~%3D=x~%3D";
+		t = "?'x%3D'='x%3D'";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x=", m.get("x="));
-		t = "?x~~%3D=x~~%3D";
+		t = "?'x~~%3D'='x~~%3D'";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("x~=", m.get("x~="));
 
 		// String starting with parenthesis
 		// Top level
-		t = "_value=~(~)";
-		assertEquals("()", p.parse(t, Object.class));
-		assertEquals("()", p.parse(t, String.class));
-		t = "_value=(~(~))";
+		t = "_value='()'";
 		assertEquals("()", p.parse(t, Object.class));
 		assertEquals("()", p.parse(t, String.class));
-		t = "_value=(~(~))";
+		t = "_value='()'";
 		assertEquals("()", p.parse(t, Object.class));
 		assertEquals("()", p.parse(t, String.class));
-		t = "~(~)";
-		assertEquals("()", p.parseParameter(t, Object.class));
-		assertEquals("()", p.parseParameter(t, String.class));
-		t = "(~(~))";
-		assertEquals("()", p.parseParameter(t, Object.class));
-		assertEquals("()", p.parseParameter(t, String.class));
-		t = "(~(~))";
+		t = "'()'";
 		assertEquals("()", p.parseParameter(t, Object.class));
 		assertEquals("()", p.parseParameter(t, String.class));
 
 		// 2nd level
-		t = "?(~(~))=(~(~))";
+		t = "?'()'='()'";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("()", m.get("()"));
-		t = "?(~(~))=(~(~))";
+		t = "?'()'='()'";
 		m = p.parse(t, HashMap.class, String.class, Object.class);
 		assertEquals("()", m.get("()"));
 
 		// String starting with $
 		// Top level
-		t = "_value=(~$a)";
+		t = "_value=$a";
 		assertEquals("$a", p.parse(t, Object.class));
-		t = "_value=(~$a)";
+		t = "_value=$a";
 		assertEquals("$a", p.parse(t, Object.class));
-		t = "(~$a)";
+		t = "$a";
 		assertEquals("$a", p.parseParameter(t, Object.class));
-		t = "(~$a)";
+		t = "$a";
 		assertEquals("$a", p.parseParameter(t, Object.class));
 
 		// 2nd level
-		t = "?(~$a)=(~$a)";
+		t = "?$a=$a";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("$a", m.get("$a"));
 		m = p.parse(t, HashMap.class, String.class, Object.class);
@@ -455,7 +444,7 @@ public class UrlEncodingParserTest {
 		assertEquals("", m.get(""));
 
 		// 3rd level
-		t = "?=$o(=)";
+		t = "?=(=)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("", ((Map)m.get("")).get(""));
 		t = "?=(=)";
@@ -464,20 +453,20 @@ public class UrlEncodingParserTest {
 
 		// Newline character
 		// Top level
-		t = "_value=(%0A)";
+		t = "_value='%0A'";
 		assertEquals("\n", p.parse(t, Object.class));
-		t = "(%0A)";
+		t = "'%0A'";
 		assertEquals("%0A", p.parseParameter(t, Object.class));
-		t = "(\n)";
+		t = "'\n'";
 		assertEquals("\n", p.parseParameter(t, Object.class));
 
 		// 2nd level
-		t = "?%0A=(%0A)";
+		t = "?'%0A'='%0A'";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("\n", m.get("\n"));
 
 		// 3rd level
-		t = "?%0A=$o((%0A)=(%0A))";
+		t = "?'%0A'=('%0A'='%0A')";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("\n", ((Map)m.get("\n")).get("\n"));
 	}
@@ -511,7 +500,7 @@ public class UrlEncodingParserTest {
 		assertEquals("¢", m.get("¢"));
 
 		// 3rd level
-		t = "?%C2%A2=$o(%C2%A2=%C2%A2)";
+		t = "?%C2%A2=(%C2%A2=%C2%A2)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("¢", ((Map)m.get("¢")).get("¢"));
 
@@ -536,7 +525,7 @@ public class UrlEncodingParserTest {
 		assertEquals("€", m.get("€"));
 
 		// 3rd level
-		t = "?%E2%82%AC=$o(%E2%82%AC=%E2%82%AC)";
+		t = "?%E2%82%AC=(%E2%82%AC=%E2%82%AC)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("€", ((Map)m.get("€")).get("€"));
 
@@ -561,7 +550,7 @@ public class UrlEncodingParserTest {
 		assertEquals("𤭢", m.get("𤭢"));
 
 		// 3rd level
-		t = "?%F0%A4%AD%A2=$o(%F0%A4%AD%A2=%F0%A4%AD%A2)";
+		t = "?%F0%A4%AD%A2=(%F0%A4%AD%A2=%F0%A4%AD%A2)";
 		m = (Map)p.parse(t, Object.class);
 		assertEquals("𤭢", ((Map)m.get("𤭢")).get("𤭢"));
 	}
@@ -584,7 +573,7 @@ public class UrlEncodingParserTest {
 		assertEquals("foo", t.f1);
 		assertEquals(123, t.f2);
 
-		s = "$o(f1=foo,f2=123)";
+		s = "('f1'='foo','f2'=123)";
 		t = p.parseParameter(s, A.class);
 		assertEquals("foo", t.f1);
 		assertEquals(123, t.f2);
@@ -705,19 +694,19 @@ public class UrlEncodingParserTest {
 		c = p.parse(s, C1.class);
 		assertObjectEquals("{f1:['a~b','a~b']}", c);
 
-		s = "?f1=(a~b,a~b)";
+		s = "?f1=@(a~b,a~b)";
 		c = p.parse(s, C1.class);
 		assertObjectEquals("{f1:['a~b','a~b']}", c);
 
-		s = "?f1=((a~b),(a~b))";
+		s = "?f1=@('a~b','a~b')";
 		c = p.parse(s, C1.class);
 		assertObjectEquals("{f1:['a~b','a~b']}", c);
 
-		s = "?f1=($s(a~b),$s(a~b))";
+		s = "?f1=@('a~b','a~b')";
 		c = p.parse(s, C1.class);
 		assertObjectEquals("{f1:['a~b','a~b']}", c);
 
-		s = "?f1=$a($s(a~b),$s(a~b))";
+		s = "?f1=@('a~b','a~b')";
 		c = p.parse(s, C1.class);
 		assertObjectEquals("{f1:['a~b','a~b']}", c);
 
@@ -725,40 +714,36 @@ public class UrlEncodingParserTest {
 		c = p.parse(s, C1.class);
 		assertObjectEquals("{f1:['~','~']}", c);
 
-		s = "?f1=(~~,~~)";
+		s = "?f1=@(~~,~~)";
 		c = p.parse(s, C1.class);
 		assertObjectEquals("{f1:['~','~']}", c);
 
-		s = "?f1=(~~~~~~,~~~~~~)";
+		s = "?f1=@(~~~~~~,~~~~~~)";
 		c = p.parse(s, C1.class);
 		assertObjectEquals("{f1:['~~~','~~~']}", c);
 
-		s = "?f1=((~~~~~~),(~~~~~~))";
+		s = "?f1=@('~~~~~~','~~~~~~')";
 		c = p.parse(s, C1.class);
 		assertObjectEquals("{f1:['~~~','~~~']}", c);
 
-		// The ~ should be treated as an escape if followed by any of the following characters:  ,()~=
-		s = "?f1=~,~(~)~~~=~$,~,~(~)~~~=~$";
+		// The ~ should be treated as an escape if followed by any of the following characters:  '~
+		s = "?f1=~'~~,~'~~";
 		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:[',()~=$',',()~=$']}", c);
+		assertObjectEquals("{f1:['\\'~','\\'~']}", c);
 
-		s = "?f1=(~,~(~)~~~=~$,~,~(~)~~~=~$)";
+		s = "?f1=@(~'~~,~'~~)";
 		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:[',()~=$',',()~=$']}", c);
+		assertObjectEquals("{f1:['\\'~','\\'~']}", c);
 
-		s = "?f1=((~,~(~)~~~=~$),(~,~(~)~~~=~$))";
+		s = "?f1=@('~'~~','~'~~')";
 		c = p.parse(s, C1.class);
-		assertObjectEquals("{f1:[',()~=$',',()~=$']}", c);
+		assertObjectEquals("{f1:['\\'~','\\'~']}", c);
 
 		s = "?a~b=a~b";
 		ObjectMap m = p.parse(s, ObjectMap.class);
 		assertEquals("{'a~b':'a~b'}", m.toString());
 
-		s = "?(a~b)=(a~b)";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{'a~b':'a~b'}", m.toString());
-
-		s = "?$s(a~b)=$s(a~b)";
+		s = "?'a~b'='a~b'";
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("{'a~b':'a~b'}", m.toString());
 
@@ -766,7 +751,7 @@ public class UrlEncodingParserTest {
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("{'~':'~'}", m.toString());
 
-		s = "?(~~)=(~~)";
+		s = "?'~~'='~~'";
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("{'~':'~'}", m.toString());
 
@@ -774,37 +759,9 @@ public class UrlEncodingParserTest {
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("{'~~~':'~~~'}", m.toString());
 
-		s = "?(~~~~~~)=(~~~~~~)";
+		s = "?'~~~~~~'='~~~~~~'";
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("{'~~~':'~~~'}", m.toString());
-
-		s = "?$s(~~~~~~)=$s(~~~~~~)";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{'~~~':'~~~'}", m.toString());
-
-		s = "?~,~(~)~~~=~$=~,~(~)~~~=~$";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{',()~=$':',()~=$'}", m.toString());
-
-		s = "?(~,~(~)~~~=~$)=(~,~(~)~~~=~$)";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{',()~=$':',()~=$'}", m.toString());
-
-		s = "?$s(~,~(~)~~~=~$)=$s(~,~(~)~~~=~$)";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{',()~=$':',()~=$'}", m.toString());
-
-		s = "?%7E%2C%7E%28%7E%29%7E%7E%7E%3D%7E%24=%7E%2C%7E%28%7E%29%7E%7E%7E%3D%7E%24";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{',()~=$':',()~=$'}", m.toString());
-
-		s = "?(%7E%2C%7E%28%7E%29%7E%7E%7E%3D%7E%24)=(%7E%2C%7E%28%7E%29%7E%7E%7E%3D%7E%24)";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{',()~=$':',()~=$'}", m.toString());
-
-		s = "?$s(%7E%2C%7E%28%7E%29%7E%7E%7E%3D%7E%24)=$s(%7E%2C%7E%28%7E%29%7E%7E%7E%3D%7E%24)";
-		m = p.parse(s, ObjectMap.class);
-		assertEquals("{',()~=$':',()~=$'}", m.toString());
 	}
 
 	public static class C1 {
@@ -816,7 +773,7 @@ public class UrlEncodingParserTest {
 	//====================================================================================================
 	@Test
 	public void testWhitespace() throws Exception {
-		UrlEncodingParser p = UrlEncodingParser.DEFAULT_WS_AWARE;
+		UrlEncodingParser p = UrlEncodingParser.DEFAULT;
 		String s;
 		ObjectMap m;
 
@@ -824,36 +781,36 @@ public class UrlEncodingParserTest {
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("{f1:'foo',f2:'bar'}", m.toString());
 
-		s = "?f1=(\n\t)&f2=(\n\t)";
+		s = "?f1='\n\t'&f2='\n\t'";
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("\n\t", m.getString("f1"));
 		assertEquals("\n\t", m.getString("f2"));
 
-		s = "?f1=(\n\t)\n\t&f2=(\n\t)\n\t";
+		s = "?f1='\n\t'\n\t&f2='\n\t'\n\t";
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("\n\t", m.getString("f1"));
 		assertEquals("\n\t", m.getString("f2"));
 		assertEquals("{f1:'\\n\\t',f2:'\\n\\t'}", m.toString());  // Note that JsonSerializer escapes newlines and tabs.
 
-		s = "?f1=$s(\n\t)\n\t&f2=$s(\n\t)\n\t";
+		s = "?f1='\n\t'\n\t&f2='\n\t'\n\t";
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("\n\t", m.getString("f1"));
 		assertEquals("\n\t", m.getString("f2"));
 		assertEquals("{f1:'\\n\\t',f2:'\\n\\t'}", m.toString());  // Note that JsonSerializer escapes newlines and tabs.
 
-		s = "?f1=$o(\n\tf1a=a,\n\tf1b=b\n\t)\n\t&f2=$o(\n\tf2a=a,\n\tf2b=b\n\t)\n\t";
+		s = "?f1=(\n\tf1a=a,\n\tf1b=b\n\t)\n\t&f2=(\n\tf2a=a,\n\tf2b=b\n\t)\n\t";
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("{f1:{f1a:'a',f1b:'b'},f2:{f2a:'a',f2b:'b'}}", m.toString());  // Note that JsonSerializer escapes newlines and tabs.
 		D d = p.parse(s, D.class);
 		assertObjectEquals("{f1:{f1a:'a',f1b:'b'},f2:{f2a:'a',f2b:'b'}}", d);  // Note that JsonSerializer escapes newlines and tabs.
 
-		s = "?f1=$o(\n\tf1a=(\n\t),\n\tf1b=(\n\t)\n\t)\n\t&f2=$o(\n\tf2a=(\n\t),\n\tf2b=(\n\t)\n\t)\n\t";
+		s = "?f1=(\n\tf1a='\n\t',\n\tf1b='\n\t'\n\t)\n\t&f2=(\n\tf2a='\n\t',\n\tf2b='\n\t'\n\t)\n\t";
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("{f1:{f1a:'\\n\\t',f1b:'\\n\\t'},f2:{f2a:'\\n\\t',f2b:'\\n\\t'}}", m.toString());  // Note that JsonSerializer escapes newlines and tabs.
 		d = p.parse(s, D.class);
 		assertObjectEquals("{f1:{f1a:'\\n\\t',f1b:'\\n\\t'},f2:{f2a:'\\n\\t',f2b:'\\n\\t'}}", d);  // Note that JsonSerializer escapes newlines and tabs.
 
-		s = "?f1=$a(\n\tfoo,\n\tbar\n\t)\n\t&f2=$a(\n\tfoo,\n\tbar\n\t)\n\t";
+		s = "?f1=@(\n\tfoo,\n\tbar\n\t)\n\t&f2=@(\n\tfoo,\n\tbar\n\t)\n\t";
 		m = p.parse(s, ObjectMap.class);
 		assertEquals("{f1:['foo','bar'],f2:['foo','bar']}", m.toString());  // Note that JsonSerializer escapes newlines and tabs.
 
@@ -899,22 +856,22 @@ public class UrlEncodingParserTest {
 			+ "&f02=c&f02=d"
 			+ "&f03=1&f03=2"
 			+ "&f04=3&f04=4"
-			+ "&f05=(e,f)&f05=(g,h)"
-			+ "&f06=(i,j)&f06=(k,l)"
+			+ "&f05=@(e,f)&f05=@(g,h)"
+			+ "&f06=@(i,j)&f06=@(k,l)"
 			+ "&f07=(a=a,b=1,c=true)&f07=(a=b,b=2,c=false)"
 			+ "&f08=(a=a,b=1,c=true)&f08=(a=b,b=2,c=false)"
-			+ "&f09=((a=a,b=1,c=true))&f09=((a=b,b=2,c=false))"
-			+ "&f10=((a=a,b=1,c=true))&f10=((a=b,b=2,c=false))"
+			+ "&f09=@((a=a,b=1,c=true))&f09=@((a=b,b=2,c=false))"
+			+ "&f10=@((a=a,b=1,c=true))&f10=@((a=b,b=2,c=false))"
 			+ "&f11=a&f11=b"
 			+ "&f12=c&f12=d"
 			+ "&f13=1&f13=2"
 			+ "&f14=3&f14=4"
-			+ "&f15=(e,f)&f15=(g,h)"
-			+ "&f16=(i,j)&f16=(k,l)"
+			+ "&f15=@(e,f)&f15=@(g,h)"
+			+ "&f16=@(i,j)&f16=@(k,l)"
 			+ "&f17=(a=a,b=1,c=true)&f17=(a=b,b=2,c=false)"
 			+ "&f18=(a=a,b=1,c=true)&f18=(a=b,b=2,c=false)"
-			+ "&f19=((a=a,b=1,c=true))&f19=((a=b,b=2,c=false))"
-			+ "&f20=((a=a,b=1,c=true))&f20=((a=b,b=2,c=false))";
+			+ "&f19=@((a=a,b=1,c=true))&f19=@((a=b,b=2,c=false))"
+			+ "&f20=@((a=a,b=1,c=true))&f20=@((a=b,b=2,c=false))";
 
 		DTOs.B t = p.parse(in, DTOs.B.class);
 		String e = "{"
@@ -955,22 +912,22 @@ public class UrlEncodingParserTest {
 			+ "&f02=c&f02=d"
 			+ "&f03=1&f03=2"
 			+ "&f04=3&f04=4"
-			+ "&f05=(e,f)&f05=(g,h)"
-			+ "&f06=(i,j)&f06=(k,l)"
+			+ "&f05=@(e,f)&f05=@(g,h)"
+			+ "&f06=@(i,j)&f06=@(k,l)"
 			+ "&f07=(a=a,b=1,c=true)&f07=(a=b,b=2,c=false)"
 			+ "&f08=(a=a,b=1,c=true)&f08=(a=b,b=2,c=false)"
-			+ "&f09=((a=a,b=1,c=true))&f09=((a=b,b=2,c=false))"
-			+ "&f10=((a=a,b=1,c=true))&f10=((a=b,b=2,c=false))"
+			+ "&f09=@((a=a,b=1,c=true))&f09=@((a=b,b=2,c=false))"
+			+ "&f10=@((a=a,b=1,c=true))&f10=@((a=b,b=2,c=false))"
 			+ "&f11=a&f11=b"
 			+ "&f12=c&f12=d"
 			+ "&f13=1&f13=2"
 			+ "&f14=3&f14=4"
-			+ "&f15=(e,f)&f15=(g,h)"
-			+ "&f16=(i,j)&f16=(k,l)"
+			+ "&f15=@(e,f)&f15=@(g,h)"
+			+ "&f16=@(i,j)&f16=@(k,l)"
 			+ "&f17=(a=a,b=1,c=true)&f17=(a=b,b=2,c=false)"
 			+ "&f18=(a=a,b=1,c=true)&f18=(a=b,b=2,c=false)"
-			+ "&f19=((a=a,b=1,c=true))&f19=((a=b,b=2,c=false))"
-			+ "&f20=((a=a,b=1,c=true))&f20=((a=b,b=2,c=false))";
+			+ "&f19=@((a=a,b=1,c=true))&f19=@((a=b,b=2,c=false))"
+			+ "&f20=@((a=a,b=1,c=true))&f20=@((a=b,b=2,c=false))";
 
 		DTOs.C t = p.parse(in, DTOs.C.class);
 		String e = "{"


Mime
View raw message