You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/03/10 16:51:28 UTC

[32/34] incubator-juneau git commit: Add builder classes for all serializers and parsers.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core-test/src/test/java/org/apache/juneau/BeanMapTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/BeanMapTest.java b/juneau-core-test/src/test/java/org/apache/juneau/BeanMapTest.java
index 0b328db..a254525 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/BeanMapTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/BeanMapTest.java
@@ -22,6 +22,7 @@ import org.apache.juneau.html.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.transforms.*;
+import org.apache.juneau.uon.*;
 import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.utils.*;
 import org.apache.juneau.xml.*;
@@ -30,11 +31,11 @@ import org.junit.*;
 @SuppressWarnings({"unchecked","rawtypes","serial","javadoc"})
 public class BeanMapTest {
 
-	JsonSerializer serializer = JsonSerializer.DEFAULT_LAX.clone();
+	JsonSerializer serializer = JsonSerializer.DEFAULT_LAX;
 
-	BeanContext bc = ContextFactory.create()
-			.addToBeanDictionary(MyBeanDictionaryMap.class)
-			.addPojoSwaps(CalendarSwap.ISO8601DTZ.class)
+	BeanContext bc = PropertyStore.create()
+			.setBeanDictionary(MyBeanDictionaryMap.class)
+			.setPojoSwaps(CalendarSwap.ISO8601DTZ.class)
 			.getBeanContext();
 	BeanSession session = bc.createSession();
 
@@ -478,7 +479,7 @@ public class BeanMapTest {
 		m.put("b", new D2());
 		assertEquals("default", t.b.s);
 
-		JsonParser p = new JsonParser().addToBeanDictionary(D2.class);
+		JsonParser p = new JsonParserBuilder().beanDictionary(D2.class).build();
 		m.put("lb1", new ObjectList("[{_type:'D2',s:'foobar'}]", p));
 		assertEquals(ObjectList.class.getName(), t.lb1.getClass().getName());
 		assertEquals(D2.class.getName(), t.lb1.get(0).getClass().getName());
@@ -664,7 +665,7 @@ public class BeanMapTest {
 		assertEquals(HEnum.THREE, t7.getEnum2());
 
 		// Create instance directly from JSON.
-		JsonParser p = new JsonParser().addToBeanDictionary(H.class);
+		JsonParser p = new JsonParserBuilder().beanDictionary(H.class).build();
 		t7 = (H)p.parse("{_type:'H',enum1:'THREE',enum2:'ONE'}", Object.class);
 		assertEquals("{_type:'H',enum1:'THREE',enum2:'ONE'}", serializer.serialize(t7));
 		assertEquals(HEnum.THREE, t7.enum1);
@@ -956,7 +957,7 @@ public class BeanMapTest {
 
 		// JSON
 		String json = "{baz:789,foo:123,bar:456}";
-		p = new JsonParser().setIgnoreUnknownBeanProperties(true);
+		p = new JsonParserBuilder().ignoreUnknownBeanProperties(true).build();
 		t = p.parse(json, O.class);
 		assertEquals(123, t.foo);
 
@@ -970,7 +971,7 @@ public class BeanMapTest {
 
 		// XML
 		String xml = "<object><baz type='number'>789</baz><foo type='number'>123</foo><bar type='number'>456</bar></object>";
-		p = new XmlParser().setIgnoreUnknownBeanProperties(true);
+		p = new XmlParserBuilder().ignoreUnknownBeanProperties(true).build();
 		t = p.parse(xml, O.class);
 		assertEquals(123, t.foo);
 
@@ -984,7 +985,7 @@ public class BeanMapTest {
 
 		// HTML
 		String html = "<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>baz</string></td><td><number>789</number></td></tr><tr><td><string>foo</string></td><td><number>123</number></td></tr><tr><td><string>bar</string></td><td><number>456</number></td></tr></table>";
-		p = new HtmlParser().setIgnoreUnknownBeanProperties(true);
+		p = new HtmlParserBuilder().ignoreUnknownBeanProperties(true).build();
 		t = p.parse(html, O.class);
 		assertEquals(123, t.foo);
 
@@ -998,12 +999,12 @@ public class BeanMapTest {
 
 		// UON
 		String uon = "(baz=789,foo=123,bar=456)";
-		p = new UonParser().setIgnoreUnknownBeanProperties(true);
+		p = new UonParserBuilder().ignoreUnknownBeanProperties(true).build();
 		t = p.parse(uon, O.class);
 		assertEquals(123, t.foo);
 
 		try {
-			p = new UonParser();
+			p = UonParser.DEFAULT;
 			t = p.parse(json, O.class);
 			fail("Expected exception never occurred");
 		} catch (Exception e) {
@@ -1012,12 +1013,12 @@ public class BeanMapTest {
 
 		// URL-Encoding
 		String urlencoding = "baz=789&foo=123&bar=456";
-		p = new UrlEncodingParser().setIgnoreUnknownBeanProperties(true);
+		p = new UrlEncodingParserBuilder().ignoreUnknownBeanProperties(true).build();
 		t = p.parse(urlencoding, O.class);
 		assertEquals(123, t.foo);
 
 		try {
-			p = new UrlEncodingParser();
+			p = UrlEncodingParser.DEFAULT;
 			t = p.parse(json, O.class);
 			fail("Expected exception never occurred");
 		} catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core-test/src/test/java/org/apache/juneau/ClassMetaTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/ClassMetaTest.java b/juneau-core-test/src/test/java/org/apache/juneau/ClassMetaTest.java
index 10a02a9..e01e5d5 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/ClassMetaTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/ClassMetaTest.java
@@ -115,7 +115,7 @@ public class ClassMetaTest {
 		BeanContext bc;
 		ClassMeta<?> ooo, hi1, hc1, hi2, hc2;
 
-		bc = ContextFactory.create().getBeanContext();
+		bc = PropertyStore.create().getBeanContext();
 		ooo = bc.getClassMeta(Object.class);
 		hi1 = bc.getClassMeta(HI1.class);
 		hc1 = bc.getClassMeta(HC1.class);
@@ -137,7 +137,7 @@ public class ClassMetaTest {
 		assertEquals(hi2.getSerializedClassMeta().getInnerClass(), HI2.class);
 		assertEquals(hc2.getSerializedClassMeta().getInnerClass(), HC2.class);
 
-		bc = ContextFactory.create().addPojoSwaps(HI1Swap.class).getBeanContext();
+		bc = PropertyStore.create().setPojoSwaps(HI1Swap.class).getBeanContext();
 		ooo = bc.getClassMeta(Object.class);
 		hi1 = bc.getClassMeta(HI1.class);
 		hc1 = bc.getClassMeta(HC1.class);
@@ -159,7 +159,7 @@ public class ClassMetaTest {
 		assertEquals(hi2.getSerializedClassMeta().getInnerClass(), Map.class);
 		assertEquals(hc2.getSerializedClassMeta().getInnerClass(), Map.class);
 
-		bc = ContextFactory.create().addPojoSwaps(HC1Swap.class).getBeanContext();
+		bc = PropertyStore.create().setPojoSwaps(HC1Swap.class).getBeanContext();
 		ooo = bc.getClassMeta(Object.class);
 		hi1 = bc.getClassMeta(HI1.class);
 		hc1 = bc.getClassMeta(HC1.class);
@@ -181,7 +181,7 @@ public class ClassMetaTest {
 		assertEquals(hi2.getSerializedClassMeta().getInnerClass(), HI2.class);
 		assertEquals(hc2.getSerializedClassMeta().getInnerClass(), Map.class);
 
-		bc = ContextFactory.create().addPojoSwaps(HI2Swap.class).getBeanContext();
+		bc = PropertyStore.create().setPojoSwaps(HI2Swap.class).getBeanContext();
 		ooo = bc.getClassMeta(Object.class);
 		hi1 = bc.getClassMeta(HI1.class);
 		hc1 = bc.getClassMeta(HC1.class);
@@ -203,7 +203,7 @@ public class ClassMetaTest {
 		assertEquals(hi2.getSerializedClassMeta().getInnerClass(), Map.class);
 		assertEquals(hc2.getSerializedClassMeta().getInnerClass(), Map.class);
 
-		bc = ContextFactory.create().addPojoSwaps(HC2Swap.class).getBeanContext();
+		bc = PropertyStore.create().setPojoSwaps(HC2Swap.class).getBeanContext();
 		ooo = bc.getClassMeta(Object.class);
 		hi1 = bc.getClassMeta(HI1.class);
 		hc1 = bc.getClassMeta(HC1.class);
@@ -225,7 +225,7 @@ public class ClassMetaTest {
 		assertEquals(hi2.getSerializedClassMeta().getInnerClass(), HI2.class);
 		assertEquals(hc2.getSerializedClassMeta().getInnerClass(), Map.class);
 
-		bc = ContextFactory.create().addPojoSwaps(HI1Swap.class,HC1Swap.class,HI2Swap.class,HC2Swap.class).getBeanContext();
+		bc = PropertyStore.create().setPojoSwaps(HI1Swap.class,HC1Swap.class,HI2Swap.class,HC2Swap.class).getBeanContext();
 		ooo = bc.getClassMeta(Object.class);
 		hi1 = bc.getClassMeta(HI1.class);
 		hc1 = bc.getClassMeta(HC1.class);
@@ -247,7 +247,7 @@ public class ClassMetaTest {
 		assertEquals(hi2.getSerializedClassMeta().getInnerClass(), Map.class);
 		assertEquals(hc2.getSerializedClassMeta().getInnerClass(), Map.class);
 
-		bc = ContextFactory.create().addPojoSwaps(HC2Swap.class,HI2Swap.class,HC1Swap.class,HI1Swap.class).getBeanContext();
+		bc = PropertyStore.create().setPojoSwaps(HC2Swap.class,HI2Swap.class,HC1Swap.class,HI1Swap.class).getBeanContext();
 		ooo = bc.getClassMeta(Object.class);
 		hi1 = bc.getClassMeta(HI1.class);
 		hc1 = bc.getClassMeta(HC1.class);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core-test/src/test/java/org/apache/juneau/ComboTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/ComboTest.java b/juneau-core-test/src/test/java/org/apache/juneau/ComboTest.java
index cb4b935..4b89c8e 100644
--- a/juneau-core-test/src/test/java/org/apache/juneau/ComboTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/ComboTest.java
@@ -12,37 +12,22 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.junit.Assert.assertEquals;
+import static org.apache.juneau.jena.Constants.*;
+import static org.junit.Assert.*;
 
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
-import org.apache.juneau.html.HtmlParser;
-import org.apache.juneau.html.HtmlSerializer;
-import org.apache.juneau.jena.RdfParser;
-import org.apache.juneau.jena.RdfSerializer;
-import org.apache.juneau.json.JsonParser;
-import org.apache.juneau.json.JsonSerializer;
-import org.apache.juneau.msgpack.MsgPackParser;
-import org.apache.juneau.msgpack.MsgPackSerializer;
-import org.apache.juneau.parser.InputStreamParser;
-import org.apache.juneau.parser.Parser;
-import org.apache.juneau.parser.ReaderParser;
-import org.apache.juneau.serializer.OutputStreamSerializer;
-import org.apache.juneau.serializer.Serializer;
-import org.apache.juneau.serializer.WriterSerializer;
-import org.apache.juneau.urlencoding.UonParser;
-import org.apache.juneau.urlencoding.UonSerializer;
-import org.apache.juneau.urlencoding.UrlEncodingParser;
-import org.apache.juneau.urlencoding.UrlEncodingSerializer;
-import org.apache.juneau.xml.XmlParser;
-import org.apache.juneau.xml.XmlSerializer;
-import org.junit.FixMethodOrder;
-import org.junit.Test;
-import org.junit.runners.MethodSorters;
+import org.apache.juneau.html.*;
+import org.apache.juneau.jena.*;
+import org.apache.juneau.json.*;
+import org.apache.juneau.msgpack.*;
+import org.apache.juneau.parser.*;
+import org.apache.juneau.serializer.*;
+import org.apache.juneau.uon.*;
+import org.apache.juneau.urlencoding.*;
+import org.apache.juneau.xml.*;
+import org.junit.*;
+import org.junit.runners.*;
 
 /**
  * Superclass for tests that verify results against all supported content types. 
@@ -297,8 +282,8 @@ public abstract class ComboTest {
 	//--------------------------------------------------------------------------------
 	// JSON - 't' property
 	//--------------------------------------------------------------------------------
-	WriterSerializer sJsonT = JsonSerializer.DEFAULT_LAX.clone().setBeanTypePropertyName("t");
-	ReaderParser pJsonT = JsonParser.DEFAULT.clone().setBeanTypePropertyName("t");
+	WriterSerializer sJsonT = new JsonSerializerBuilder().simple().beanTypePropertyName("t").build();
+	ReaderParser pJsonT = new JsonParserBuilder().beanTypePropertyName("t").build();
 	
 	@Test
 	public void serializeJsonT() throws Exception {
@@ -345,8 +330,8 @@ public abstract class ComboTest {
 	//--------------------------------------------------------------------------------
 	// XML - 't' property
 	//--------------------------------------------------------------------------------
-	WriterSerializer sXmlT = XmlSerializer.DEFAULT_SQ.clone().setBeanTypePropertyName("t");
-	ReaderParser pXmlT = XmlParser.DEFAULT.clone().setBeanTypePropertyName("t");
+	WriterSerializer sXmlT = new XmlSerializerBuilder().sq().beanTypePropertyName("t").build();
+	ReaderParser pXmlT = new XmlParserBuilder().beanTypePropertyName("t").build();
 	
 	@Test
 	public void serializeXmlT() throws Exception {
@@ -409,8 +394,8 @@ public abstract class ComboTest {
 	//--------------------------------------------------------------------------------
 	// HTML - 't' property
 	//--------------------------------------------------------------------------------
-	WriterSerializer sHtmlT = HtmlSerializer.DEFAULT_SQ.clone().setBeanTypePropertyName("t");
-	ReaderParser pHtmlT = HtmlParser.DEFAULT.clone().setBeanTypePropertyName("t");
+	WriterSerializer sHtmlT = new HtmlSerializerBuilder().sq().beanTypePropertyName("t").build();
+	ReaderParser pHtmlT =  new HtmlParserBuilder().beanTypePropertyName("t").build();
 	
 	@Test
 	public void serializeHtmlT() throws Exception {
@@ -457,8 +442,8 @@ public abstract class ComboTest {
 	//--------------------------------------------------------------------------------
 	// UON - 't' property
 	//--------------------------------------------------------------------------------
-	WriterSerializer sUonT = UonSerializer.DEFAULT.clone().setBeanTypePropertyName("t");
-	ReaderParser pUonT = UonParser.DEFAULT.clone().setBeanTypePropertyName("t");
+	WriterSerializer sUonT = new UonSerializerBuilder().beanTypePropertyName("t").build();
+	ReaderParser pUonT = new UonParserBuilder().beanTypePropertyName("t").build();
 	
 	@Test
 	public void serializeUonT() throws Exception {
@@ -505,8 +490,8 @@ public abstract class ComboTest {
 	//--------------------------------------------------------------------------------
 	// UrlEncoding - 't' property
 	//--------------------------------------------------------------------------------
-	WriterSerializer sUrlEncodingT = UrlEncodingSerializer.DEFAULT.clone().setBeanTypePropertyName("t");
-	ReaderParser pUrlEncodingT = UrlEncodingParser.DEFAULT.clone().setBeanTypePropertyName("t");
+	WriterSerializer sUrlEncodingT = new UrlEncodingSerializerBuilder().beanTypePropertyName("t").build();
+	ReaderParser pUrlEncodingT = new UrlEncodingParserBuilder().beanTypePropertyName("t").build();
 	
 	@Test
 	public void serializeUrlEncodingT() throws Exception {
@@ -558,8 +543,8 @@ public abstract class ComboTest {
 	//--------------------------------------------------------------------------------
 	// MsgPack - 't' property
 	//--------------------------------------------------------------------------------
-	OutputStreamSerializer sMsgPackT = MsgPackSerializer.DEFAULT.clone().setBeanTypePropertyName("t");
-	InputStreamParser pMsgPackT = MsgPackParser.DEFAULT.clone().setBeanTypePropertyName("t");
+	OutputStreamSerializer sMsgPackT = new MsgPackSerializerBuilder().beanTypePropertyName("t").build();
+	InputStreamParser pMsgPackT = new MsgPackParserBuilder().beanTypePropertyName("t").build();
 	
 	@Test
 	public void serializeMsgPackT() throws Exception {
@@ -595,8 +580,8 @@ public abstract class ComboTest {
 	//--------------------------------------------------------------------------------
 	// RdfXml - 't' property
 	//--------------------------------------------------------------------------------
-	WriterSerializer sRdfXmlT = RdfSerializer.DEFAULT_XMLABBREV.clone().setBeanTypePropertyName("t");
-	ReaderParser pRdfXmlT = RdfParser.DEFAULT_XML.clone().setBeanTypePropertyName("t");
+	WriterSerializer sRdfXmlT = new RdfSerializerBuilder().language(LANG_RDF_XML_ABBREV).beanTypePropertyName("t").build();
+	ReaderParser pRdfXmlT = new RdfParserBuilder().beanTypePropertyName("t").build();
 	
 	@Test
 	public void serializeRdfXmlT() throws Exception {
@@ -611,7 +596,7 @@ public abstract class ComboTest {
 	//--------------------------------------------------------------------------------
 	// RdfXml - Readable
 	//--------------------------------------------------------------------------------
-	WriterSerializer sRdfXmlR = RdfSerializer.DEFAULT_XMLABBREV.clone().setUseWhitespace(true);
+	WriterSerializer sRdfXmlR = new RdfSerializerBuilder().language(LANG_RDF_XML_ABBREV).ws().build();
 	ReaderParser pRdfXmlR = RdfParser.DEFAULT_XML;
 	
 	@Test

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core-test/src/test/java/org/apache/juneau/ContextFactoryTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/ContextFactoryTest.java b/juneau-core-test/src/test/java/org/apache/juneau/ContextFactoryTest.java
deleted file mode 100644
index f48b825..0000000
--- a/juneau-core-test/src/test/java/org/apache/juneau/ContextFactoryTest.java
+++ /dev/null
@@ -1,823 +0,0 @@
-// ***************************************************************************************************************************
-// * 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;
-
-import static org.apache.juneau.TestUtils.*;
-import static org.junit.Assert.*;
-
-import java.util.*;
-
-import org.apache.juneau.xml.*;
-import org.junit.*;
-
-
-@SuppressWarnings({"rawtypes","javadoc"})
-public class ContextFactoryTest {
-
-	//====================================================================================================
-	// testSimpleProperties()
-	//====================================================================================================
-	@Test
-	public void testSimpleProperties() {
-		ContextFactory f = ContextFactory.create();
-
-		f.setProperty("A.f1", "1");
-		f.setProperty("A.f2", "2");
-
-		assertObjectEquals("{'A.f1':'1','A.f2':'2'}", f.getPropertyMap("A").asMap());
-
-		f.setProperty("B.f3", "3");
-		f.setProperty("A.f1", String.class);
-		f.setProperty("A.f2", 4);
-
-		assertObjectEquals("{'A.f1':'java.lang.String','A.f2':4}", f.getPropertyMap("A").asMap());
-
-		f.setProperty("A.f2", null);
-		f.setProperty("A.f2", null);
-		assertObjectEquals("{'A.f1':'java.lang.String'}", f.getPropertyMap("A").asMap());
-
-		try {
-			f.setProperty(null, null);
-			fail("Exception expected");
-		} catch (Exception e) {
-			assertEquals("Invalid property name specified: 'null'", e.getMessage());
-		}
-
-		try {
-			f.addToProperty("A.f1", "foo");
-			fail("Exception expected");
-		} catch (Exception e) {
-			assertEquals("Cannot add value 'foo' (java.lang.String) to property 'A.f1' (SIMPLE).", e.getMessage());
-		}
-
-		try {
-			f.removeFromProperty("A.f1", "foo");
-			fail("Exception expected");
-		} catch (Exception e) {
-			assertEquals("Cannot remove value 'foo' (java.lang.String) from property 'A.f1' (SIMPLE).", e.getMessage());
-		}
-
-		try {
-			f.putToProperty("A.f1", "foo", "bar");
-			fail("Exception expected");
-		} catch (Exception e) {
-			assertEquals("Cannot put value 'foo'(java.lang.String)->'bar'(java.lang.String) to property 'A.f1' (SIMPLE).", e.getMessage());
-		}
-
-		try {
-			f.putToProperty("A.f1", "foo");
-			fail("Exception expected");
-		} catch (Exception e) {
-			assertEquals("Cannot put value 'foo' (java.lang.String) to property 'A.f1' (SIMPLE).", e.getMessage());
-		}
-	}
-
-	//====================================================================================================
-	// testSetProperties()
-	//====================================================================================================
-	@Test
-	public void testSetProperties() {
-		ContextFactory f = ContextFactory.create();
-		String key = "A.f1.set";
-
-		f.setProperty(key, Arrays.asList(2,3,1));
-		assertObjectEquals("[1,2,3]", f.getProperty(key, int[].class, null));
-
-		f.addToProperty(key, 0);
-		f.addToProperty(key, new int[]{4,5});
-		assertObjectEquals("[0,1,2,3,4,5]", f.getProperty(key, int[].class, null));
-		f.addToProperty(key, new HashSet<String>(Arrays.asList("6","7")));
-		assertObjectEquals("[0,1,2,3,4,5,6,7]", f.getProperty(key, int[].class, null));
-		f.addToProperty(key, new int[]{4,5});
-		assertObjectEquals("[0,1,2,3,4,5,6,7]", f.getProperty(key, int[].class, null));
-
-		f.removeFromProperty(key, 4);
-		f.removeFromProperty(key, new HashSet<String>(Arrays.asList("1")));
-		f.removeFromProperty(key, new String[]{"2","9"});
-		assertObjectEquals("[0,3,5,6,7]", f.getProperty(key, int[].class, null));
-		assertObjectEquals("['0','3','5','6','7']", f.getProperty(key, String[].class, null));
-
-		f.setProperty(key, Arrays.asList("foo","bar","baz"));
-		assertObjectEquals("['bar','baz','foo']", f.getProperty(key, String[].class, null));
-
-		f.setProperty(key, "[1,2,3]");
-		assertObjectEquals("[1,2,3]", f.getProperty(key, int[].class, null));
-
-		f.setProperty(key, "['1','2','3']");
-		assertObjectEquals("[1,2,3]", f.getProperty(key, int[].class, null));
-
-		try {
-			f.putToProperty("A.f1.set", "foo");
-			fail("Exception expected");
-		} catch (Exception e) {
-			assertEquals("Cannot put value 'foo' (java.lang.String) to property 'A.f1.set' (SET).", e.getMessage());
-		}
-
-		try {
-			f.putToProperty("A.f1.set", "foo", "bar");
-			fail("Exception expected");
-		} catch (Exception e) {
-			assertEquals("Cannot put value 'foo'(java.lang.String)->'bar'(java.lang.String) to property 'A.f1.set' (SET).", e.getMessage());
-		}
-	}
-
-	//====================================================================================================
-	// testListProperties()
-	//====================================================================================================
-	@Test
-	public void testListProperties() {
-		ContextFactory f = ContextFactory.create();
-		String key = "A.f1.list";
-
-		f.setProperty(key, Arrays.asList(2,3,1));
-		assertObjectEquals("[2,3,1]", f.getProperty(key, int[].class, null));
-
-		f.addToProperty(key, 0);
-		f.addToProperty(key, new int[]{4,5});
-		assertObjectEquals("[4,5,0,2,3,1]", f.getProperty(key, int[].class, null));
-		f.addToProperty(key, new TreeSet<String>(Arrays.asList("6","7")));
-		assertObjectEquals("[6,7,4,5,0,2,3,1]", f.getProperty(key, int[].class, null));
-		f.addToProperty(key, new int[]{4,5});
-		assertObjectEquals("[4,5,6,7,0,2,3,1]", f.getProperty(key, int[].class, null));
-
-		f.removeFromProperty(key, 4);
-		f.removeFromProperty(key, new HashSet<String>(Arrays.asList("1")));
-		f.removeFromProperty(key, new String[]{"2","9"});
-		assertObjectEquals("[5,6,7,0,3]", f.getProperty(key, int[].class, null));
-		assertObjectEquals("['5','6','7','0','3']", f.getProperty(key, String[].class, null));
-
-		f.setProperty(key, Arrays.asList("foo","bar","baz"));
-		assertObjectEquals("['foo','bar','baz']", f.getProperty(key, String[].class, null));
-	}
-
-	//====================================================================================================
-	// testMapProperties()
-	//====================================================================================================
-	@SuppressWarnings("serial")
-	@Test
-	public void testMapProperties() {
-		ContextFactory f = ContextFactory.create();
-		String key = "A.f1.map";
-
-		f.setProperty(key, new HashMap<String,String>(){{put("1","1");put("3","3");put("2","2");}});
-		assertObjectEquals("{'1':1,'2':2,'3':3}", f.getMap(key, Integer.class, Integer.class, null));
-
-		f.setProperty(key, "{'1':1,'2':2,'3':3}");
-		assertObjectEquals("{'1':1,'2':2,'3':3}", f.getMap(key, Integer.class, Integer.class, null));
-
-		f.putToProperty(key, "{'3':4,'4':5,'5':6}");
-		assertObjectEquals("{'1':1,'2':2,'3':4,'4':5,'5':6}", f.getMap(key, Integer.class, Integer.class, null));
-	}
-
-	//====================================================================================================
-	// Hash code and comparison
-	//====================================================================================================
-	@SuppressWarnings({ "serial" })
-	@Test
-	public void testHashCodes() throws Exception {
-		ContextFactory f1 = ContextFactory.create();
-		f1.setProperty("A.a", 1);
-		f1.setProperty("A.b", true);
-		f1.setProperty("A.c", String.class);
-		f1.setProperty("A.d.set", new Object[]{1, true, String.class});
-		f1.setProperty("A.e.map", new HashMap<Object,Object>(){{put(true,true);put(1,1);put(String.class,String.class);}});
-
-		ContextFactory f2 = ContextFactory.create();
-		f2.setProperty("A.e.map", new HashMap<Object,Object>(){{put("1","1");put("true","true");put("java.lang.String","java.lang.String");}});
-		f2.setProperty("A.d.set", new Object[]{"true","1","java.lang.String"});
-		f2.setProperty("A.c", "java.lang.String");
-		f2.setProperty("A.b", "true");
-		f2.setProperty("A.a", "1");
-
-		ContextFactory.PropertyMap p1 = f1.getPropertyMap("A");
-		ContextFactory.PropertyMap p2 = f2.getPropertyMap("A");
-		assertEquals(p1.hashCode(), p2.hashCode());
-	}
-
-	@SuppressWarnings("unchecked")
-	private static class ConversionTest {
-		ContextFactory config = ContextFactory.create();
-		String pName;
-		Object in;
-
-		private ConversionTest(String pName, Object in) {
-			this.pName = pName;
-			this.in = in;
-		}
-
-		private ConversionTest test(Class c, String expected) {
-			try {
-				config.setProperty(pName, in);
-				assertObjectEquals(expected, config.getProperty(pName, c, null));
-			} catch (Exception x) {
-				assertEquals(expected.toString(), x.getLocalizedMessage());
-			}
-			return this;
-		}
-
-		private ConversionTest testMap(Class k, Class v, String expected) {
-			try {
-				config.setProperty(pName, in);
-				assertObjectEquals(expected, config.getMap(pName, k, v, null));
-			} catch (Exception x) {
-				assertEquals(expected, x.getLocalizedMessage());
-			}
-			return this;
-		}
-	}
-
-	//====================================================================================================
-	// Conversions on simple properties
-	//====================================================================================================
-	@Test
-	@SuppressWarnings({ "serial" })
-	public void testConversionsOnSimpleProperties() throws Exception {
-		String pName = "A.a";
-
-		//--------------------------------------------------------------------------------
-		// boolean
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, true)
-			.test(boolean.class, "true")
-			.test(int.class, "1")
-			.test(String.class, "'true'")
-			.test(Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Boolean' to type 'java.lang.Class'.  Value=true.")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Boolean' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=true.")
-			.test(String[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Boolean' to type 'java.lang.String[]'.  Value=true.")
-			.test(Class[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Boolean' to type 'java.lang.Class[]'.  Value=true.")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Boolean' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=true.")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Boolean' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=true.")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Boolean' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=true.")
-		;
-
-		//--------------------------------------------------------------------------------
-		// int
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, 123)
-			.test(boolean.class, "true")
-			.test(int.class, "123")
-			.test(String.class, "'123'")
-			.test(Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Integer' to type 'java.lang.Class'.  Value=123.")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Integer' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=123.")
-			.test(String[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Integer' to type 'java.lang.String[]'.  Value=123.")
-			.test(Class[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Integer' to type 'java.lang.Class[]'.  Value=123.")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Integer' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=123.")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Integer' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=123.")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Integer' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=123.")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Class
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, String.class)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class' to type 'int'.  Value='java.lang.String'.")
-			.test(String.class, "'java.lang.String'")
-			.test(Class.class, "'java.lang.String'")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value='java.lang.String'.")
-			.test(String[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class' to type 'java.lang.String[]'.  Value='java.lang.String'.")
-			.test(Class[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class' to type 'java.lang.Class[]'.  Value='java.lang.String'.")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value='java.lang.String'.")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value='java.lang.String'.")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value='java.lang.String'.")
-		;
-
-		//--------------------------------------------------------------------------------
-		// String
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, "foo")
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String' to type 'int'.  Value='foo'.")
-			.test(String.class, "'foo'")
-			.test(Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String' to type 'java.lang.Class'.  Value='foo'.")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value='foo'.")
-			.test(String[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String' to type 'java.lang.String[]'.  Value='foo'.")
-			.test(Class[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String' to type 'java.lang.Class[]'.  Value='foo'.")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value='foo'.")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value='foo'.")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value='foo'.")
-		;
-		new ConversionTest(pName, "java.lang.String")
-			.test(Class.class, "'java.lang.String'")
-		;
-		new ConversionTest(pName, "true")
-			.test(boolean.class, "true")
-		;
-		new ConversionTest(pName, "ONE")
-			.test(TestEnum.class, "'ONE'")
-		;
-		new ConversionTest(pName, "123")
-			.test(int.class, "123")
-		;
-
-		//--------------------------------------------------------------------------------
-		// enum
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, TestEnum.ONE)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum' to type 'int'.  Value='ONE'.")
-			.test(String.class, "'ONE'")
-			.test(Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum' to type 'java.lang.Class'.  Value='ONE'.")
-			.test(TestEnum.class, "'ONE'")
-			.test(String[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum' to type 'java.lang.String[]'.  Value='ONE'.")
-			.test(Class[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum' to type 'java.lang.Class[]'.  Value='ONE'.")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value='ONE'.")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value='ONE'.")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value='ONE'.")
-		;
-
-		//--------------------------------------------------------------------------------
-		// String[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new String[]{"foo","bar"})
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String[]' to type 'int'.  Value=['foo','bar'].")
-			.test(String.class, "'[\\'foo\\',\\'bar\\']'")
-			.test(Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String[]' to type 'java.lang.Class'.  Value=['foo','bar'].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String[]' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=['foo','bar'].")
-			.test(String[].class, "['foo','bar']")
-			.test(Class[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String[]' to type 'java.lang.Class[]'.  Value=['foo','bar'].")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String[]' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=['foo','bar'].")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String[]' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=['foo','bar'].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.String[]' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=['foo','bar'].")
-		;
-		new ConversionTest(pName, new String[]{"ONE","TWO"})
-			.test(TestEnum[].class, "['ONE','TWO']")
-		;
-		new ConversionTest(pName, new String[]{"true","false"})
-			.test(boolean[].class, "[true,false]")
-		;
-		new ConversionTest(pName, new String[]{"java.lang.String","java.lang.Integer"})
-			.test(Class[].class, "['java.lang.String','java.lang.Integer']")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Class[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new Class[]{String.class,Integer.class})
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class[]' to type 'int'.  Value=['java.lang.String','java.lang.Integer'].")
-			.test(String.class, "'[\\'java.lang.String\\',\\'java.lang.Integer\\']'")
-			.test(Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class[]' to type 'java.lang.Class'.  Value=['java.lang.String','java.lang.Integer'].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class[]' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=['java.lang.String','java.lang.Integer'].")
-			.test(String[].class, "['java.lang.String','java.lang.Integer']")
-			.test(Class[].class, "['java.lang.String','java.lang.Integer']")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class[]' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=['java.lang.String','java.lang.Integer'].")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class[]' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=['java.lang.String','java.lang.Integer'].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.lang.Class[]' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=['java.lang.String','java.lang.Integer'].")
-		;
-
-		//--------------------------------------------------------------------------------
-		// enum[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new TestEnum[]{TestEnum.ONE,TestEnum.TWO})
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum[]' to type 'int'.  Value=['ONE','TWO'].")
-			.test(String.class, "'[\\'ONE\\',\\'TWO\\']'")
-			.test(Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum[]' to type 'java.lang.Class'.  Value=['ONE','TWO'].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum[]' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=['ONE','TWO'].")
-			.test(String[].class, "['ONE','TWO']")
-			.test(Class[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum[]' to type 'java.lang.Class[]'.  Value=['ONE','TWO'].")
-			.test(TestEnum[].class, "['ONE','TWO']")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum[]' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=['ONE','TWO'].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'org.apache.juneau.ContextFactoryTest$TestEnum[]' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=['ONE','TWO'].")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Map<String,String>
-		//--------------------------------------------------------------------------------
-		LinkedHashMap<String,String> m1 = new LinkedHashMap<String,String>();
-		m1.put("foo","bar");
-		new ConversionTest(pName, m1)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'int'.  Value={foo:'bar'}.")
-			.test(String.class, "'{foo:\\'bar\\'}'")
-			.test(Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'java.lang.Class'.  Value={foo:'bar'}.")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value={foo:'bar'}.")
-			.test(String[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'java.lang.String[]'.  Value={foo:'bar'}.")
-			.test(Class[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'java.lang.Class[]'.  Value={foo:'bar'}.")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value={foo:'bar'}.")
-			.testMap(String.class, String.class, "{foo:'bar'}")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value={foo:'bar'}.")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Map<Class,Class>
-		//--------------------------------------------------------------------------------
-		LinkedHashMap<Class,Class> m2 = new LinkedHashMap<Class,Class>();
-		m2.put(String.class, Integer.class);
-		new ConversionTest(pName, m2)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'int'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.test(String.class, "'{\\'java.lang.String\\':\\'java.lang.Integer\\'}'")
-			.test(Class.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'java.lang.Class'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.test(String[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'java.lang.String[]'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.test(Class[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'java.lang.Class[]'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a'.  Invalid data conversion from type 'java.util.LinkedHashMap' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.testMap(String.class, String.class, "{'java.lang.String':'java.lang.Integer'}")
-			.testMap(Class.class, Class.class, "{'java.lang.String':'java.lang.Integer'}")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Namespace
-		//--------------------------------------------------------------------------------
-		final Namespace n = new Namespace("foo","bar");
-		new ConversionTest(pName, n)
-			.test(String.class, "'{name:\\'foo\\',uri:\\'bar\\'}'")
-			.test(Namespace.class, "{name:'foo',uri:'bar'}");
-
-		//--------------------------------------------------------------------------------
-		// Namespace[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new Namespace[]{n})
-			.test(String.class, "'[{name:\\'foo\\',uri:\\'bar\\'}]'")
-			.test(Namespace[].class, "[{name:'foo',uri:'bar'}]");
-
-		//--------------------------------------------------------------------------------
-		// Map<Namespace,Namespace>
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new LinkedHashMap<Namespace,Namespace>(){{put(n,n);}})
-			.testMap(Namespace.class, Namespace.class, "{'{name:\\'foo\\',uri:\\'bar\\'}':{name:'foo',uri:'bar'}}")
-			.testMap(String.class, String.class, "{'{name:\\'foo\\',uri:\\'bar\\'}':'{name:\\'foo\\',uri:\\'bar\\'}'}");
-	}
-
-	//====================================================================================================
-	// Conversions on set properties
-	//====================================================================================================
-	@Test
-	@SuppressWarnings({ "serial" })
-	public void testConversionsOnSetProperties() throws Exception {
-		String pName = "A.a.set";
-
-		//--------------------------------------------------------------------------------
-		// boolean
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, true)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'int'.  Value=[true].")
-			.test(String.class, "'[true]'")
-			.test(Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class'.  Value=[true].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=[true].")
-			.test(String[].class, "['true']")
-			.test(Class[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class[]'.  Value=[true].")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=[true].")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=[true].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=[true].")
-		;
-
-		//--------------------------------------------------------------------------------
-		// int
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, 123)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'int'.  Value=[123].")
-			.test(String.class, "'[123]'")
-			.test(Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class'.  Value=[123].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=[123].")
-			.test(String[].class, "['123']")
-			.test(Class[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class[]'.  Value=[123].")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=[123].")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=[123].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=[123].")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Class
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, String.class)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'int'.  Value=['java.lang.String'].")
-			.test(String.class, "'[\\'java.lang.String\\']'")
-			.test(Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class'.  Value=['java.lang.String'].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=['java.lang.String'].")
-			.test(String[].class, "['java.lang.String']")
-			.test(Class[].class, "['java.lang.String']")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=['java.lang.String'].")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=['java.lang.String'].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=['java.lang.String'].")
-		;
-
-		//--------------------------------------------------------------------------------
-		// String
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, "foo")
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'int'.  Value=['foo'].")
-			.test(String.class, "'[\\'foo\\']'")
-			.test(Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class'.  Value=['foo'].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=['foo'].")
-			.test(String[].class, "['foo']")
-			.test(Class[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class[]'.  Value=['foo'].")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=['foo'].")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=['foo'].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=['foo'].")
-		;
-		new ConversionTest(pName, Arrays.asList("java.lang.String"))
-			.test(Class[].class, "['java.lang.String']")
-		;
-		new ConversionTest(pName, Arrays.asList("true"))
-			.test(boolean[].class, "[true]")
-		;
-		new ConversionTest(pName, Arrays.asList("ONE"))
-			.test(TestEnum[].class, "['ONE']")
-		;
-		new ConversionTest(pName, Arrays.asList("123"))
-			.test(int[].class, "[123]")
-		;
-
-		//--------------------------------------------------------------------------------
-		// enum
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, TestEnum.ONE)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'int'.  Value=['ONE'].")
-			.test(String.class, "'[\\'ONE\\']'")
-			.test(Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class'.  Value=['ONE'].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=['ONE'].")
-			.test(String[].class, "['ONE']")
-			.test(Class[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class[]'.  Value=['ONE'].")
-			.test(TestEnum[].class, "['ONE']")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=['ONE'].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=['ONE'].")
-		;
-
-		//--------------------------------------------------------------------------------
-		// String[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new String[]{"foo","bar"})
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'int'.  Value=['bar','foo'].")
-			.test(String.class, "'[\\'bar\\',\\'foo\\']'")
-			.test(Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class'.  Value=['bar','foo'].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=['bar','foo'].")
-			.test(String[].class, "['bar','foo']")
-			.test(Class[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class[]'.  Value=['bar','foo'].")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=['bar','foo'].")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=['bar','foo'].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=['bar','foo'].")
-		;
-		new ConversionTest(pName, new String[]{"ONE","TWO"})
-			.test(TestEnum[].class, "['ONE','TWO']")
-		;
-		new ConversionTest(pName, new String[]{"true","false"})
-			.test(boolean[].class, "[false,true]")
-		;
-		new ConversionTest(pName, new String[]{"java.lang.String","java.lang.Integer"})
-			.test(Class[].class, "['java.lang.Integer','java.lang.String']")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Class[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new Class[]{String.class,Integer.class})
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'int'.  Value=['java.lang.Integer','java.lang.String'].")
-			.test(String.class, "'[\\'java.lang.Integer\\',\\'java.lang.String\\']'")
-			.test(Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class'.  Value=['java.lang.Integer','java.lang.String'].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=['java.lang.Integer','java.lang.String'].")
-			.test(String[].class, "['java.lang.Integer','java.lang.String']")
-			.test(Class[].class, "['java.lang.Integer','java.lang.String']")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=['java.lang.Integer','java.lang.String'].")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=['java.lang.Integer','java.lang.String'].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=['java.lang.Integer','java.lang.String'].")
-		;
-
-		//--------------------------------------------------------------------------------
-		// enum[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new TestEnum[]{TestEnum.ONE,TestEnum.TWO})
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'int'.  Value=['ONE','TWO'].")
-			.test(String.class, "'[\\'ONE\\',\\'TWO\\']'")
-			.test(Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class'.  Value=['ONE','TWO'].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=['ONE','TWO'].")
-			.test(String[].class, "['ONE','TWO']")
-			.test(Class[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class[]'.  Value=['ONE','TWO'].")
-			.test(TestEnum[].class, "['ONE','TWO']")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=['ONE','TWO'].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=['ONE','TWO'].")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Map<String,String>
-		//--------------------------------------------------------------------------------
-		LinkedHashMap<String,String> m1 = new LinkedHashMap<String,String>();
-		m1.put("foo","bar");
-		new ConversionTest(pName, m1)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'int'.  Value=[{foo:'bar'}].")
-			.test(String.class, "'[{foo:\\'bar\\'}]'")
-			.test(Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class'.  Value=[{foo:'bar'}].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=[{foo:'bar'}].")
-			.test(String[].class, "['{foo:\\'bar\\'}']")
-			.test(Class[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class[]'.  Value=[{foo:'bar'}].")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=[{foo:'bar'}].")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=[{foo:'bar'}].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=[{foo:'bar'}].")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Map<Class,Class>
-		//--------------------------------------------------------------------------------
-		LinkedHashMap<Class,Class> m2 = new LinkedHashMap<Class,Class>();
-		m2.put(String.class, Integer.class);
-		new ConversionTest(pName, m2)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'int'.  Value=[{'java.lang.String':'java.lang.Integer'}].")
-			.test(String.class, "'[{\\'java.lang.String\\':\\'java.lang.Integer\\'}]'")
-			.test(Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class'.  Value=[{'java.lang.String':'java.lang.Integer'}].")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value=[{'java.lang.String':'java.lang.Integer'}].")
-			.test(String[].class, "['{\\'java.lang.String\\':\\'java.lang.Integer\\'}']")
-			.test(Class[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.lang.Class[]'.  Value=[{'java.lang.String':'java.lang.Integer'}].")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value=[{'java.lang.String':'java.lang.Integer'}].")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=[{'java.lang.String':'java.lang.Integer'}].")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value=[{'java.lang.String':'java.lang.Integer'}].")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Namespace
-		//--------------------------------------------------------------------------------
-		final Namespace n = new Namespace("foo","bar");
-		new ConversionTest(pName, Arrays.asList(n))
-			.test(String.class, "'[{name:\\'foo\\',uri:\\'bar\\'}]'")
-			.test(Namespace.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'org.apache.juneau.xml.Namespace'.  Value=[{name:'foo',uri:'bar'}].");
-
-		//--------------------------------------------------------------------------------
-		// Namespace[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new Namespace[]{n})
-			.test(String.class, "'[{name:\\'foo\\',uri:\\'bar\\'}]'")
-			.test(Namespace[].class, "[{name:'foo',uri:'bar'}]");
-
-		//--------------------------------------------------------------------------------
-		// Map<Namespace,Namespace>
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new LinkedHashMap<Namespace,Namespace>(){{put(n,n);}})
-			.testMap(Namespace.class, Namespace.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<org.apache.juneau.xml.Namespace,org.apache.juneau.xml.Namespace>'.  Value=[{'{name:\\'foo\\',uri:\\'bar\\'}':{name:'foo',uri:'bar'}}].")
-			.testMap(String.class, String.class, "Could not retrieve config property 'A.a.set'.  Invalid data conversion from type 'java.util.concurrent.ConcurrentSkipListSet' to type 'java.util.LinkedHashMap<java.lang.String,java.lang.String>'.  Value=[{'{name:\\'foo\\',uri:\\'bar\\'}':{name:'foo',uri:'bar'}}].");
-	}
-
-
-	//====================================================================================================
-	// Conversions on map properties
-	//====================================================================================================
-	@Test
-	@SuppressWarnings({ "serial" })
-	public void testConversionsOnMapProperties() throws Exception {
-		String pName = "A.a.map";
-
-		//--------------------------------------------------------------------------------
-		// boolean
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, true)
-			.test(boolean.class, "Cannot put value true (java.lang.Boolean) to property 'A.a.map' (MAP).")
-		;
-
-		//--------------------------------------------------------------------------------
-		// int
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, 123)
-			.test(int.class, "Cannot put value 123 (java.lang.Integer) to property 'A.a.map' (MAP).")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Class
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, String.class)
-			.test(Class.class, "Cannot put value 'java.lang.String' (java.lang.Class) to property 'A.a.map' (MAP).")
-		;
-
-		//--------------------------------------------------------------------------------
-		// String
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, "foo")
-			.test(String.class, "Cannot put value 'foo' (java.lang.String) to property 'A.a.map' (MAP).")
-		;
-
-		//--------------------------------------------------------------------------------
-		// enum
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, TestEnum.ONE)
-			.test(TestEnum.class, "Cannot put value 'ONE' (org.apache.juneau.ContextFactoryTest$TestEnum) to property 'A.a.map' (MAP).")
-		;
-
-		//--------------------------------------------------------------------------------
-		// String[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new String[]{"foo","bar"})
-			.test(String[].class, "Cannot put value ['foo','bar'] (java.lang.String[]) to property 'A.a.map' (MAP).")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Class[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new Class[]{String.class,Integer.class})
-			.test(Class[].class, "Cannot put value ['java.lang.String','java.lang.Integer'] (java.lang.Class[]) to property 'A.a.map' (MAP).")
-		;
-
-		//--------------------------------------------------------------------------------
-		// enum[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new TestEnum[]{TestEnum.ONE,TestEnum.TWO})
-			.test(TestEnum[].class, "Cannot put value ['ONE','TWO'] (org.apache.juneau.ContextFactoryTest$TestEnum[]) to property 'A.a.map' (MAP).")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Map<String,String>
-		//--------------------------------------------------------------------------------
-		LinkedHashMap<String,String> m1 = new LinkedHashMap<String,String>();
-		m1.put("foo","bar");
-		new ConversionTest(pName, m1)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'int'.  Value={foo:'bar'}.")
-			.test(String.class, "'{foo:\\'bar\\'}'")
-			.test(Class.class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'java.lang.Class'.  Value={foo:'bar'}.")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value={foo:'bar'}.")
-			.test(String[].class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'java.lang.String[]'.  Value={foo:'bar'}.")
-			.test(Class[].class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'java.lang.Class[]'.  Value={foo:'bar'}.")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value={foo:'bar'}.")
-			.testMap(String.class, String.class, "{foo:'bar'}")
-			.testMap(Class.class, Class.class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'java.util.LinkedHashMap<java.lang.Class,java.lang.Class>'.  Value={foo:'bar'}.")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Map<Class,Class>
-		//--------------------------------------------------------------------------------
-		LinkedHashMap<Class,Class> m2 = new LinkedHashMap<Class,Class>();
-		m2.put(String.class, Integer.class);
-		new ConversionTest(pName, m2)
-			.test(boolean.class, "false")
-			.test(int.class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'int'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.test(String.class, "'{\\'java.lang.String\\':\\'java.lang.Integer\\'}'")
-			.test(Class.class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'java.lang.Class'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.test(TestEnum.class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'org.apache.juneau.ContextFactoryTest$TestEnum'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.test(String[].class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'java.lang.String[]'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.test(Class[].class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'java.lang.Class[]'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.test(TestEnum[].class, "Could not retrieve config property 'A.a.map'.  Invalid data conversion from type 'java.util.Collections$SynchronizedMap' to type 'org.apache.juneau.ContextFactoryTest$TestEnum[]'.  Value={'java.lang.String':'java.lang.Integer'}.")
-			.testMap(String.class, String.class, "{'java.lang.String':'java.lang.Integer'}")
-			.testMap(Class.class, Class.class, "{'java.lang.String':'java.lang.Integer'}")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Namespace
-		//--------------------------------------------------------------------------------
-		final Namespace n = new Namespace("foo","bar");
-		new ConversionTest(pName, Arrays.asList(n))
-			.test(String.class, "Cannot put value [{name:'foo',uri:'bar'}] (java.util.Arrays$ArrayList) to property 'A.a.map' (MAP).")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Namespace[]
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new Namespace[]{n})
-			.test(String.class, "Cannot put value [{name:'foo',uri:'bar'}] (org.apache.juneau.xml.Namespace[]) to property 'A.a.map' (MAP).")
-		;
-
-		//--------------------------------------------------------------------------------
-		// Map<Namespace,Namespace>
-		//--------------------------------------------------------------------------------
-		new ConversionTest(pName, new LinkedHashMap<Namespace,Namespace>(){{put(n,n);}})
-			.testMap(Namespace.class, Namespace.class, "{'{name:\\'foo\\',uri:\\'bar\\'}':{name:'foo',uri:'bar'}}")
-			.testMap(String.class, String.class, "{'{name:\\'foo\\',uri:\\'bar\\'}':'{name:\\'foo\\',uri:\\'bar\\'}'}");
-	}
-
-	public enum TestEnum {
-		ONE,TWO,TREE;
-	}
-
-	//====================================================================================================
-	// testSystemPropertyDefaults()
-	//====================================================================================================
-	@Test
-	public void testSystemPropertyDefaults() {
-		System.setProperty("Foo.f1", "true");
-		System.setProperty("Foo.f2", "123");
-		System.setProperty("Foo.f3", "TWO");
-
-		ContextFactory f = ContextFactory.create();
-
-		assertObjectEquals("true", f.getProperty("Foo.f1", boolean.class, false));
-		assertObjectEquals("123", f.getProperty("Foo.f2", int.class, 0));
-		assertObjectEquals("'TWO'", f.getProperty("Foo.f3", TestEnum.class, TestEnum.ONE));
-
-		f.setProperty("Foo.f1", false);
-		f.setProperty("Foo.f2", 456);
-		f.setProperty("Foo.f3", TestEnum.TREE);
-
-		assertObjectEquals("false", f.getProperty("Foo.f1", boolean.class, false));
-		assertObjectEquals("456", f.getProperty("Foo.f2", int.class, 0));
-		assertObjectEquals("'TREE'", f.getProperty("Foo.f3", TestEnum.class, TestEnum.ONE));
-	}
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core-test/src/test/java/org/apache/juneau/DataConversionTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/DataConversionTest.java b/juneau-core-test/src/test/java/org/apache/juneau/DataConversionTest.java
index d3d8ed1..be7c264 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/DataConversionTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/DataConversionTest.java
@@ -144,7 +144,7 @@ public class DataConversionTest {
 	@Test
 	public void testObjectSwaps() throws Exception {
 		String s = "Jan 12, 2001";
-		BeanSession session = ContextFactory.create().addPojoSwaps(CalendarSwap.DateMedium.class).getBeanContext().createSession();
+		BeanSession session = PropertyStore.create().setPojoSwaps(CalendarSwap.DateMedium.class).getBeanContext().createSession();
 		Calendar c = session.convertToType(s, GregorianCalendar.class);
 		assertEquals(2001, c.get(Calendar.YEAR));
 		c = session.convertToType(s, Calendar.class);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core-test/src/test/java/org/apache/juneau/IgnoredClassesTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/IgnoredClassesTest.java b/juneau-core-test/src/test/java/org/apache/juneau/IgnoredClassesTest.java
index 28674f3..e22d86d 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/IgnoredClassesTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/IgnoredClassesTest.java
@@ -41,24 +41,24 @@ public class IgnoredClassesTest {
 	@Test
 	public void testIgnorePackages() throws Exception {
 		A a = new A();
-		JsonSerializer s = new JsonSerializer.Simple();
-		assertEquals("{f1:'isBean'}", s.serialize(a));
-		s.addNotBeanPackages("org.apache.juneau");
-		assertEquals("'isNotBean'", s.serialize(a));
+		JsonSerializerBuilder s = new JsonSerializerBuilder().simple();
+		assertEquals("{f1:'isBean'}", s.build().serialize(a));
+		s.notBeanPackages("org.apache.juneau");
+		assertEquals("'isNotBean'", s.build().serialize(a));
 		s.removeNotBeanPackages("org.apache.juneau");
-		assertEquals("{f1:'isBean'}", s.serialize(a));
-		s.addNotBeanPackages("org.apache.juneau.*");
-		assertEquals("'isNotBean'", s.serialize(a));
+		assertEquals("{f1:'isBean'}", s.build().serialize(a));
+		s.notBeanPackages("org.apache.juneau.*");
+		assertEquals("'isNotBean'", s.build().serialize(a));
 		s.removeNotBeanPackages("org.apache.juneau.*");
-		assertEquals("{f1:'isBean'}", s.serialize(a));
-		s.addNotBeanPackages("org.apache.juneau.*");
-		assertEquals("'isNotBean'", s.serialize(a));
+		assertEquals("{f1:'isBean'}", s.build().serialize(a));
+		s.notBeanPackages("org.apache.juneau.*");
+		assertEquals("'isNotBean'", s.build().serialize(a));
 		s.removeNotBeanPackages("org.apache.juneau.*");
-		assertEquals("{f1:'isBean'}", s.serialize(a));
-		s.addNotBeanPackages("org.apache.juneau");
-		assertEquals("'isNotBean'", s.serialize(a));
-		s.addNotBeanPackages("org.apache.juneau.x");
-		assertEquals("'isNotBean'", s.serialize(a));
+		assertEquals("{f1:'isBean'}", s.build().serialize(a));
+		s.notBeanPackages("org.apache.juneau");
+		assertEquals("'isNotBean'", s.build().serialize(a));
+		s.notBeanPackages("org.apache.juneau.x");
+		assertEquals("'isNotBean'", s.build().serialize(a));
 	}
 
 	public static class A {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core-test/src/test/java/org/apache/juneau/MediaRangeTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/MediaRangeTest.java b/juneau-core-test/src/test/java/org/apache/juneau/MediaRangeTest.java
index f3fd216..882ca6a 100644
--- a/juneau-core-test/src/test/java/org/apache/juneau/MediaRangeTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/MediaRangeTest.java
@@ -12,15 +12,14 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.*;
 
-import java.util.Arrays;
-import java.util.Collection;
+import java.util.*;
 
-import org.apache.juneau.json.JsonSerializer;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import org.apache.juneau.json.*;
+import org.junit.*;
+import org.junit.runner.*;
+import org.junit.runners.*;
 
 /**
  * Verifies that the MediaRange and MediaType classes parse and sort Accept headers correctly.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core-test/src/test/java/org/apache/juneau/PojoSwapTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/PojoSwapTest.java b/juneau-core-test/src/test/java/org/apache/juneau/PojoSwapTest.java
index d9b7944..5fa73b2 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/PojoSwapTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/PojoSwapTest.java
@@ -29,8 +29,8 @@ public class PojoSwapTest {
 	//====================================================================================================
 	@Test
 	public void testSameType() throws Exception {
-		JsonSerializer s = JsonSerializer.DEFAULT_LAX.clone().addPojoSwaps(ASwap.class);
-		JsonParser p = JsonParser.DEFAULT.clone().addPojoSwaps(ASwap.class);
+		JsonSerializer s = new JsonSerializerBuilder().simple().pojoSwaps(ASwap.class).build();
+		JsonParser p = new JsonParserBuilder().pojoSwaps(ASwap.class).build();
 		String r;
 
 		r = s.serialize("foobar");