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/02/15 20:50:47 UTC

[8/8] incubator-juneau git commit: Modification to UON spec. Remove bean subtype support.

Modification to UON spec.  Remove bean subtype support.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/097b8103
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/097b8103
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/097b8103

Branch: refs/heads/master
Commit: 097b8103237202ecd3b79a8232773591c957aa9d
Parents: 268a3e3
Author: JamesBognar <ja...@apache.org>
Authored: Wed Feb 15 15:50:33 2017 -0500
Committer: JamesBognar <ja...@apache.org>
Committed: Wed Feb 15 15:50:33 2017 -0500

----------------------------------------------------------------------
 .../java/org/apache/juneau/jena/RdfParser.java  |  35 +-
 .../org/apache/juneau/jena/RdfSerializer.java   |  14 +-
 .../juneau/jena/RdfSerializerSession.java       |   2 +-
 .../java/org/apache/juneau/BeanFilterTest.java  |  14 +-
 .../java/org/apache/juneau/BeanMapTest.java     |   6 +-
 .../test/java/org/apache/juneau/TestUtils.java  |  14 +-
 .../juneau/a/rttests/RoundTripBeanMapsTest.java |  51 +-
 .../a/rttests/RoundTripLargeObjectsTest.java    |  14 +-
 .../juneau/a/rttests/RoundTripMapsTest.java     |   4 +-
 .../apache/juneau/a/rttests/RoundTripTest.java  |  28 +-
 .../a/rttests/RoundTripTransformBeansTest.java  |   7 +-
 .../apache/juneau/dto/cognos/CognosXmlTest.java |   2 +-
 .../juneau/dto/html5/BasicHtmlSchemaTest.java   | 745 ++++++++++++++++++-
 .../juneau/dto/jsonschema/JsonSchemaTest.java   |  13 +-
 .../java/org/apache/juneau/html/CommonTest.java |   2 +-
 .../apache/juneau/jena/CommonParserTest.java    |   4 +-
 .../java/org/apache/juneau/jena/CommonTest.java |   2 +-
 .../org/apache/juneau/jena/CommonXmlTest.java   |   2 +-
 .../juneau/json/JsonParserEdgeCasesTest.java    |   2 +-
 .../juneau/transforms/CalendarSwapTest.java     |  30 +-
 .../urlencoding/CommonParser_UonTest.java       |  12 +-
 .../CommonParser_UrlEncodingTest.java           |  16 +-
 .../juneau/urlencoding/Common_UonTest.java      |  81 +-
 .../urlencoding/Common_UrlEncodingTest.java     |  71 +-
 .../juneau/urlencoding/UonParserTest.java       | 205 +++--
 .../juneau/urlencoding/UonSerializerTest.java   | 364 ++++-----
 .../urlencoding/UrlEncodingParserTest.java      | 273 +++----
 .../urlencoding/UrlEncodingSerializerTest.java  | 313 ++++----
 .../org/apache/juneau/utils/PojoRestTest.java   |   6 +-
 .../org/apache/juneau/xml/XmlContentTest.java   |   4 +-
 juneau-core/.project                            |  47 +-
 .../java/org/apache/juneau/BeanContext.java     |   6 +-
 .../main/java/org/apache/juneau/BeanMap.java    |   9 -
 .../main/java/org/apache/juneau/BeanMeta.java   | 133 +---
 .../org/apache/juneau/BeanPropertyMeta.java     |  11 +-
 .../java/org/apache/juneau/BeanRegistry.java    |  69 +-
 .../java/org/apache/juneau/BeanSession.java     |  24 +-
 .../main/java/org/apache/juneau/ClassMeta.java  |  44 +-
 .../main/java/org/apache/juneau/CoreApi.java    |  10 +-
 .../java/org/apache/juneau/LockedException.java |   2 +-
 .../java/org/apache/juneau/annotation/Bean.java |  56 +-
 .../org/apache/juneau/dto/atom/AtomBuilder.java |   6 +-
 .../apache/juneau/dto/html5/HtmlElement.java    |   3 +
 .../juneau/dto/html5/HtmlElementContainer.java  |   3 +-
 .../juneau/dto/html5/HtmlElementMixed.java      |   3 +-
 .../juneau/dto/html5/HtmlElementText.java       |   3 +
 .../java/org/apache/juneau/dto/html5/Pre.java   |   2 +-
 .../org/apache/juneau/dto/html5/Script.java     |   1 +
 .../java/org/apache/juneau/dto/html5/Style.java |   1 +
 .../apache/juneau/dto/jsonschema/Sample.java    |   4 +-
 .../apache/juneau/encoders/EncoderGroup.java    |   4 +-
 .../apache/juneau/html/HtmlDocSerializer.java   |   4 +-
 .../juneau/html/HtmlDocSerializerSession.java   |   2 +-
 .../java/org/apache/juneau/html/HtmlParser.java |  32 +-
 .../apache/juneau/html/HtmlParserSession.java   |  16 -
 .../org/apache/juneau/html/HtmlSerializer.java  |   6 +-
 .../juneau/html/HtmlSerializerSession.java      |   2 +-
 .../java/org/apache/juneau/html/HtmlWriter.java |   6 +-
 .../java/org/apache/juneau/ini/ConfigMgr.java   |   8 +-
 .../org/apache/juneau/internal/AsciiSet.java    |  15 +
 .../java/org/apache/juneau/json/JsonParser.java |  20 +-
 .../org/apache/juneau/json/JsonSerializer.java  |  43 +-
 .../juneau/json/JsonSerializerContext.java      |  17 -
 .../juneau/json/JsonSerializerSession.java      |  16 +-
 .../java/org/apache/juneau/json/JsonWriter.java |   9 +-
 .../apache/juneau/msgpack/MsgPackParser.java    | 139 ++--
 .../juneau/msgpack/MsgPackSerializer.java       |  15 +-
 .../org/apache/juneau/parser/ParserGroup.java   |   4 +-
 .../org/apache/juneau/parser/ParserReader.java  |  35 +-
 .../org/apache/juneau/parser/ParserSession.java |  74 ++
 .../serializer/OutputStreamSerializer.java      |  16 +-
 .../apache/juneau/serializer/Serializer.java    |  15 +-
 .../juneau/serializer/SerializerContext.java    |  16 +-
 .../juneau/serializer/SerializerGroup.java      |  14 +-
 .../juneau/serializer/SerializerSession.java    |  78 +-
 .../juneau/serializer/SerializerWriter.java     |  39 +-
 .../juneau/serializer/WriterSerializer.java     |   2 +-
 .../transform/AnnotationBeanFilterBuilder.java  |  19 +-
 .../org/apache/juneau/transform/BeanFilter.java |  35 +-
 .../juneau/transform/BeanFilterBuilder.java     |  88 +--
 .../org/apache/juneau/transform/package.html    |  75 --
 .../apache/juneau/urlencoding/UonParser.java    | 223 +++---
 .../juneau/urlencoding/UonParserContext.java    |  20 +-
 .../juneau/urlencoding/UonParserSession.java    |  14 +-
 .../juneau/urlencoding/UonSerializer.java       | 248 ++----
 .../urlencoding/UonSerializerContext.java       |  80 --
 .../urlencoding/UonSerializerSession.java       |  26 +-
 .../apache/juneau/urlencoding/UonWriter.java    | 104 +--
 .../juneau/urlencoding/UrlEncodingParser.java   |  41 +-
 .../urlencoding/UrlEncodingSerializer.java      | 134 +---
 .../urlencoding/doc-files/Example_HTML.png      | Bin 32778 -> 136001 bytes
 .../doc-files/Example_UrlEncoding.png           | Bin 20958 -> 0 bytes
 .../juneau/urlencoding/doc-files/rfc_uon.txt    | 177 ++---
 .../org/apache/juneau/urlencoding/package.html  | 344 +++++----
 .../java/org/apache/juneau/xml/XmlParser.java   |  26 +-
 .../apache/juneau/xml/XmlSchemaSerializer.java  |   2 +-
 .../org/apache/juneau/xml/XmlSerializer.java    |   8 +-
 .../apache/juneau/xml/XmlSerializerSession.java |   2 +-
 .../java/org/apache/juneau/xml/XmlWriter.java   |   6 +-
 .../src/main/javadoc/doc-files/Server.Uon.png   | Bin 28160 -> 0 bytes
 .../javadoc/doc-files/Server.UrlEncoding.png    | Bin 32516 -> 0 bytes
 juneau-core/src/main/javadoc/overview.html      |  58 +-
 .../src/main/javadoc/resources/juneau-code.css  |  10 +-
 .../examples/rest/AddressBookResourceTest.java  |  16 +-
 .../juneau/examples/rest/RestTestcase.java      |  37 +
 .../juneau/examples/rest/RootResourcesTest.java |   2 +-
 .../SampleRemoteableServicesResourceTest.java   |   4 +-
 .../juneau/examples/rest/TestMicroservice.java  |  57 ++
 .../rest/TestMultiPartFormPostsTest.java        |   2 +-
 .../apache/juneau/examples/rest/TestUtils.java  |   2 +-
 .../apache/juneau/examples/rest/_TestSuite.java |  18 +-
 .../apache/juneau/rest/test/ParamsResource.java |  10 +-
 .../juneau/rest/test/AcceptCharsetTest.java     |   2 +-
 .../rest/test/BeanContextPropertiesTest.java    |   2 +-
 .../juneau/rest/test/CallbackStringsTest.java   |   2 +-
 .../juneau/rest/test/CharsetEncodingsTest.java  |   2 +-
 .../juneau/rest/test/ClientVersionTest.java     |   2 +-
 .../org/apache/juneau/rest/test/ConfigTest.java |   2 +-
 .../org/apache/juneau/rest/test/Constants.java  |   2 +-
 .../apache/juneau/rest/test/ContentTest.java    | 102 +--
 .../rest/test/DefaultContentTypesTest.java      |   2 +-
 .../juneau/rest/test/ErrorConditionsTest.java   |   2 +-
 .../org/apache/juneau/rest/test/GroupsTest.java |   2 +-
 .../org/apache/juneau/rest/test/GzipTest.java   |   2 +-
 .../juneau/rest/test/InheritanceTest.java       |   2 +-
 .../apache/juneau/rest/test/LargePojosTest.java |   2 +-
 .../apache/juneau/rest/test/MessagesTest.java   |   2 +-
 .../juneau/rest/test/NlsPropertyTest.java       |   2 +-
 .../org/apache/juneau/rest/test/NlsTest.java    |   2 +-
 .../juneau/rest/test/NoParserInputTest.java     |   2 +-
 .../apache/juneau/rest/test/OnPostCallTest.java |   2 +-
 .../apache/juneau/rest/test/OnPreCallTest.java  |   2 +-
 .../juneau/rest/test/OptionsWithoutNlsTest.java |   2 +-
 .../rest/test/OverlappingMethodsTest.java       |   2 +-
 .../org/apache/juneau/rest/test/ParamsTest.java |  80 +-
 .../apache/juneau/rest/test/ParsersTest.java    |   2 +-
 .../org/apache/juneau/rest/test/PathTest.java   |   2 +-
 .../org/apache/juneau/rest/test/PathsTest.java  |   2 +-
 .../apache/juneau/rest/test/PropertiesTest.java |   2 +-
 .../apache/juneau/rest/test/RestClientTest.java |   2 +-
 .../apache/juneau/rest/test/RestTestcase.java   |  36 +
 .../apache/juneau/rest/test/RestUtilsTest.java  |   2 +-
 .../juneau/rest/test/SerializersTest.java       |   2 +-
 .../juneau/rest/test/StaticFilesTest.java       |   2 +-
 .../juneau/rest/test/TestMicroservice.java      |  60 ++
 .../org/apache/juneau/rest/test/TestUtils.java  |   4 +-
 .../apache/juneau/rest/test/TransformsTest.java |   2 +-
 .../org/apache/juneau/rest/test/UrisTest.java   |   2 +-
 .../apache/juneau/rest/test/UrlContentTest.java |   2 +-
 .../juneau/rest/test/UrlPathPatternTest.java    |   2 +-
 .../org/apache/juneau/rest/test/_TestSuite.java |  22 +-
 .../org/apache/juneau/rest/RestRequest.java     |  18 +-
 .../apache/juneau/rest/RestServletDefault.java  |  12 -
 .../rest/jena/RestServletJenaDefault.java       |  12 -
 .../juneau/rest/response/DefaultHandler.java    |   2 +-
 155 files changed, 2815 insertions(+), 2907 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
----------------------------------------------------------------------
diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
index 468afc0..3d5baef 100644
--- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
+++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfParser.java
@@ -182,19 +182,10 @@ public class RdfParser extends ReaderParser {
 		if (rbm.hasBeanUri() && r2.getURI() != null)
 			rbm.getBeanUriProperty().set(m, r2.getURI());
 		Property subTypeIdProperty = null;
-		BeanPropertyMeta stp = bm.getSubTypeProperty();
-		if (stp != null) {
-			subTypeIdProperty = session.getProperty(stp.getName());
-			Statement st = r2.getProperty(subTypeIdProperty);
-			if (st == null)
-				throw new ParseException(session, "Could not find subtype ID property for bean of type ''{0}''", m.getClassMeta());
-			String subTypeId = st.getLiteral().getString();
-			stp.set(m, subTypeId);
-		}
 		for (StmtIterator i = r2.listProperties(); i.hasNext();) {
 			Statement st = i.next();
 			Property p = st.getPredicate();
-			if (p.equals(subTypeIdProperty))
+			if (subTypeIdProperty != null && p.equals(subTypeIdProperty))
 				continue;
 			String key = session.decodeString(p.getLocalName());
 			BeanPropertyMeta pMeta = m.getPropertyMeta(key);
@@ -212,14 +203,8 @@ public class RdfParser extends ReaderParser {
 					setName(cm, value, key);
 					pMeta.set(m, value);
 				}
-			} else if (! (p.equals(session.getRootProperty()) || p.equals(session.getTypeProperty()) || p.equals(subTypeIdProperty))) {
-				if (bm.isSubTyped()) {
-					RDFNode o = st.getObject();
-					Object value = parseAnything(session, object(), o, m.getBean(false), pMeta);
-					m.put(key, value);
-				} else {
-					onUnknownProperty(session, key, m, -1, -1);
-				}
+			} else if (! (p.equals(session.getRootProperty()) || p.equals(session.getTypeProperty()) || (subTypeIdProperty != null && p.equals(subTypeIdProperty)))) {
+				onUnknownProperty(session, key, m, -1, -1);
 			}
 			session.setCurrentProperty(null);
 		}
@@ -240,15 +225,15 @@ public class RdfParser extends ReaderParser {
 		PojoSwap<T,Object> transform = (PojoSwap<T,Object>)eType.getPojoSwap();
 		ClassMeta<?> sType = eType.getSerializedClassMeta();
 		session.setCurrentClass(sType);
-		BeanRegistry breg = pMeta == null ? session.getBeanRegistry() : pMeta.getBeanRegistry();
 
 		if (! sType.canCreateNewInstance(outer)) {
 			if (n.isResource()) {
 				Statement st = n.asResource().getProperty(session.getTypeProperty());
 				if (st != null) {
  					String c = st.getLiteral().getString();
- 					if (breg.hasName(c))
- 						sType = eType = (ClassMeta<T>)breg.getClassMeta(c);
+ 					ClassMeta tcm = session.getClassMeta(c, pMeta, eType);
+ 					if (tcm != null)
+ 						sType = eType = tcm;
 				}
 			}
 		}
@@ -337,6 +322,14 @@ public class RdfParser extends ReaderParser {
 			o = sType.newInstanceFromString(outer, session.decodeString(getValue(session, n, outer)));
 		} else if (sType.canCreateNewInstanceFromNumber(outer)) {
 			o = sType.newInstanceFromNumber(session, outer, parseNumber(getValue(session, n, outer).toString(), sType.getNewInstanceFromNumberClass()));
+		} else if (n.isResource()) {
+			Resource r = n.asResource();
+			Map m = new ObjectMap(session);
+			parseIntoMap(session, r, m, sType.getKeyType(), sType.getValueType());
+			if (m.containsKey(session.getBeanTypePropertyName()))
+				o = session.cast((ObjectMap)m, pMeta, eType);
+			else
+				throw new ParseException(session, "Class ''{0}'' could not be instantiated.  Reason: ''{1}''", sType.getInnerClass().getName(), sType.getNotABeanReason());
 		} else {
 			throw new ParseException("Class ''{0}'' could not be instantiated.  Reason: ''{1}''", sType.getInnerClass().getName(), sType.getNotABeanReason());
 		}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
index 9bb6d94..4746592 100644
--- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
+++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
@@ -189,6 +189,8 @@ public class RdfSerializer extends WriterSerializer {
 			sType = eType.getSerializedClassMeta();
 		}
 
+		String typeName = session.getBeanTypeName(eType, aType, bpm);
+
 		RDFNode n = null;
 
 		if (o == null || sType.isChar() && ((Character)o).charValue() == 0) {
@@ -221,7 +223,7 @@ public class RdfSerializer extends WriterSerializer {
 					uri = rbm.getBeanUriProperty().get(bm);
 				String uri2 = getUri(session, uri, null);
 				n = m.createResource(uri2);
-				serializeBeanMap(session, bm, (Resource)n);
+				serializeBeanMap(session, bm, (Resource)n, typeName);
 			} else {
 				Map m2 = (Map)o;
 				n = m.createResource();
@@ -236,7 +238,7 @@ public class RdfSerializer extends WriterSerializer {
 				uri = rbm.getBeanUriProperty().get(bm);
 			String uri2 = getUri(session, uri, null);
 			n = m.createResource(uri2);
-			serializeBeanMap(session, bm, (Resource)n);
+			serializeBeanMap(session, bm, (Resource)n, typeName);
 
 		} else if (sType.isCollectionOrArray() || (wType != null && wType.isCollection())) {
 			Collection c = session.sort(sType.isCollection() ? (Collection)o : toList(sType.getInnerClass(), o));
@@ -315,8 +317,8 @@ public class RdfSerializer extends WriterSerializer {
 		}
 	}
 
-	private void serializeBeanMap(RdfSerializerSession session, BeanMap<?> m, Resource r) throws SerializeException {
-		List<BeanPropertyValue> l = m.getValues(session.isTrimNulls());
+	private void serializeBeanMap(RdfSerializerSession session, BeanMap<?> m, Resource r, String typeName) throws SerializeException {
+		List<BeanPropertyValue> l = m.getValues(session.isTrimNulls(), typeName != null ? session.createBeanTypeNameProperty(m, typeName) : null);
 		Collections.reverse(l);
 		for (BeanPropertyValue bpv : l) {
 			BeanPropertyMeta pMeta = bpv.getMeta();
@@ -756,8 +758,8 @@ public class RdfSerializer extends WriterSerializer {
 	}
 
 	@Override /* Serializer */
-	public RdfSerializer setUseIndentation(boolean value) throws LockedException {
-		super.setUseIndentation(value);
+	public RdfSerializer setUseWhitespace(boolean value) throws LockedException {
+		super.setUseWhitespace(value);
 		return this;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
index 831ba08..d03b775 100644
--- a/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
+++ b/juneau-core-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
@@ -60,7 +60,7 @@ public final class RdfSerializerSession extends SerializerSession {
 	protected RdfSerializerSession(RdfSerializerContext ctx, ObjectMap op, Object output, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType) {
 		super(ctx, op, output, javaMethod, locale, timeZone, mediaType);
 		ObjectMap jenaSettings = new ObjectMap();
-		jenaSettings.put("rdfXml.tab", isUseIndentation() ? 2 : 0);
+		jenaSettings.put("rdfXml.tab", isUseWhitespace() ? 2 : 0);
 		jenaSettings.put("rdfXml.attributeQuoteChar", Character.toString(getQuoteChar()));
 		jenaSettings.putAll(ctx.jenaSettings);
 		if (op == null || op.isEmpty()) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/BeanFilterTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/BeanFilterTest.java b/juneau-core-test/src/test/java/org/apache/juneau/BeanFilterTest.java
index fb27219..8116344 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/BeanFilterTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/BeanFilterTest.java
@@ -36,7 +36,7 @@ public class BeanFilterTest {
 		a1.fb = new B2();
 		((B2)a1.fb).f2 = "f2";
 		String r = s.serialize(a1);
-		assertEquals("{subType:'A1',f0:'f0',fb:{subType:'B2',f0b:'f0b',f2:'f2'},f1:'f1'}", r);
+		assertEquals("{_type:'A1',f0:'f0',fb:{_type:'B2',f0b:'f0b',f2:'f2'},f1:'f1'}", r);
 
 		A a = p.parse(r, A.class);
 		assertTrue(a instanceof A1);
@@ -45,7 +45,7 @@ public class BeanFilterTest {
 		assertEquals("f2", ((B2)a.fb).f2);
 
 		// Try out-of-order creation.
-		r = "{f0:'f0',f1:'f1',subType:'A1',fb:{f0b:'f0b',f2:'f2',subType:'B2'}}";
+		r = "{f0:'f0',f1:'f1',_type:'A1',fb:{f0b:'f0b',f2:'f2',_type:'B2'}}";
 		a = p.parse(r, A.class);
 		assertTrue(a instanceof A1);
 		assertTrue(a.fb instanceof B2);
@@ -53,10 +53,7 @@ public class BeanFilterTest {
 		assertEquals("f2", ((B2)a.fb).f2);
 	}
 
-	@Bean(
-		subTypeProperty="subType",
-		subTypes={A1.class,A2.class}
-	)
+	@Bean(beanDictionary={A1.class, A2.class})
 	public static abstract class A {
 		public String f0 = "f0";
 		public B fb;
@@ -72,10 +69,7 @@ public class BeanFilterTest {
 		public String f2;
 	}
 
-	@Bean(
-		subTypeProperty="subType",
-		subTypes={B1.class,B2.class}
-	)
+	@Bean(beanDictionary={B1.class,B2.class})
 	public static abstract class B {
 		public String f0b = "f0b";
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/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 3343a6d..0b328db 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
@@ -652,13 +652,13 @@ public class BeanMapTest {
 		BeanMap m = session.toBeanMap(t7);
 		m.put("enum1", "ONE");
 		m.put("enum2", "TWO");
-		assertEquals("{enum1:'ONE',enum2:'TWO'}", serializer.serialize(t7));
+		assertEquals("{_type:'H',enum1:'ONE',enum2:'TWO'}", serializer.serialize(t7));
 		assertEquals(HEnum.ONE, t7.enum1);
 		assertEquals(HEnum.TWO, t7.getEnum2());
 
 		// Use BeanContext to create bean instance.
 		m = BeanContext.DEFAULT.createSession().newBeanMap(H.class).load("{enum1:'TWO',enum2:'THREE'}");
-		assertEquals("{enum1:'TWO',enum2:'THREE'}", serializer.serialize(m.getBean()));
+		assertEquals("{_type:'H',enum1:'TWO',enum2:'THREE'}", serializer.serialize(m.getBean()));
 		t7 = (H)m.getBean();
 		assertEquals(HEnum.TWO, t7.enum1);
 		assertEquals(HEnum.THREE, t7.getEnum2());
@@ -666,7 +666,7 @@ public class BeanMapTest {
 		// Create instance directly from JSON.
 		JsonParser p = new JsonParser().addToBeanDictionary(H.class);
 		t7 = (H)p.parse("{_type:'H',enum1:'THREE',enum2:'ONE'}", Object.class);
-		assertEquals("{enum1:'THREE',enum2:'ONE'}", serializer.serialize(t7));
+		assertEquals("{_type:'H',enum1:'THREE',enum2:'ONE'}", serializer.serialize(t7));
 		assertEquals(HEnum.THREE, t7.enum1);
 		assertEquals(HEnum.ONE, t7.getEnum2());
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java b/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java
index 1e278b5..7f6bade 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/TestUtils.java
@@ -147,7 +147,7 @@ public class TestUtils {
 
 	private static void printLines(String[] lines) {
 		for (int i = 0; i < lines.length; i++)
-			System.err.println(String.format("%4s:" + lines[i], i+1));
+			System.err.println(String.format("%4s:" + lines[i], i+1)); // NOT DEBUG
 	}
 
 	/**
@@ -221,7 +221,7 @@ public class TestUtils {
 	 * Test whitespace and generated schema.
 	 */
 	public static void validateXml(Object o, XmlSerializer s) throws Exception {
-		s = s.clone().setUseIndentation(true).setEnableNamespaces(true).setAddNamespaceUrisToRoot(true);
+		s = s.clone().setUseWhitespace(true).setEnableNamespaces(true).setAddNamespaceUrisToRoot(true);
 		String xml = s.serialize(o);
 
 		String xmlSchema = null;
@@ -231,10 +231,10 @@ public class TestUtils {
 			TestUtils.checkXmlWhitespace(xmlSchema);
 			TestUtils.validateXml(xml, xmlSchema);
 		} catch (Exception e) {
-			System.err.println("---XML---");
-			System.err.println(xml);
-			System.err.println("---XMLSchema---");
-			System.err.println(xmlSchema);
+			System.err.println("---XML---");       // NOT DEBUG
+			System.err.println(xml);               // NOT DEBUG
+			System.err.println("---XMLSchema---"); // NOT DEBUG
+			System.err.println(xmlSchema);         // NOT DEBUG
 			throw e;
 		}
 	}
@@ -271,7 +271,7 @@ public class TestUtils {
 
 	public static void debugOut(Object o) {
 		try {
-			System.err.println(StringUtils.decodeHex(JsonSerializer.DEFAULT_LAX.serialize(o)));
+			System.err.println(StringUtils.decodeHex(JsonSerializer.DEFAULT_LAX.serialize(o))); // NOT DEBUG
 		} catch (SerializeException e) {
 			e.printStackTrace();
 		}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
index 7d30f9a..d99f5ff 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
@@ -19,6 +19,7 @@ import java.util.*;
 
 import javax.xml.datatype.*;
 
+import org.apache.juneau.BeanDictionaryMap;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.json.annotation.*;
@@ -231,24 +232,23 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		Object r = s.serialize(b1);
 		B b = p.parse(r, B.class);
 		assertTrue(b instanceof B1);
-		assertObjectEquals("{subType:'B1',f0:'f0',f1:'f1'}", b, js);
+		assertObjectEquals("{_type:'B1',f0:'f0',f1:'f1'}", b, js);
 
 		B2 b2 = B2.create();
 		r = s.serialize(b2);
 		b = p.parse(r, B.class);
 		assertTrue(b instanceof B2);
-		assertObjectEquals("{subType:'B2',f0:'f0',f2:1}", b, js);
+		assertObjectEquals("{_type:'B2',f0:'f0',f2:1}", b, js);
 
 		B3 b3 = B3.create();
 		r = s.serialize(b3);
 		b = p.parse(r, B.class);
 		assertTrue(b instanceof B3);
-		assertObjectEquals("{subType:'B3',f0:'f0',f3:'2001-01-01T12:34:56.789Z'}", b, js);
+		assertObjectEquals("{_type:'B3',f0:'f0',f3:'2001-01-01T12:34:56.789Z'}", b, js);
 }
 
 	@Bean(
-		subTypeProperty="subType",
-		subTypes={B1.class,B2.class,B3.class}
+		beanDictionary={B1.class,B2.class,B3.class}
 	)
 	public abstract static class B {
 		public String f0 = "f0";
@@ -357,13 +357,18 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 	public static class CFilter extends BeanFilterBuilder {
 		public CFilter() {
 			super(C.class);
-			setSubTypeProperty("subType");
-			addSubType("C1", C1.class);
-			addSubType("C2", C2.class);
-			addSubType("C3", C3.class);
+			addToBeanDictionary(CFilterDictionaryMap.class);
 		}
 	}
 
+	public static class CFilterDictionaryMap extends BeanDictionaryMap {
+		public CFilterDictionaryMap() {
+			addClass("C1", C1.class);
+			addClass("C2", C2.class);
+			addClass("C3", C3.class);
+		}
+	}
+	
 	//====================================================================================================
 	// Test @Bean(subTypeProperty=xxx) with real bean property
 	//====================================================================================================
@@ -380,16 +385,12 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		Object r = s.serialize(ba1);
 		BA b = p.parse(r, BA.class);
 		assertTrue(b instanceof BA1);
-		assertEquals("BA1", b.subType);
-		assertObjectEquals("{subType:'BA1',f0a:'f0a',f0b:'f0b',f1:'f1'}", b);
+		assertObjectEquals("{_type:'BA1',f0a:'f0a',f0b:'f0b',f1:'f1'}", b);
 	}
 
-	@Bean(
-		subTypeProperty="subType",
-		subTypes={BA1.class,BA2.class}
-	)
+	@Bean(beanDictionary={BA1.class,BA2.class})
 	public abstract static class BA {
-		public String f0a, subType, f0b;
+		public String f0a, f0b;
 	}
 
 	@Bean(typeName="BA1")
@@ -400,7 +401,6 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 			b.f0a = "f0a";
 			b.f0b = "f0b";
 			b.f1 = "f1";
-			b.subType = "xxx";// Should be ignored.
 			return b;
 		}
 	}
@@ -427,12 +427,11 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 		Object r = s.serialize(c1);
 		CA c = p.parse(r, CA.class);
 		assertTrue(c instanceof CA1);
-		assertEquals("CA1", c.subType);
-		assertObjectEquals("{f0a:'f0a',subType:'CA1',f0b:'f0b',f1:'f1'}", c);
+		assertObjectEquals("{f0a:'f0a',f0b:'f0b',f1:'f1'}", c);
 	}
 
 	public abstract static class CA {
-		public String f0a, subType, f0b;
+		public String f0a, f0b;
 	}
 
 	public static class CA1 extends CA {
@@ -442,7 +441,6 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 			c.f0a = "f0a";
 			c.f0b = "f0b";
 			c.f1 = "f1";
-			c.subType = "xxx";// Should be ignored.
 			return c;
 		}
 	}
@@ -454,12 +452,17 @@ public class RoundTripBeanMapsTest extends RoundTripTest {
 	public static class CAFilter extends BeanFilterBuilder {
 		public CAFilter() {
 			super(CA.class);
-			setSubTypeProperty("subType");
-			addSubType("CA1", CA1.class);
-			addSubType("CA2", CA2.class);
+			addToBeanDictionary(CAFilterDictionaryMap.class);
 		}
 	}
 
+	public static class CAFilterDictionaryMap extends BeanDictionaryMap {
+		public CAFilterDictionaryMap() {
+			addClass("CA1", CA1.class);
+			addClass("CA2", CA2.class);
+		}
+	}
+	
 	//====================================================================================================
 	// Test @Bean(properties=xxx)
 	//====================================================================================================

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripLargeObjectsTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripLargeObjectsTest.java b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripLargeObjectsTest.java
index 33b6886..7bbd8d9 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripLargeObjectsTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripLargeObjectsTest.java
@@ -66,7 +66,7 @@ public class RoundTripLargeObjectsTest extends RoundTripTest {
 			},
 			{ /* 3 */
 				"Xml DEFAULT w/namespaces,validation",
-				new XmlSerializer.NsSq().setTrimNullProperties(false).setAddNamespaceUrisToRoot(true).setUseIndentation(true),
+				new XmlSerializer.NsSq().setTrimNullProperties(false).setAddNamespaceUrisToRoot(true).setUseWhitespace(true),
 				XmlParser.DEFAULT,
 				CHECK_XML_WHITESPACE | VALIDATE_XML
 			},
@@ -84,13 +84,13 @@ public class RoundTripLargeObjectsTest extends RoundTripTest {
 			},
 			{ /* 6 */
 				"UrlEncoding",
-				new UrlEncodingSerializer().setTrimNullProperties(false).setSimpleMode(false),
+				new UrlEncodingSerializer().setTrimNullProperties(false),
 				UrlEncodingParser.DEFAULT,
 				0
 			},
 			{ /* 7 */
 				"Uon",
-				new UonSerializer().setTrimNullProperties(false).setSimpleMode(false),
+				new UonSerializer().setTrimNullProperties(false),
 				UonParser.DEFAULT,
 				0
 			},
@@ -144,22 +144,22 @@ public class RoundTripLargeObjectsTest extends RoundTripTest {
 		A a = A.create();
 		Serializer s = getSerializer();
 		Parser p = getParser();
-		System.err.println("\n---Speed test on " + label + "---");
+		System.err.println("\n---Speed test on " + label + "---"); // NOT DEBUG
 		Object r = "";
 
 		// Initialization run.
 		r = s.serialize(a);
-		System.err.println(MessageFormat.format("Serialized size: {0,number} ", (r instanceof String ? r.toString().length() : ((byte[])r).length)));
+		System.err.println(MessageFormat.format("Serialized size: {0,number} ", (r instanceof String ? r.toString().length() : ((byte[])r).length))); // NOT DEBUG
 		p.parse(r, A.class);
 
 		startTime = System.currentTimeMillis();
 		for (int i = 0; i < numRuns; i++)
 			r = s.serialize(a);
-		System.err.println(MessageFormat.format("Average serialize time: {0,number}ms", (System.currentTimeMillis()-startTime)/numRuns));
+		System.err.println(MessageFormat.format("Average serialize time: {0,number}ms", (System.currentTimeMillis()-startTime)/numRuns)); // NOT DEBUG
 		startTime = System.currentTimeMillis();
 		for (int i = 0; i < numRuns; i++)
 			a = p.parse(r, A.class);
-		System.err.println(MessageFormat.format("Average parsed time: {0,number}ms", (System.currentTimeMillis()-startTime)/numRuns));
+		System.err.println(MessageFormat.format("Average parsed time: {0,number}ms", (System.currentTimeMillis()-startTime)/numRuns)); // NOT DEBUG
 	}
 
 	public static class A {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java
index a644e85..f7d2d13 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripMapsTest.java
@@ -121,12 +121,12 @@ public class RoundTripMapsTest extends RoundTripTest {
 		assertEquals(e, r);
 
 		s = new UonSerializer.Encoding().addPojoSwaps(getPojoSwaps()).setTrimNullProperties(false);
-		e = "$o(AQID=a,BAUG=%00,%00=b)";
+		e = "(AQID=a,BAUG=null,null=b)";
 		r = s.serialize(t);
 		assertEquals(e, r);
 
 		s = new UrlEncodingSerializer().addPojoSwaps(getPojoSwaps()).setTrimNullProperties(false);
-		e = "AQID=a&BAUG=%00&%00=b";
+		e = "AQID=a&BAUG=null&null=b";
 		r = s.serialize(t);
 		assertEquals(e, r);
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
index 1912417..25c8222 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTest.java
@@ -66,7 +66,7 @@ public abstract class RoundTripTest {
 			},
 			{ /* 3 */
 				"Xml - namespaces, validation, readable",
-				new XmlSerializer.NsSq().setTrimNullProperties(false).setAddNamespaceUrisToRoot(true).setUseIndentation(true),
+				new XmlSerializer.NsSq().setTrimNullProperties(false).setAddNamespaceUrisToRoot(true).setUseWhitespace(true),
 				XmlParser.DEFAULT,
 				CHECK_XML_WHITESPACE | VALIDATE_XML
 			},
@@ -96,37 +96,37 @@ public abstract class RoundTripTest {
 			},
 			{ /* 8 */
 				"Uon - default",
-				new UonSerializer().setTrimNullProperties(false).setSimpleMode(false),
+				new UonSerializer().setTrimNullProperties(false),
 				UonParser.DEFAULT,
 				0
 			},
 			{ /* 9 */
 				"Uon - readable",
-				new UonSerializer.Readable().setTrimNullProperties(false).setSimpleMode(false),
-				UonParser.DEFAULT_WS_AWARE,
+				new UonSerializer.Readable().setTrimNullProperties(false),
+				UonParser.DEFAULT,
 				0
 			},
 			{ /* 10 */
 				"Uon - encoded",
-				new UonSerializer.Encoding().setTrimNullProperties(false).setSimpleMode(false),
+				new UonSerializer.Encoding().setTrimNullProperties(false),
 				UonParser.DEFAULT_DECODING,
 				0
 			},
 			{ /* 11 */
 				"UrlEncoding - default",
-				new UrlEncodingSerializer().setTrimNullProperties(false).setSimpleMode(false),
+				new UrlEncodingSerializer().setTrimNullProperties(false),
 				UrlEncodingParser.DEFAULT,
 				0
 			},
 			{ /* 12 */
 				"UrlEncoding - readable",
-				new UrlEncodingSerializer.Readable().setTrimNullProperties(false).setSimpleMode(false),
-				UrlEncodingParser.DEFAULT_WS_AWARE,
+				new UrlEncodingSerializer.Readable().setTrimNullProperties(false),
+				UrlEncodingParser.DEFAULT,
 				0
 			},
 			{ /* 13 */
 				"UrlEncoding - expanded params",
-				new UrlEncodingSerializer().setExpandedParams(true).setSimpleMode(false),
+				new UrlEncodingSerializer().setExpandedParams(true),
 				new UrlEncodingParser().setExpandedParams(true),
 				0
 			},
@@ -192,8 +192,8 @@ public abstract class RoundTripTest {
 	public boolean debug = false;
 
 	public RoundTripTest(String label, Serializer s, Parser p, int flags) throws Exception {
-		this.s = s.clone().addBeanFilters(getBeanFilters()).addPojoSwaps(getPojoSwaps()).addToBeanDictionary(getDictionary());
-		this.p = p == null ? null : p.clone().addBeanFilters(getBeanFilters()).addPojoSwaps(getPojoSwaps()).addToBeanDictionary(getDictionary());
+		this.s = s.clone().addBeanFilters(getBeanFilters()).addPojoSwaps(getPojoSwaps()).addToBeanDictionary(getDictionary()).setProperties(getProperties());
+		this.p = p == null ? null : p.clone().addBeanFilters(getBeanFilters()).addPojoSwaps(getPojoSwaps()).addToBeanDictionary(getDictionary()).setProperties(getProperties());
 		this.label = label;
 
 		Map<Class<Object>, Class<? extends Object>> m = getImplClasses();
@@ -221,6 +221,10 @@ public abstract class RoundTripTest {
 	public Class<?>[] getDictionary() {
 		return new Class<?>[0];
 	}
+	
+	public ObjectMap getProperties() {
+		return ObjectMap.EMPTY_MAP;
+	}
 
 	public <T> Map<Class<T>,Class<? extends T>> getImplClasses() {
 		return null;
@@ -286,7 +290,7 @@ public abstract class RoundTripTest {
 		}
 
 		if (debug)
-			System.err.println("Serialized contents from ["+label+"]...\n---START---\n" + (out instanceof byte[] ? TestUtils.toReadableBytes((byte[])out) : out) + "\n---END---\n");
+			System.err.println("Serialized contents from ["+label+"]...\n---START---\n" + (out instanceof byte[] ? TestUtils.toReadableBytes((byte[])out) : out) + "\n---END---\n"); // NOT DEBUG
 
 		if (validateXmlWhitespace)
 			TestUtils.checkXmlWhitespace(out.toString());

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
index c4d792f..cc6c1b9 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
@@ -275,14 +275,11 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 
 		C1 c1 = C3.create();
 		String r = s.serialize(c1);
-		assertEquals("{\"type\":\"C3\",\"f1\":{\"f2\":\"f2\",\"f3\":3}}", r);
+		assertEquals("{\"_type\":\"C3\",\"f1\":{\"f2\":\"f2\",\"f3\":3}}", r);
 	}
 
 
-	@Bean(
-		subTypeProperty="type",
-		subTypes={C3.class}
-	)
+	@Bean(beanDictionary={C3.class})
 	public static interface C1<T> extends Serializable {
 		void setF1(T f1);
 		T getF1();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/097b8103/juneau-core-test/src/test/java/org/apache/juneau/dto/cognos/CognosXmlTest.java
----------------------------------------------------------------------
diff --git a/juneau-core-test/src/test/java/org/apache/juneau/dto/cognos/CognosXmlTest.java b/juneau-core-test/src/test/java/org/apache/juneau/dto/cognos/CognosXmlTest.java
index bd98a6d..358d8e3 100755
--- a/juneau-core-test/src/test/java/org/apache/juneau/dto/cognos/CognosXmlTest.java
+++ b/juneau-core-test/src/test/java/org/apache/juneau/dto/cognos/CognosXmlTest.java
@@ -73,7 +73,7 @@ public class CognosXmlTest {
 		};
 
 		XmlSerializer s = new XmlSerializer()
-			.setUseIndentation(true)
+			.setUseWhitespace(true)
 			.setQuoteChar('\'')
 			.setDefaultNamespace("cognos")
 			.setEnableNamespaces(true)