juneau-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jamesbog...@apache.org
Subject [juneau] branch master updated: (JUNEAU-85) Don't break compatibility with 7.1.0
Date Sat, 13 Oct 2018 01:35:52 GMT
This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 3d992d7  (JUNEAU-85) Don't break compatibility with 7.1.0
3d992d7 is described below

commit 3d992d77fca38c4bf6be01ef4e9e3e796905c535
Author: JamesBognar <jamesbognar@apache.org>
AuthorDate: Fri Oct 12 21:35:32 2018 -0400

    (JUNEAU-85) Don't break compatibility with 7.1.0
---
 juneau-core/juneau-config/pom.xml                  |   51 +
 .../org/apache/juneau/config/ConfigBuilder.java    |   10 +
 .../apache/juneau/dto/swagger/SchemaInfoTest.java  |    2 +-
 .../org/apache/juneau/dto/swagger/SwaggerTest.java |    2 +-
 .../juneau/httppart/OpenApiPartSerializerTest.java |   30 +-
 juneau-core/juneau-dto/pom.xml                     |   52 +
 .../java/org/apache/juneau/dto/LinkString.java     |   27 +
 .../org/apache/juneau/dto/jsonschema/Schema.java   | 1481 ++++++++++++++++++++
 .../apache/juneau/dto/jsonschema/SchemaArray.java  |   87 +-
 .../apache/juneau/dto/jsonschema/SchemaMap.java    |  123 ++
 .../juneau/dto/jsonschema/SchemaProperty.java}     |   91 +-
 .../dto/jsonschema/SchemaPropertySimpleArray.java} |   80 +-
 .../apache/juneau/dto/jsonschema/SchemaRef.java}   |   86 +-
 .../org/apache/juneau/dto/swagger/SchemaInfo.java  |    9 +
 .../org/apache/juneau/dto/swagger/Swagger.java     |    9 +
 .../apache/juneau/dto/swagger/SwaggerElement.java  |   11 +
 juneau-core/juneau-marshall-rdf/pom.xml            |   52 +
 juneau-core/juneau-marshall/pom.xml                |   59 +
 .../main/java/org/apache/juneau/BeanContext.java   |    6 +-
 .../java/org/apache/juneau/BeanPropertyMeta.java   |   27 +-
 .../org/apache/juneau/BeanRuntimeException.java    |   10 +
 .../main/java/org/apache/juneau/BeanSession.java   |   24 +-
 .../java/org/apache/juneau/BeanSessionArgs.java    |   12 +
 .../src/main/java/org/apache/juneau/ClassMeta.java |   20 +-
 .../main/java/org/apache/juneau/ContextCache.java  |    2 +-
 .../org/apache/juneau/ContextRuntimeException.java |   19 +
 .../src/main/java/org/apache/juneau/ObjectMap.java |    2 +-
 .../main/java/org/apache/juneau/Visibility.java    |   36 +-
 .../apache/juneau/csv/CsvSerializerBuilder.java    |   28 +
 .../apache/juneau/html/BasicHtmlDocTemplate.java   |   60 +-
 .../org/apache/juneau/html/HtmlDocSerializer.java  |   13 +-
 .../juneau/html/HtmlDocSerializerSession.java      |   45 +-
 .../org/apache/juneau/html/HtmlDocTemplate.java    |  105 ++
 ...lDocTemplate.java => HtmlDocTemplateBasic.java} |   69 +-
 .../juneau/html/HtmlSchemaDocSerializer.java       |   10 +
 .../org/apache/juneau/html/HtmlSerializer.java     |   18 +-
 .../apache/juneau/html/HtmlSerializerBuilder.java  |   28 +
 .../apache/juneau/html/HtmlSerializerSession.java  |   12 +-
 .../juneau/html/HtmlStrippedDocSerializer.java     |   10 +
 .../java/org/apache/juneau/html/HtmlWriter.java    |   10 +
 .../org/apache/juneau/html/annotation/Html.java    |   12 +
 .../apache/juneau/html/annotation/HtmlLink.java    |    6 +
 .../org/apache/juneau/http/HttpMethodName.java     |    6 +
 .../org/apache/juneau/httppart/HttpPartParser.java |    7 +
 .../org/apache/juneau/httppart/HttpPartSchema.java |    2 +-
 .../apache/juneau/httppart/HttpPartSerializer.java |    7 +
 .../org/apache/juneau/httppart/HttpPartType.java   |    8 +-
 .../apache/juneau/httppart/SimplePartParser.java   |   10 +
 .../juneau/httppart/SimplePartSerializer.java      |   13 +
 ...erializer.java => SimpleUonPartSerializer.java} |   52 +-
 .../SimpleUonPartSerializerBuilder.java}           |  365 +++--
 .../UonPartParser.java}                            |  187 +--
 .../UonPartParserBuilder.java}                     |  303 ++--
 .../UonPartSerializer.java}                        |  185 +--
 .../UonPartSerializerBuilder.java}                 |  347 ++---
 .../org/apache/juneau/jso/JsoParserBuilder.java    |   18 +
 .../apache/juneau/jso/JsoSerializerBuilder.java    |   87 ++
 .../juneau/json/JsonSchemaSerializerBuilder.java   |   28 +
 .../org/apache/juneau/json/JsonSerializer.java     |   92 ++
 .../apache/juneau/json/JsonSerializerBuilder.java  |   28 +
 .../apache/juneau/json/SimpleJsonSerializer.java   |    6 +-
 .../apache/juneau/msgpack/MsgPackInputStream.java  |   18 +
 .../juneau/msgpack/MsgPackParserBuilder.java       |   18 +
 .../apache/juneau/msgpack/MsgPackSerializer.java   |    6 +
 .../juneau/msgpack/MsgPackSerializerBuilder.java   |   82 ++
 .../org/apache/juneau/parser/ParseException.java   |   37 +
 .../main/java/org/apache/juneau/parser/Parser.java |   12 +
 .../org/apache/juneau/parser/ParserBuilder.java    |   37 +
 .../org/apache/juneau/parser/ParserListener.java   |   21 +
 .../org/apache/juneau/parser/ParserReader.java     |   37 +
 .../org/apache/juneau/parser/ParserSession.java    |    5 +-
 .../apache/juneau/parser/ParserSessionArgs.java    |    9 +
 .../apache/juneau/parser/ReaderParserBuilder.java  |    4 +
 .../juneau/plaintext/PlainTextSerializer.java      |   17 +-
 .../plaintext/PlainTextSerializerBuilder.java      |   27 +
 .../HttpPartType.java => remoteable/Body.java}     |   74 +-
 .../org/apache/juneau/remoteable/FormData.java     |  114 ++
 .../HtmlLink.java => remoteable/FormDataIfNE.java} |   49 +-
 .../java/org/apache/juneau/remoteable/Header.java  |  115 ++
 .../HtmlLink.java => remoteable/HeaderIfNE.java}   |   49 +-
 .../java/org/apache/juneau/remoteable/Path.java    |  104 ++
 .../java/org/apache/juneau/remoteable/Query.java   |  114 ++
 .../HtmlLink.java => remoteable/QueryIfNE.java}    |   49 +-
 .../org/apache/juneau/remoteable/RemoteMethod.java |   87 ++
 .../apache/juneau/remoteable/RemoteMethodArg.java  |   54 +-
 .../HtmlLink.java => remoteable/Remoteable.java}   |   65 +-
 .../RemoteableMeta.java}                           |  123 +-
 .../RemoteableMetadataException.java}              |  110 +-
 .../juneau/remoteable/RemoteableMethodMeta.java    |  229 +++
 .../HtmlLink.java => remoteable/RequestBean.java}  |   41 +-
 .../ReturnValue.java}                              |   34 +-
 .../juneau/serializer/OutputStreamSerializer.java  |    9 +
 .../org/apache/juneau/serializer/Serializer.java   |   57 +
 .../juneau/serializer/SerializerBuilder.java       |   55 +
 .../juneau/serializer/SerializerGroupBuilder.java  |   28 +
 .../juneau/serializer/SerializerSession.java       |    3 +-
 .../juneau/serializer/SerializerSessionArgs.java   |   11 +-
 .../juneau/serializer/WriterSerializerBuilder.java |    3 +
 .../juneau/soap/SoapXmlSerializerBuilder.java      |   28 +
 .../org/apache/juneau/transform/SurrogateSwap.java |    2 +-
 .../org/apache/juneau/transforms/CalendarSwap.java |    4 +-
 .../main/java/org/apache/juneau/uon/UonParser.java |    9 +
 .../org/apache/juneau/uon/UonParserSession.java    |    2 +-
 .../java/org/apache/juneau/uon/UonSerializer.java  |   32 +-
 .../apache/juneau/uon/UonSerializerBuilder.java    |   28 +
 .../apache/juneau/uon/UonSerializerSession.java    |    9 +
 .../juneau/urlencoding/UrlEncodingSerializer.java  |   12 +-
 .../urlencoding/UrlEncodingSerializerBuilder.java  |   28 +
 .../main/java/org/apache/juneau/utils/AList.java   |    5 +-
 .../main/java/org/apache/juneau/utils/AMap.java    |    4 +-
 .../main/java/org/apache/juneau/utils/ASet.java    |    5 +-
 .../java/org/apache/juneau/utils/ZipFileList.java  |    4 +-
 .../main/java/org/apache/juneau/xml/XmlReader.java |    2 +-
 .../java/org/apache/juneau/xml/XmlSerializer.java  |   18 +-
 .../apache/juneau/xml/XmlSerializerBuilder.java    |   28 +
 .../proto/YamlClassMeta.java}                      |   91 +-
 .../proto/YamlParser.java}                         |  195 +--
 .../proto/YamlParserBuilder.java}                  |  291 ++--
 .../juneau/yaml/proto/YamlParserSession.java       |   85 ++
 .../proto/YamlSerializer.java}                     |  262 +---
 .../proto/YamlSerializerBuilder.java}              |  391 +++---
 .../juneau/yaml/proto/YamlSerializerSession.java   |   91 ++
 .../org/apache/juneau/yaml/proto/YamlWriter.java   |  284 ++++
 juneau-core/juneau-svl/pom.xml                     |   52 +
 .../juneau-microservice-server/pom.xml             |   52 +
 .../rest/test/client/RequestBeanProxyTest.java     |   10 +
 .../rest/test/client/ThirdPartyProxyTest.java      |    5 +
 juneau-rest/juneau-rest-client/pom.xml             |   52 +
 .../org/apache/juneau/rest/client/RestCall.java    |    4 +-
 juneau-rest/juneau-rest-server-jaxrs/pom.xml       |   54 +-
 juneau-rest/juneau-rest-server/pom.xml             |   52 +
 .../juneau/rest/testutils/XPartSerializer.java     |    5 +
 pom.xml                                            |    6 +
 133 files changed, 6696 insertions(+), 2010 deletions(-)

diff --git a/juneau-core/juneau-config/pom.xml b/juneau-core/juneau-config/pom.xml
index 2c5ff2a..1a06204 100644
--- a/juneau-core/juneau-config/pom.xml
+++ b/juneau-core/juneau-config/pom.xml
@@ -99,6 +99,57 @@
 					</execution>
 				</executions>
 			</plugin>
+			<plugin>
+				<groupId>com.github.siom79.japicmp</groupId>
+				<artifactId>japicmp-maven-plugin</artifactId>
+				<version>0.13.0</version>
+				<configuration>
+					<oldVersion>
+						<dependency>
+							<groupId>org.apache.juneau</groupId>
+							<artifactId>${project.artifactId}</artifactId>
+							<version>${juneau.compare.version}</version>
+							<type>jar</type>
+						</dependency>
+					</oldVersion>
+					<newVersion>
+						<file>
+							<path>${project.build.directory}/${project.artifactId}-${project.version}.jar</path>
+						</file>
+					</newVersion>
+					<parameter>
+						<onlyModified>true</onlyModified>
+						<accessModifier>public</accessModifier>
+						<excludes>
+						</excludes>
+						<ignoreMissingClasses>true</ignoreMissingClasses>
+						<onlyBinaryIncompatible>true</onlyBinaryIncompatible>
+						<breakBuildOnBinaryIncompatibleModifications>true</breakBuildOnBinaryIncompatibleModifications>
+						<breakBuildIfCausedByExclusion>false</breakBuildIfCausedByExclusion>
+						<breakBuildBasedOnSemanticVersioning>true</breakBuildBasedOnSemanticVersioning>
+						<overrideCompatibilityChangeParameters>
+							<overrideCompatibilityChangeParameter>
+								<binaryCompatible>true</binaryCompatible>
+								<compatibilityChange>SUPERCLASS_REMOVED</compatibilityChange>
+								<sourceCompatible>true</sourceCompatible>
+							</overrideCompatibilityChangeParameter>
+							<overrideCompatibilityChangeParameter>
+								<binaryCompatible>true</binaryCompatible>
+								<compatibilityChange>FIELD_REMOVED_IN_SUPERCLASS</compatibilityChange>
+								<sourceCompatible>true</sourceCompatible>
+							</overrideCompatibilityChangeParameter>
+						</overrideCompatibilityChangeParameters>
+					</parameter>
+				</configuration>
+				<executions>
+					<execution>
+						<phase>verify</phase>
+						<goals>
+							<goal>cmp</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
index fc60479..841e782 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/ConfigBuilder.java
@@ -340,4 +340,14 @@ public class ConfigBuilder extends ContextBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link #binaryFormat(BinaryFormat)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ConfigBuilder binaryFormat(String value) {
+		return set(CONFIG_binaryFormat, value);
+	}
+
 }
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SchemaInfoTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SchemaInfoTest.java
index 308a964..7627736 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SchemaInfoTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SchemaInfoTest.java
@@ -682,7 +682,7 @@ public class SchemaInfoTest {
 		assertObjectEquals("{}", t.getAdditionalProperties());
 		assertInstanceOf(SchemaInfo.class, t.getAdditionalProperties());
 
-		t.setAdditionalProperties(null);
+		t.setAdditionalProperties((SchemaInfo)null);
 		assertNull(t.getAdditionalProperties());
 	}
 
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java
index e3fd006..80e3717 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/dto/swagger/SwaggerTest.java
@@ -401,7 +401,7 @@ public class SwaggerTest {
 		Swagger t = new Swagger();
 
 		t.definition("a", new ObjectMap().append("type","a1"));
-		t.definition("b", null);
+		t.definition("b", (ObjectMap)null);
 		t.definition(null, new ObjectMap().append("type", "c1"));
 
 		assertObjectEquals("{a:{type:'a1'},b:null,null:{type:'c1'}}", t.getDefinitions());
diff --git a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartSerializerTest.java b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartSerializerTest.java
index 45518bc..add3536 100644
--- a/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartSerializerTest.java
+++ b/juneau-core/juneau-core-test/src/test/java/org/apache/juneau/httppart/OpenApiPartSerializerTest.java
@@ -1091,95 +1091,95 @@ public class OpenApiPartSerializerTest {
 	public void i01a_noSchemaTests_Integer() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
 		for (Integer v : AList.create(new Integer(1), Integer.MAX_VALUE, Integer.MIN_VALUE))
-			assertEquals(valueOf(v), s.serialize(null, v));
+			assertEquals(valueOf(v), s.serialize((HttpPartSchema)null, v));
 	}
 	@Test
 	public void i01b_noSchemaTests_IntegerArray() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
-		assertEquals("1,2147483647,-2147483648", s.serialize(null, new Integer[]{new Integer(1), Integer.MAX_VALUE, Integer.MIN_VALUE}));
+		assertEquals("1,2147483647,-2147483648", s.serialize((HttpPartSchema)null, new Integer[]{new Integer(1), Integer.MAX_VALUE, Integer.MIN_VALUE}));
 	}
 
 	@Test
 	public void i02a_noSchemaTests_Short() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
 		for (Short v : AList.create(new Short((short)1), Short.MAX_VALUE, Short.MIN_VALUE))
-			assertEquals(valueOf(v), s.serialize(null, v));
+			assertEquals(valueOf(v), s.serialize((HttpPartSchema)null, v));
 	}
 
 	@Test
 	public void i02b_noSchemaTests_ShortArray() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
-		assertEquals("1,32767,-32768,null", s.serialize(null, new Short[]{new Short((short)1), Short.MAX_VALUE, Short.MIN_VALUE, null}));
+		assertEquals("1,32767,-32768,null", s.serialize((HttpPartSchema)null, new Short[]{new Short((short)1), Short.MAX_VALUE, Short.MIN_VALUE, null}));
 	}
 
 	@Test
 	public void i03a_noSchemaTests_Long() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
 		for (Long v : AList.create(new Long(1), Long.MAX_VALUE, Long.MIN_VALUE))
-			assertEquals(valueOf(v), s.serialize(null, v));
+			assertEquals(valueOf(v), s.serialize((HttpPartSchema)null, v));
 	}
 
 	@Test
 	public void i03b_noSchemaTests_LongArray() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
-		assertEquals("1,9223372036854775807,-9223372036854775808,null", s.serialize(null, new Long[]{new Long(1), Long.MAX_VALUE, Long.MIN_VALUE, null}));
+		assertEquals("1,9223372036854775807,-9223372036854775808,null", s.serialize((HttpPartSchema)null, new Long[]{new Long(1), Long.MAX_VALUE, Long.MIN_VALUE, null}));
 	}
 
 	@Test
 	public void i04a_noSchemaTests_Float() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
 		for (Float v : AList.create(new Float(1f), Float.MAX_VALUE, Float.MIN_VALUE))
-			assertEquals(valueOf(v), s.serialize(null, v));
+			assertEquals(valueOf(v), s.serialize((HttpPartSchema)null, v));
 	}
 
 	@Test
 	public void i04b_noSchemaTests_FloatArray() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
-		assertEquals("1.0,3.4028235E38,1.4E-45", s.serialize(null, new Float[]{new Float(1f), Float.MAX_VALUE, Float.MIN_VALUE}));
+		assertEquals("1.0,3.4028235E38,1.4E-45", s.serialize((HttpPartSchema)null, new Float[]{new Float(1f), Float.MAX_VALUE, Float.MIN_VALUE}));
 	}
 
 	@Test
 	public void i05a_noSchemaTests_Double() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
 		for (Double v : AList.create(new Double(1d), Double.MAX_VALUE, Double.MIN_VALUE))
-			assertEquals(valueOf(v), s.serialize(null, v));
+			assertEquals(valueOf(v), s.serialize((HttpPartSchema)null, v));
 	}
 
 	@Test
 	public void i05b_noSchemaTests_DoubleArray() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
-		assertEquals("1.0,1.7976931348623157E308,4.9E-324", s.serialize(null, new Double[]{new Double(1), Double.MAX_VALUE, Double.MIN_VALUE}));
+		assertEquals("1.0,1.7976931348623157E308,4.9E-324", s.serialize((HttpPartSchema)null, new Double[]{new Double(1), Double.MAX_VALUE, Double.MIN_VALUE}));
 	}
 
 	@Test
 	public void i06a_noSchemaTests_Boolean() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
 		for (Boolean v : AList.create(Boolean.TRUE, Boolean.FALSE))
-			assertEquals(valueOf(v), s.serialize(null, v));
+			assertEquals(valueOf(v), s.serialize((HttpPartSchema)null, v));
 	}
 
 	@Test
 	public void i06b_noSchemaTests_BooleanArray() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
-		assertEquals("true,false,null", s.serialize(null, new Boolean[]{Boolean.TRUE, Boolean.FALSE, null}));
+		assertEquals("true,false,null", s.serialize((HttpPartSchema)null, new Boolean[]{Boolean.TRUE, Boolean.FALSE, null}));
 	}
 
 	@Test
 	public void i07_noSchemaTests_Null() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
-		assertEquals("null", s.serialize(null, null));
+		assertEquals("null", s.serialize((HttpPartSchema)null, null));
 	}
 
 	@Test
 	public void i08a_noSchemaTests_String() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
 		for (String v : AList.create("foo", "", null))
-			assertEquals(valueOf(v), s.serialize(null, v));
+			assertEquals(valueOf(v), s.serialize((HttpPartSchema)null, v));
 	}
 	@Test
 	public void i08b_noSchemaTests_StringArray() throws Exception {
 		HttpPartSerializer s = OpenApiSerializer.DEFAULT;
-		assertEquals("foo,,null", s.serialize(null, new String[]{"foo", "", null}));
+		assertEquals("foo,,null", s.serialize((HttpPartSchema)null, new String[]{"foo", "", null}));
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-dto/pom.xml b/juneau-core/juneau-dto/pom.xml
index 804686b..26379f6 100644
--- a/juneau-core/juneau-dto/pom.xml
+++ b/juneau-core/juneau-dto/pom.xml
@@ -94,6 +94,58 @@
 					</execution>
 				</executions>
 			</plugin>
+			<plugin>
+				<groupId>com.github.siom79.japicmp</groupId>
+				<artifactId>japicmp-maven-plugin</artifactId>
+				<version>0.13.0</version>
+				<configuration>
+					<skip>true</skip>
+					<oldVersion>
+						<dependency>
+							<groupId>org.apache.juneau</groupId>
+							<artifactId>${project.artifactId}</artifactId>
+							<version>${juneau.compare.version}</version>
+							<type>jar</type>
+						</dependency>
+					</oldVersion>
+					<newVersion>
+						<file>
+							<path>${project.build.directory}/${project.artifactId}-${project.version}.jar</path>
+						</file>
+					</newVersion>
+					<parameter>
+						<onlyModified>true</onlyModified>
+						<accessModifier>public</accessModifier>
+						<excludes>
+						</excludes>
+						<ignoreMissingClasses>true</ignoreMissingClasses>
+						<onlyBinaryIncompatible>true</onlyBinaryIncompatible>
+						<breakBuildOnBinaryIncompatibleModifications>true</breakBuildOnBinaryIncompatibleModifications>
+						<breakBuildIfCausedByExclusion>false</breakBuildIfCausedByExclusion>
+						<breakBuildBasedOnSemanticVersioning>true</breakBuildBasedOnSemanticVersioning>
+						<overrideCompatibilityChangeParameters>
+							<overrideCompatibilityChangeParameter>
+								<binaryCompatible>true</binaryCompatible>
+								<compatibilityChange>SUPERCLASS_REMOVED</compatibilityChange>
+								<sourceCompatible>true</sourceCompatible>
+							</overrideCompatibilityChangeParameter>
+							<overrideCompatibilityChangeParameter>
+								<binaryCompatible>true</binaryCompatible>
+								<compatibilityChange>FIELD_REMOVED_IN_SUPERCLASS</compatibilityChange>
+								<sourceCompatible>true</sourceCompatible>
+							</overrideCompatibilityChangeParameter>
+						</overrideCompatibilityChangeParameters>
+					</parameter>
+				</configuration>
+				<executions>
+					<execution>
+						<phase>verify</phase>
+						<goals>
+							<goal>cmp</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
index 194cdff..f3322a2 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/LinkString.java
@@ -154,4 +154,31 @@ public class LinkString implements Comparable<LinkString> {
 	public int hashCode() {
 		return super.hashCode();
 	}
+	
+	/**
+	 * @deprecated Use {@link #getUri()}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public String getHref() {
+		return getUri().toString();
+	}
+	
+	/**
+	 * @deprecated Use {@link #name(String)}.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public LinkString setName(String name) {
+		return name(name);
+	}
+	
+	/**
+	 * @deprecated Use {@link #uri(String,Object...)}.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public LinkString setHref(String href, Object...args) {
+		return uri(href, args);
+	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java
new file mode 100755
index 0000000..83c1308
--- /dev/null
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java
@@ -0,0 +1,1481 @@
+// ***************************************************************************************************************************
+// * 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.dto.jsonschema;
+
+import static org.apache.juneau.internal.StringUtils.*;
+
+import java.net.*;
+import java.net.URI;
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.json.*;
+import org.apache.juneau.parser.*;
+import org.apache.juneau.serializer.*;
+import org.apache.juneau.transform.*;
+
+/**
+ * @deprecated Use JsonSchema.
+ */
+@Deprecated
+@Bean(typeName="schema",
+	properties="id,$schema,$ref, title,description,type,definitions,properties,"
+		+ "patternProperties,dependencies,items,multipleOf,maximum,exclusiveMaximum,"
+		+ "minimum,exclusiveMinimum,maxLength,minLength,pattern,additionalItems,"
+		+ "maxItems,minItems,uniqueItems,maxProperties,minProperties,required,"
+		+ "additionalProperties,enum,allOf,anyOf,oneOf,not"
+)
+public class Schema {
+	private String name;                                   // Property name.  Not serialized.
+	private URI id;
+	private URI schemaVersion;
+	private String title;
+	private String description;
+	private JsonType typeJsonType;                         // JsonType representation of type
+	private JsonTypeArray typeJsonTypeArray;               // JsonTypeArray representation of type
+	private Map<String,Schema> definitions;
+	private Map<String,Schema> properties;
+	private Map<String,Schema> patternProperties;
+	private Map<String,Schema> dependencies;
+	private Schema itemsSchema;                            // Schema representation of items
+	private SchemaArray itemsSchemaArray;                  // SchemaArray representation of items
+	private Number multipleOf;
+	private Number maximum;
+	private Boolean exclusiveMaximum;
+	private Number minimum;
+	private Boolean exclusiveMinimum;
+	private Integer maxLength;
+	private Integer minLength;
+	private String pattern;
+	private Boolean additionalItemsBoolean;                // Boolean representation of additionalItems
+	private SchemaArray additionalItemsSchemaArray;        // SchemaArray representation of additionalItems
+	private Integer maxItems;
+	private Integer minItems;
+	private Boolean uniqueItems;
+	private Integer maxProperties;
+	private Integer minProperties;
+	private List<String> required;
+	private Boolean additionalPropertiesBoolean;           // Boolean representation of additionalProperties
+	private Schema additionalPropertiesSchema;             // Schema representation of additionalProperties
+	private List<String> _enum;
+	private List<Schema> allOf;
+	private List<Schema> anyOf;
+	private List<Schema> oneOf;
+	private Schema not;
+	private URI ref;
+	private SchemaMap schemaMap;
+	private Schema master = this;
+
+	/**
+	 * Default constructor.
+	 */
+	public Schema() {}
+
+
+	//--------------------------------------------------------------------------------
+	// Bean properties
+	//--------------------------------------------------------------------------------
+
+	/**
+	 * Bean property getter:  <property>name</property>.
+	 *
+	 * @return The value of the <property>name</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	@BeanIgnore
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * Bean property setter:  <property>name</property>.
+	 *
+	 * @param name The new value for the <property>name</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	@BeanIgnore
+	public Schema setName(String name) {
+		this.name = name;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>id</property>.
+	 *
+	 * @return The value of the <property>id</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public URI getId() {
+		return id;
+	}
+
+	/**
+	 * Bean property setter:  <property>id</property>.
+	 *
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 *
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
+	 * @param id The new value for the <property>id</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setId(Object id) {
+		this.id = toURI(id);
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>$schema</property>.
+	 *
+	 * @return The value of the <property>$schema</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	@BeanProperty("$schema")
+	public URI getSchemaVersionUri() {
+		return schemaVersion;
+	}
+
+	/**
+	 * Bean property setter:  <property>$schema</property>.
+	 *
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 *
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
+	 * @param schemaVersion The new value for the <property>schemaVersion</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("$schema")
+	public Schema setSchemaVersionUri(Object schemaVersion) {
+		this.schemaVersion = toURI(schemaVersion);
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>title</property>.
+	 *
+	 * @return The value of the <property>title</property> property, or <jk>null</jk> if it is not set.
+	 */
+	public String getTitle() {
+		return title;
+	}
+
+	/**
+	 * Bean property setter:  <property>title</property>.
+	 *
+	 * @param title The new value for the <property>title</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setTitle(String title) {
+		this.title = title;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>description</property>.
+	 *
+	 * @return The value of the <property>description</property> property, or <jk>null</jk> if it is not set.
+	 */
+	public String getDescription() {
+		return description;
+	}
+
+	/**
+	 * Bean property setter:  <property>description</property>.
+	 *
+	 * @param description The new value for the <property>description</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setDescription(String description) {
+		this.description = description;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>type</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>type</property> property on this bean, or <jk>null</jk> if it is not set.
+	 * 	Can be either a {@link JsonType} or {@link JsonTypeArray} depending on what value was used to set it.
+	 */
+	@Swap(JsonTypeOrJsonTypeArraySwap.class)
+	public Object getType() {
+		if (typeJsonType != null)
+			return typeJsonType;
+		return typeJsonTypeArray;
+	}
+
+	/**
+	 * Bean property getter:  <property>type</property>.
+	 *
+	 * <p>
+	 * Convenience method for returning the <property>type</property> property when it is a {@link JsonType} value.
+	 *
+	 * @return
+	 * 	The currently set value, or <jk>null</jk> if the property is not set, or is set as a {@link JsonTypeArray}.
+	 */
+	@BeanIgnore
+	public JsonType getTypeAsJsonType() {
+		return typeJsonType;
+	}
+
+	/**
+	 * Bean property getter:  <property>type</property>.
+	 *
+	 * <p>
+	 * Convenience method for returning the <property>type</property> property when it is a {@link JsonTypeArray} value.
+	 *
+	 * @return The currently set value, or <jk>null</jk> if the property is not set, or is set as a {@link JsonType}.
+	 */
+	@BeanIgnore
+	public JsonTypeArray getTypeAsJsonTypeArray() {
+		return typeJsonTypeArray;
+	}
+
+	/**
+	 * Bean property setter:  <property>type</property>.
+	 *
+	 * @param type
+	 * 	The new value for the <property>type</property> property on this bean.
+	 * 	This object must be of type {@link JsonType} or {@link JsonTypeArray}.
+	 * @return This object (for method chaining).
+	 * @throws BeanRuntimeException If invalid object type passed in.
+	 */
+	public Schema setType(Object type) {
+		this.typeJsonType = null;
+		this.typeJsonTypeArray = null;
+		if (type != null) {
+			if (type instanceof JsonType)
+				this.typeJsonType = (JsonType)type;
+			else if (type instanceof JsonTypeArray)
+				this.typeJsonTypeArray = (JsonTypeArray)type;
+			else
+				throw new BeanRuntimeException(SchemaProperty.class,
+					"Invalid attribute type ''{0}'' passed in.  Must be one of the following:  SimpleType, SimpleTypeArray",
+					type.getClass().getName());
+		}
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>type</property>.
+	 *
+	 * @param types The list of items to append to the <property>type</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addTypes(JsonType...types) {
+		if (this.typeJsonTypeArray == null)
+			this.typeJsonTypeArray = new JsonTypeArray();
+		this.typeJsonTypeArray.addAll(types);
+		return this;
+	}
+
+	/**
+	 * Used during parsing to convert the <property>type</property> property to the correct class type.
+	 *
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		If parsing a JSON-array, converts to a {@link JsonTypeArray}.
+	 * 	<li>
+	 * 		If parsing a JSON-object, converts to a {@link JsonType}.
+	 * </ul>
+	 *
+	 * <p>
+	 * Serialization method is a no-op.
+	 */
+	public static class JsonTypeOrJsonTypeArraySwap extends PojoSwap<Object,Object> {
+
+		@Override /* PojoSwap */
+		public Object swap(BeanSession session, Object o) throws SerializeException {
+			return o;
+		}
+
+		@Override /* PojoSwap */
+		public Object unswap(BeanSession session, Object o, ClassMeta<?> hint) throws ParseException {
+			ClassMeta<?> cm = (
+				o instanceof Collection
+				? session.getClassMeta(JsonTypeArray.class)
+				: session.getClassMeta(JsonType.class)
+			);
+			return session.convertToType(o, cm);
+		}
+	}
+
+	/**
+	 * Bean property getter:  <property>definitions</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>definitions</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Map<String,Schema> getDefinitions() {
+		return definitions;
+	}
+
+	/**
+	 * Bean property setter:  <property>definitions</property>.
+	 *
+	 * @param definitions The new value for the <property>definitions</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setDefinitions(Map<String,Schema> definitions) {
+		this.definitions = definitions;
+		if (definitions != null)
+			setMasterOn(definitions.values());
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>definitions</property>.
+	 *
+	 * @param name The key in the definitions map entry.
+	 * @param definition The value in the definitions map entry.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addDefinition(String name, Schema definition) {
+		if (this.definitions == null)
+			this.definitions = new LinkedHashMap<>();
+		this.definitions.put(name, definition);
+		setMasterOn(definition);
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>properties</property>.
+	 *
+	 * @return The value of the <property>properties</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Map<String,Schema> getProperties() {
+		return properties;
+	}
+
+	/**
+	 * Returns the property with the specified name.
+	 *
+	 * <p>
+	 * This is equivalent to calling <property>getProperty(name, <jk>false</jk>)</property>.
+	 *
+	 * @param name The property name.
+	 * @return The property with the specified name, or <jk>null</jk> if no property is specified.
+	 */
+	public Schema getProperty(String name) {
+		return getProperty(name, false);
+	}
+
+	/**
+	 * Returns the property with the specified name.
+	 *
+	 * <p>
+	 * If <property>resolve</property> is <jk>true</jk>, the property object will automatically be  resolved by calling
+	 * {@link #resolve()}.
+	 * Therefore, <property>getProperty(name, <jk>true</jk>)</property> is equivalent to calling
+	 * <property>getProperty(name).resolve()</property>, except it's safe from a potential
+	 * <property>NullPointerException</property>.
+	 *
+	 * @param name The property name.
+	 * @param resolve If <jk>true</jk>, calls {@link #resolve()} on object before returning.
+	 * @return The property with the specified name, or <jk>null</jk> if no property is specified.
+	 */
+	public Schema getProperty(String name, boolean resolve) {
+		if (properties == null)
+			return null;
+		Schema s = properties.get(name);
+		if (s == null)
+			return null;
+		if (resolve)
+			s = s.resolve();
+		return s;
+	}
+
+	/**
+	 * Bean property setter:  <property>properties</property>.
+	 *
+	 * @param properties The new value for the <property>properties</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setProperties(Map<String,Schema> properties) {
+		this.properties = properties;
+		if (properties != null)
+			for (Map.Entry<String,Schema> e : properties.entrySet()) {
+				Schema value = e.getValue();
+				setMasterOn(value);
+				value.setName(e.getKey());
+			}
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>properties</property>.
+	 *
+	 * <p>
+	 * Properties must have their <property>name</property> property set on them when using this method.
+	 *
+	 * @param properties The list of items to append to the <property>properties</property> property on this bean.
+	 * @return This object (for method chaining).
+	 * @throws BeanRuntimeException If property is found without a set <property>name</property> property.
+	 */
+	public Schema addProperties(Schema...properties) {
+		if (this.properties == null)
+			this.properties = new LinkedHashMap<>();
+		for (Schema p : properties) {
+			if (p.getName() == null)
+				throw new BeanRuntimeException(Schema.class,
+					"Invalid property passed to Schema.addProperties().  Property name was null.");
+			setMasterOn(p);
+			this.properties.put(p.getName(), p);
+		}
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>patternProperties</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>patternProperties</property> property on this bean, or <jk>null</jk> if it is
+	 * 	not set.
+	 */
+	public Map<String,Schema> getPatternProperties() {
+		return patternProperties;
+	}
+
+	/**
+	 * Bean property setter:  <property>patternProperties</property>.
+	 *
+	 * @param patternProperties The new value for the <property>patternProperties</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setPatternProperties(Map<String,Schema> patternProperties) {
+		this.patternProperties = patternProperties;
+		if (patternProperties != null)
+			for (Map.Entry<String,Schema> e : patternProperties.entrySet()) {
+				Schema s = e.getValue();
+				setMasterOn(s);
+				s.setName(e.getKey());
+			}
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>patternProperties</property>.
+	 *
+	 * <p>
+	 * Properties must have their <property>name</property> property set to the pattern string when using this method.
+	 *
+	 * @param properties The list of items to append to the <property>patternProperties</property> property on this bean.
+	 * @return This object (for method chaining).
+	 * @throws BeanRuntimeException If property is found without a set <property>name</property> property.
+	 */
+	public Schema addPatternProperties(SchemaProperty...properties) {
+		if (this.patternProperties == null)
+			this.patternProperties = new LinkedHashMap<>();
+		for (Schema p : properties) {
+			if (p.getName() == null)
+				throw new BeanRuntimeException(Schema.class,
+					"Invalid property passed to Schema.addProperties().  Property name was null.");
+			setMasterOn(p);
+			this.patternProperties.put(p.getName(), p);
+		}
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>dependencies</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>dependencies</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Map<String,Schema> getDependencies() {
+		return dependencies;
+	}
+
+	/**
+	 * Bean property setter:  <property>dependencies</property>.
+	 *
+	 * @param dependencies The new value for the <property>dependencies</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setDependencies(Map<String,Schema> dependencies) {
+		this.dependencies = dependencies;
+		if (dependencies != null)
+			setMasterOn(dependencies.values());
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>dependencies</property>.
+	 *
+	 * @param name The key of the entry in the dependencies map.
+	 * @param dependency The value of the entry in the dependencies map.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addDependency(String name, Schema dependency) {
+		if (this.dependencies == null)
+			this.dependencies = new LinkedHashMap<>();
+		this.dependencies.put(name, dependency);
+		setMasterOn(dependency);
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>items</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>items</property> property on this bean, or <jk>null</jk> if it is not set.
+	 * 	Can be either a {@link Schema} or {@link SchemaArray} depending on what value was used to set it.
+	 */
+	@Swap(SchemaOrSchemaArraySwap.class)
+	public Object getItems() {
+		if (itemsSchema != null)
+			return itemsSchema;
+		return itemsSchemaArray;
+	}
+
+	/**
+	 * Bean property getter:  <property>items</property>.
+	 *
+	 * <p>
+	 * Convenience method for returning the <property>items</property> property when it is a {@link Schema} value.
+	 *
+	 * @return The currently set value, or <jk>null</jk> if the property is not set, or is set as a {@link SchemaArray}.
+	 */
+	@BeanIgnore
+	public Schema getItemsAsSchema() {
+		return itemsSchema;
+	}
+
+	/**
+	 * Bean property getter:  <property>items</property>.
+	 *
+	 * <p>
+	 * Convenience method for returning the <property>items</property> property when it is a {@link SchemaArray} value.
+	 *
+	 * @return The currently set value, or <jk>null</jk> if the property is not set, or is set as a {@link Schema}.
+	 */
+	@BeanIgnore
+	public SchemaArray getItemsAsSchemaArray() {
+		return itemsSchemaArray;
+	}
+
+	/**
+	 * Used during parsing to convert the <property>items</property> property to the correct class type.
+	 *
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		If parsing a JSON-array, converts to a {@link SchemaArray}.
+	 * 	<li>
+	 * 		If parsing a JSON-object, converts to a {@link Schema}.
+	 * </ul>
+	 *
+	 * <p>
+	 * Serialization method is a no-op.
+	 */
+	public static class SchemaOrSchemaArraySwap extends PojoSwap<Object,Object> {
+
+		@Override /* PojoSwap */
+		public Object swap(BeanSession session, Object o) throws SerializeException {
+			return o;
+		}
+
+		@Override /* PojoSwap */
+		public Object unswap(BeanSession session, Object o, ClassMeta<?> hint) throws ParseException {
+			ClassMeta<?> cm = (
+				o instanceof Collection
+				? session.getClassMeta(SchemaArray.class)
+				: session.getClassMeta(Schema.class)
+			);
+			return session.convertToType(o, cm);
+		}
+	}
+
+	/**
+	 * Bean property setter:  <property>items</property>.
+	 *
+	 * @param
+	 * 	items The new value for the <property>items</property> property on this bean.
+	 * 	This object must be of type {@link Schema} or {@link SchemaArray}.
+	 * @return This object (for method chaining).
+	 * @throws BeanRuntimeException If invalid object type passed in.
+	 */
+	public Schema setItems(Object items) {
+		this.itemsSchema = null;
+		this.itemsSchemaArray = null;
+		if (items != null) {
+			if (items instanceof Schema) {
+				this.itemsSchema = (Schema)items;
+				setMasterOn(this.itemsSchema);
+			} else if (items instanceof SchemaArray) {
+				this.itemsSchemaArray = (SchemaArray)items;
+				setMasterOn(this.itemsSchemaArray);
+			} else
+				throw new BeanRuntimeException(SchemaProperty.class,
+					"Invalid attribute type ''{0}'' passed in.  Must be one of the following:  Schema, SchemaArray",
+					items.getClass().getName());
+		}
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>items</property>.
+	 *
+	 * @param items The list of items to append to the <property>items</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addItems(Schema...items) {
+		if (this.itemsSchemaArray == null)
+			this.itemsSchemaArray = new SchemaArray();
+		this.itemsSchemaArray.addAll(items);
+		setMasterOn(items);
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>multipleOf</property>.
+	 *
+	 * @return The value of the <property>multipleOf</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Number getMultipleOf() {
+		return multipleOf;
+	}
+
+	/**
+	 * Bean property setter:  <property>multipleOf</property>.
+	 *
+	 * @param multipleOf The new value for the <property>multipleOf</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setMultipleOf(Number multipleOf) {
+		this.multipleOf = multipleOf;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>maximum</property>.
+	 *
+	 * @return The value of the <property>maximum</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Number getMaximum() {
+		return maximum;
+	}
+
+	/**
+	 * Bean property setter:  <property>maximum</property>.
+	 *
+	 * @param maximum The new value for the <property>maximum</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setMaximum(Number maximum) {
+		this.maximum = maximum;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>exclusiveMaximum</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>exclusiveMaximum</property> property on this bean, or <jk>null</jk> if it is
+	 * 	not set.
+	 */
+	public Boolean isExclusiveMaximum() {
+		return exclusiveMaximum;
+	}
+
+	/**
+	 * Bean property setter:  <property>exclusiveMaximum</property>.
+	 *
+	 * @param exclusiveMaximum The new value for the <property>exclusiveMaximum</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setExclusiveMaximum(Boolean exclusiveMaximum) {
+		this.exclusiveMaximum = exclusiveMaximum;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>minimum</property>.
+	 *
+	 * @return The value of the <property>minimum</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Number getMinimum() {
+		return minimum;
+	}
+
+	/**
+	 * Bean property setter:  <property>minimum</property>.
+	 *
+	 * @param minimum The new value for the <property>minimum</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setMinimum(Number minimum) {
+		this.minimum = minimum;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>exclusiveMinimum</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>exclusiveMinimum</property> property on this bean, or <jk>null</jk> if it is
+	 * 	not set.
+	 */
+	public Boolean isExclusiveMinimum() {
+		return exclusiveMinimum;
+	}
+
+	/**
+	 * Bean property setter:  <property>exclusiveMinimum</property>.
+	 *
+	 * @param exclusiveMinimum The new value for the <property>exclusiveMinimum</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setExclusiveMinimum(Boolean exclusiveMinimum) {
+		this.exclusiveMinimum = exclusiveMinimum;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>maxLength</property>.
+	 *
+	 * @return The value of the <property>maxLength</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Integer getMaxLength() {
+		return maxLength;
+	}
+
+	/**
+	 * Bean property setter:  <property>maxLength</property>.
+	 *
+	 * @param maxLength The new value for the <property>maxLength</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setMaxLength(Integer maxLength) {
+		this.maxLength = maxLength;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>minLength</property>.
+	 *
+	 * @return The value of the <property>minLength</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Integer getMinLength() {
+		return minLength;
+	}
+
+	/**
+	 * Bean property setter:  <property>minLength</property>.
+	 *
+	 * @param minLength The new value for the <property>minLength</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setMinLength(Integer minLength) {
+		this.minLength = minLength;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>pattern</property>.
+	 *
+	 * @return The value of the <property>pattern</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public String getPattern() {
+		return pattern;
+	}
+
+	/**
+	 * Bean property setter:  <property>pattern</property>.
+	 *
+	 * @param pattern The new value for the <property>pattern</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setPattern(String pattern) {
+		this.pattern = pattern;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>additionalItems</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>additionalItems</property> property on this bean, or <jk>null</jk> if it is
+	 * 	not set.
+	 * 	Can be either a {@link Boolean} or {@link SchemaArray} depending on what value was used to set it.
+	 */
+	@Swap(BooleanOrSchemaArraySwap.class)
+	public Object getAdditionalItems() {
+		if (additionalItemsBoolean != null)
+			return additionalItemsBoolean;
+		return additionalItemsSchemaArray;
+	}
+
+	/**
+	 * Bean property getter:  <property>additionalItems</property>.
+	 *
+	 * <p>
+	 * Convenience method for returning the <property>additionalItems</property> property when it is a {@link Boolean}
+	 * value.
+	 *
+	 * @return The currently set value, or <jk>null</jk> if the property is not set, or is set as a {@link SchemaArray}.
+	 */
+	@BeanIgnore
+	public Boolean getAdditionalItemsAsBoolean() {
+		return additionalItemsBoolean;
+	}
+
+	/**
+	 * Bean property getter:  <property>additionalItems</property>.
+	 *
+	 * <p>
+	 * Convenience method for returning the <property>additionalItems</property> property when it is a
+	 * {@link SchemaArray} value.
+	 *
+	 * @return The currently set value, or <jk>null</jk> if the property is not set, or is set as a {@link Boolean}.
+	 */
+	@BeanIgnore
+	public List<Schema> getAdditionalItemsAsSchemaArray() {
+		return additionalItemsSchemaArray;
+	}
+
+	/**
+	 * Bean property setter:  <property>additionalItems</property>.
+	 *
+	 * @param additionalItems
+	 * 	The new value for the <property>additionalItems</property> property on this bean.
+	 * 	This object must be of type {@link Boolean} or {@link SchemaArray}.
+	 * @return This object (for method chaining).
+	 * @throws BeanRuntimeException If invalid object type passed in.
+	 */
+	public Schema setAdditionalItems(Object additionalItems) {
+		this.additionalItemsBoolean = null;
+		this.additionalItemsSchemaArray = null;
+		if (additionalItems != null) {
+			if (additionalItems instanceof Boolean)
+				this.additionalItemsBoolean = (Boolean)additionalItems;
+			else if (additionalItems instanceof SchemaArray) {
+				this.additionalItemsSchemaArray = (SchemaArray)additionalItems;
+				setMasterOn(this.additionalItemsSchemaArray);
+			} else
+				throw new BeanRuntimeException(SchemaProperty.class,
+					"Invalid attribute type ''{0}'' passed in.  Must be one of the following:  Boolean, SchemaArray",
+					additionalItems.getClass().getName());
+		}
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>additionalItems</property>.
+	 *
+	 * @param additionalItems
+	 * 	The list of items to append to the <property>additionalItems</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addAdditionalItems(Schema...additionalItems) {
+		if (this.additionalItemsSchemaArray == null)
+			this.additionalItemsSchemaArray = new SchemaArray();
+		this.additionalItemsSchemaArray.addAll(additionalItems);
+		setMasterOn(additionalItems);
+		return this;
+	}
+
+	/**
+	 * Used during parsing to convert the <property>additionalItems</property> property to the correct class type.
+	 *
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		If parsing a JSON-array, converts to a {@link SchemaArray}.
+	 * 	<li>
+	 * 		If parsing a JSON-boolean, converts to a {@link Boolean}.
+	 * </ul>
+	 *
+	 * <p>
+	 * Serialization method is a no-op.
+	 */
+	public static class BooleanOrSchemaArraySwap extends PojoSwap<Object,Object> {
+
+		@Override /* PojoSwap */
+		public Object swap(BeanSession session, Object o) throws SerializeException {
+			return o;
+		}
+
+		@Override /* PojoSwap */
+		public Object unswap(BeanSession session, Object o, ClassMeta<?> hint) throws ParseException {
+			ClassMeta<?> cm = (
+				o instanceof Collection
+				? session.getClassMeta(SchemaArray.class)
+				: session.getClassMeta(Boolean.class)
+			);
+			return session.convertToType(o, cm);
+		}
+	}
+
+	/**
+	 * Bean property getter:  <property>maxItems</property>.
+	 *
+	 * @return The value of the <property>maxItems</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Integer getMaxItems() {
+		return maxItems;
+	}
+
+	/**
+	 * Bean property setter:  <property>maxItems</property>.
+	 *
+	 * @param maxItems The new value for the <property>maxItems</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setMaxItems(Integer maxItems) {
+		this.maxItems = maxItems;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>minItems</property>.
+	 *
+	 * @return The value of the <property>minItems</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Integer getMinItems() {
+		return minItems;
+	}
+
+	/**
+	 * Bean property setter:  <property>minItems</property>.
+	 *
+	 * @param minItems The new value for the <property>minItems</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setMinItems(Integer minItems) {
+		this.minItems = minItems;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>uniqueItems</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>uniqueItems</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Boolean getUniqueItems() {
+		return uniqueItems;
+	}
+
+	/**
+	 * Bean property setter:  <property>uniqueItems</property>.
+	 *
+	 * @param uniqueItems The new value for the <property>uniqueItems</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setUniqueItems(Boolean uniqueItems) {
+		this.uniqueItems = uniqueItems;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>maxProperties</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>maxProperties</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Integer getMaxProperties() {
+		return maxProperties;
+	}
+
+	/**
+	 * Bean property setter:  <property>maxProperties</property>.
+	 *
+	 * @param maxProperties The new value for the <property>maxProperties</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setMaxProperties(Integer maxProperties) {
+		this.maxProperties = maxProperties;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>minProperties</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>minProperties</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Integer getMinProperties() {
+		return minProperties;
+	}
+
+	/**
+	 * Bean property setter:  <property>minProperties</property>.
+	 *
+	 * @param minProperties The new value for the <property>minProperties</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setMinProperties(Integer minProperties) {
+		this.minProperties = minProperties;
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>required</property>.
+	 *
+	 * @return The value of the <property>required</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public List<String> getRequired() {
+		return required;
+	}
+
+	/**
+	 * Bean property setter:  <property>required</property>.
+	 *
+	 * @param required The new value for the <property>required</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setRequired(List<String> required) {
+		this.required = required;
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>required</property>.
+	 *
+	 * @param required The list of items to append to the <property>required</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addRequired(List<String> required) {
+		if (this.required == null)
+			this.required = new LinkedList<>();
+		for (String r : required)
+			this.required.add(r);
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>required</property>.
+	 *
+	 * @param required The list of items to append to the <property>required</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addRequired(String...required) {
+		if (this.required == null)
+			this.required = new LinkedList<>();
+		for (String r : required)
+			this.required.add(r);
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>required</property>.
+	 *
+	 * @param properties The list of items to append to the <property>required</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addRequired(SchemaProperty...properties) {
+		if (this.required == null)
+			this.required = new LinkedList<>();
+		for (SchemaProperty p : properties)
+			this.required.add(p.getName());
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>additionalProperties</property>.
+	 *
+	 * @return
+	 * 	The value of the <property>additionalProperties</property> property on this bean, or <jk>null</jk> if it
+	 * 	is not set.
+	 * 	Can be either a {@link Boolean} or {@link SchemaArray} depending on what value was used to set it.
+	 */
+	@Swap(BooleanOrSchemaSwap.class)
+	public Object getAdditionalProperties() {
+		if (additionalPropertiesBoolean != null)
+			return additionalItemsBoolean;
+		return additionalPropertiesSchema;
+	}
+
+	/**
+	 * Bean property getter:  <property>additionalProperties</property>.
+	 *
+	 * <p>
+	 * Convenience method for returning the <property>additionalProperties</property> property when it is a
+	 * {@link Boolean} value.
+	 *
+	 * @return The currently set value, or <jk>null</jk> if the property is not set, or is set as a {@link Schema}.
+	 */
+	@BeanIgnore
+	public Boolean getAdditionalPropertiesAsBoolean() {
+		return additionalPropertiesBoolean;
+	}
+
+	/**
+	 * Bean property getter:  <property>additionalProperties</property>.
+	 *
+	 * <p>
+	 * Convenience method for returning the <property>additionalProperties</property> property when it is a
+	 * {@link Schema} value.
+	 *
+	 * @return The currently set value, or <jk>null</jk> if the property is not set, or is set as a {@link Boolean}.
+	 */
+	@BeanIgnore
+	public Schema getAdditionalPropertiesAsSchema() {
+		return additionalPropertiesSchema;
+	}
+
+	/**
+	 * Bean property setter:  <property>additionalProperties</property>.
+	 *
+	 * @param additionalProperties
+	 * 	The new value for the <property>additionalProperties</property> property on this bean.
+	 * 	This object must be of type {@link Boolean} or {@link Schema}.
+	 * @return This object (for method chaining).
+	 * @throws BeanRuntimeException If invalid object type passed in.
+	 */
+	@BeanProperty(beanDictionary={Schema.class})
+	public Schema setAdditionalProperties(Object additionalProperties) {
+		this.additionalPropertiesBoolean = null;
+		this.additionalPropertiesSchema = null;
+		if (additionalProperties != null) {
+			if (additionalProperties instanceof Boolean)
+				this.additionalPropertiesBoolean = (Boolean)additionalProperties;
+			else if (additionalProperties instanceof Schema) {
+				this.additionalPropertiesSchema = (Schema)additionalProperties;
+				setMasterOn(this.additionalPropertiesSchema);
+			} else
+				throw new BeanRuntimeException(SchemaProperty.class,
+					"Invalid attribute type ''{0}'' passed in.  Must be one of the following:  Boolean, Schema",
+					additionalProperties.getClass().getName());
+		}
+		return this;
+	}
+
+	/**
+	 * Used during parsing to convert the <property>additionalProperties</property> property to the correct class type.
+	 *
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		If parsing a JSON-object, converts to a {@link Schema}.
+	 * 	<li>
+	 * 		If parsing a JSON-boolean, converts to a {@link Boolean}.
+	 * </ul>
+	 *
+	 * <p>
+	 * Serialization method is a no-op.
+	 */
+	public static class BooleanOrSchemaSwap extends PojoSwap<Object,Object> {
+
+		@Override /* PojoSwap */
+		public Object swap(BeanSession session, Object o) throws SerializeException {
+			return o;
+		}
+
+		@Override /* PojoSwap */
+		public Object unswap(BeanSession session, Object o, ClassMeta<?> hint) throws ParseException {
+			ClassMeta<?> cm = (
+				o instanceof Boolean
+				? session.getClassMeta(Boolean.class)
+				: session.getClassMeta(Schema.class)
+			);
+			return session.convertToType(o, cm);
+		}
+	}
+
+	/**
+	 * Bean property getter:  <property>enum</property>.
+	 *
+	 * @return The value of the <property>enum</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public List<String> getEnum() {
+		return _enum;
+	}
+
+	/**
+	 * Bean property setter:  <property>enum</property>.
+	 *
+	 * @param _enum The new value for the <property>enum</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setEnum(List<String> _enum) {
+		this._enum = _enum;
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>enum</property>.
+	 *
+	 * @param _enum The list of items to append to the <property>enum</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addEnum(String..._enum) {
+		if (this._enum == null)
+			this._enum = new LinkedList<>();
+		for (String e : _enum)
+			this._enum.add(e);
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>allOf</property>.
+	 *
+	 * @return The value of the <property>allOf</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public List<Schema> getAllOf() {
+		return allOf;
+	}
+
+	/**
+	 * Bean property setter:  <property>allOf</property>.
+	 *
+	 * @param allOf The new value for the <property>allOf</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setAllOf(List<Schema> allOf) {
+		this.allOf = allOf;
+		setMasterOn(allOf);
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>allOf</property>.
+	 *
+	 * @param allOf The list of items to append to the <property>allOf</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addAllOf(Schema...allOf) {
+		if (this.allOf == null)
+			this.allOf = new LinkedList<>();
+		setMasterOn(allOf);
+		for (Schema s : allOf)
+			this.allOf.add(s);
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>anyOf</property>.
+	 *
+	 * @return The value of the <property>anyOf</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public List<Schema> getAnyOf() {
+		return anyOf;
+	}
+
+	/**
+	 * Bean property setter:  <property>anyOf</property>.
+	 *
+	 * @param anyOf The new value of the <property>anyOf</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setAnyOf(List<Schema> anyOf) {
+		this.anyOf = anyOf;
+		setMasterOn(anyOf);
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>anyOf</property>.
+	 *
+	 * @param anyOf The list of items to append to the <property>anyOf</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addAnyOf(Schema...anyOf) {
+		if (this.anyOf == null)
+			this.anyOf = new LinkedList<>();
+		setMasterOn(anyOf);
+		for (Schema s : anyOf)
+			this.anyOf.add(s);
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>oneOf</property>.
+	 *
+	 * @return The value of the <property>oneOf</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public List<Schema> getOneOf() {
+		return oneOf;
+	}
+
+	/**
+	 * Bean property setter:  <property>oneOf</property>.
+	 *
+	 * @param oneOf The new value for the <property>oneOf</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setOneOf(List<Schema> oneOf) {
+		this.oneOf = oneOf;
+		setMasterOn(oneOf);
+		return this;
+	}
+
+	/**
+	 * Bean property appender:  <property>oneOf</property>.
+	 *
+	 * @param oneOf The list of items to append to the <property>oneOf</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema addOneOf(Schema...oneOf) {
+		if (this.oneOf == null)
+			this.oneOf = new LinkedList<>();
+		setMasterOn(oneOf);
+		for (Schema s : oneOf)
+			this.oneOf.add(s);
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>not</property>.
+	 *
+	 * @return The value of the <property>not</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	public Schema getNot() {
+		return not;
+	}
+
+	/**
+	 * Bean property setter:  <property>not</property>.
+	 *
+	 * @param not The new value for the <property>not</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setNot(Schema not) {
+		this.not = not;
+		setMasterOn(not);
+		return this;
+	}
+
+	/**
+	 * Bean property getter:  <property>$ref</property>.
+	 *
+	 * @return The value of the <property>$ref</property> property on this bean, or <jk>null</jk> if it is not set.
+	 */
+	@BeanProperty("$ref")
+	public URI getRef() {
+		return ref;
+	}
+
+	/**
+	 * Bean property setter:  <property>$ref</property>.
+	 *
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 *
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
+	 * @param ref The new value for the <property>$ref</property> property on this bean.
+	 * @return This object (for method chaining).
+	 */
+	@BeanProperty("$ref")
+	public Schema setRef(Object ref) {
+		this.ref = toURI(ref);
+		return this;
+	}
+
+	private void setMasterOn(Schema s) {
+		if (s != null)
+			s.setMaster(this);
+	}
+
+	private void setMasterOn(Schema[] ss) {
+		if (ss != null)
+			for (Schema s : ss)
+				setMasterOn(s);
+	}
+
+	private void setMasterOn(Collection<Schema> ss) {
+		if (ss != null)
+			for (Schema s : ss)
+				setMasterOn(s);
+	}
+
+	private void setMasterOn(SchemaArray ss) {
+		if (ss != null)
+			for (Schema s : ss)
+				setMasterOn(s);
+	}
+
+	/**
+	 * Sets the master schema for this schema and all child schema objects.
+	 *
+	 * <p>
+	 * All child elements in a schema should point to a single "master" schema in order to locate registered SchemaMap
+	 * objects for resolving external schemas.
+	 *
+	 * @param master The master schema to associate on this and all children.  Can be <jk>null</jk>.
+	 */
+	protected void setMaster(Schema master) {
+		this.master = master;
+		if (definitions != null)
+			for (Schema s : definitions.values())
+				s.setMaster(master);
+		if (properties != null)
+			for (Schema s : properties.values())
+				s.setMaster(master);
+		if (patternProperties != null)
+			for (Schema s : patternProperties.values())
+				s.setMaster(master);
+		if (dependencies != null)
+			for (Schema s : dependencies.values())
+				s.setMaster(master);
+		if (itemsSchema != null)
+			itemsSchema.setMaster(master);
+		if (itemsSchemaArray != null)
+			for (Schema s : itemsSchemaArray)
+				s.setMaster(master);
+		if (additionalItemsSchemaArray != null)
+			for (Schema s : additionalItemsSchemaArray)
+				s.setMaster(master);
+		if (additionalPropertiesSchema != null)
+			additionalPropertiesSchema.setMaster(master);
+		if (allOf != null)
+			for (Schema s : allOf)
+				s.setMaster(master);
+		if (anyOf != null)
+			for (Schema s : anyOf)
+				s.setMaster(master);
+		if (oneOf != null)
+			for (Schema s : oneOf)
+				s.setMaster(master);
+		if (not != null)
+			not.setMaster(master);
+	}
+	/**
+	 * If this schema is a reference to another schema (i.e. has its <property>$ref</property> property set), this
+	 * method will retrieve the referenced schema from the schema map registered with this schema.
+	 *
+	 * <p>
+	 * If this schema is not a reference, or no schema map is registered with this schema, this method is a no-op and
+	 * simply returns this object.
+	 *
+	 * @return The referenced schema, or <jk>null</jk>.
+	 */
+	public Schema resolve() {
+		if (ref == null || master.schemaMap == null)
+			return this;
+		return master.schemaMap.get(ref);
+	}
+
+	/**
+	 * Associates a schema map with this schema for resolving other schemas identified through <property>$ref</property>
+	 * properties.
+	 *
+	 * @param schemaMap The schema map to associate with this schema.  Can be <jk>null</jk>.
+	 * @return This object (for method chaining).
+	 */
+	public Schema setSchemaMap(SchemaMap schemaMap) {
+		this.schemaMap = schemaMap;
+		return this;
+	}
+
+	@Override /* Object */
+	public String toString() {
+		return JsonSerializer.DEFAULT.toString(this);
+	}
+}
diff --git a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/XPartSerializer.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaArray.java
old mode 100644
new mode 100755
similarity index 65%
copy from juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/XPartSerializer.java
copy to juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaArray.java
index bb533f0..264396d
--- a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/XPartSerializer.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaArray.java
@@ -1,37 +1,50 @@
-// ***************************************************************************************************************************
-// * 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.rest.testutils;
-
-import org.apache.juneau.httppart.*;
-import org.apache.juneau.serializer.*;
-
-/**
- * Test serializer.
- */
-public class XPartSerializer extends BaseHttpPartSerializer {
-
-	@Override
-	public HttpPartSerializerSession createPartSession(SerializerSessionArgs args) {
-		return new BaseHttpPartSerializerSession() {
-			@Override
-			public String serialize(HttpPartType partType, HttpPartSchema schema, Object value) throws SerializeException, SchemaValidationException {
-				return "x" + value + "x";
-			}
-		};
-	}
-
-	@Override
-	public String serialize(HttpPartType partType, HttpPartSchema schema, Object value) throws SchemaValidationException, SerializeException {
-		return createPartSession().serialize(partType, schema, value);
-	}
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * 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.dto.jsonschema;
+
+import java.util.*;
+
+/**
+ * @deprecated Use JsonSchemaArray.
+ */
+@Deprecated
+public class SchemaArray extends LinkedList<Schema> {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Default constructor.
+	 */
+	public SchemaArray() {}
+
+	/**
+	 * Constructor with predefined types to add to this list.
+	 *
+	 * @param schemas The list of schemas in this array.
+	 */
+	public SchemaArray(Schema...schemas) {
+		addAll(schemas);
+	}
+
+	/**
+	 * Convenience method for adding one or more {@link Schema} objects to this array.
+	 *
+	 * @param schemas The {@link Schema} objects to add to this array.
+	 * @return This object (for method chaining).
+	 */
+	public SchemaArray addAll(Schema...schemas) {
+		for (Schema s : schemas)
+			add(s);
+		return this;
+	}
+}
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaMap.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaMap.java
new file mode 100755
index 0000000..5e80da6
--- /dev/null
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaMap.java
@@ -0,0 +1,123 @@
+// ***************************************************************************************************************************
+// * 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.dto.jsonschema;
+
+import static org.apache.juneau.internal.StringUtils.*;
+import java.io.*;
+import java.net.*;
+import java.util.concurrent.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.json.*;
+
+/**
+ * @deprecated Use JsonSchemaMap.
+ */
+@Deprecated
+public abstract class SchemaMap extends ConcurrentHashMap<URI,Schema> {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Return the {@link Schema} object at the specified URI.
+	 *
+	 * <p>
+	 * If this schema object has not been loaded yet, calls {@link #load(URI)}.
+	 *
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 *
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
+	 * @param uri The URI of the schema to retrieve.
+	 * @return The Schema, or <jk>null</jk> if schema was not located and could not be loaded.
+	 */
+	@Override /* Map */
+	public Schema get(Object uri) {
+		URI u = toURI(uri);
+		Schema s = super.get(u);
+		if (s != null)
+			return s;
+		synchronized(this) {
+			s = load(u);
+			if (s != null) {
+				// Note:  Can't use add(Schema...) since the ID property may not be set.
+				s.setSchemaMap(this);
+				put(u, s);
+			}
+			return s;
+		}
+	}
+
+	/**
+	 * Convenience method for pre-populating this map with the specified schemas.
+	 *
+	 * <p>
+	 * The schemas passed in through this method MUST have their ID properties set.
+	 *
+	 * @param schemas The set of schemas to add to this map.
+	 * @return This object (for method chaining).
+	 * @throws RuntimeException If one or more schema objects did not have their ID property set.
+	 */
+	public SchemaMap add(Schema...schemas) {
+		for (Schema schema : schemas) {
+			if (schema.getId() == null)
+				throw new RuntimeException("Schema with no ID passed to SchemaMap.add(Schema...)");
+			put(schema.getId(), schema);
+			schema.setSchemaMap(this);
+		}
+		return this;
+	}
+
+	/**
+	 * Subclasses must implement either this method or {@link #getReader(URI)} to load the schema with the specified URI.
+	 *
+	 * <p>
+	 * It's up to the implementer to decide where these come from.
+	 *
+	 * <p>
+	 * The default implementation calls {@link #getReader(URI)} and parses the schema document.
+	 * If {@link #getReader(URI)} returns <jk>null</jk>, this method returns <jk>null</jk> indicating this is an
+	 * unreachable document.
+	 *
+	 * @param uri The URI to load the schema from.
+	 * @return The parsed schema.
+	 */
+	public Schema load(URI uri) {
+		try (Reader r = getReader(uri)) {
+			if (r == null)
+				return null;
+			return JsonParser.DEFAULT.parse(r, Schema.class);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	/**
+	 * Subclasses must implement either this method or {@link #load(URI)} to load the schema with the specified URI.
+	 *
+	 * <p>
+	 * It's up to the implementer to decide where these come from.
+	 *
+	 * <p>
+	 * The default implementation returns <jk>null</jk>.
+	 *
+	 * @param uri The URI to connect to and retrieve the contents.
+	 * @return The reader from reading the specified URI.
+	 */
+	public Reader getReader(URI uri) {
+		return null;
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaProperty.java
old mode 100644
new mode 100755
similarity index 71%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
copy to juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaProperty.java
index 3f60e90..d7a6a9a
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaProperty.java
@@ -1,46 +1,45 @@
-// ***************************************************************************************************************************
-// * 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.httppart;
-
-/**
- * Represents possible enum values that can be passed to the {@link HttpPartSerializerSession#serialize(HttpPartType, HttpPartSchema, Object)}.
- */
-public enum HttpPartType {
-
-	/** An HTTP request body */
-	BODY,
-
-	/** A URI path variable */
-	PATH,
-
-	/** A URI query parameter */
-	QUERY,
-
-	/** A form-data parameter */
-	FORMDATA,
-
-	/** An HTTP request header */
-	HEADER,
-
-	/** An HTTP response header */
-	RESPONSE_HEADER,
-
-	/** An HTTP response body */
-	RESPONSE_BODY,
-
-	/** An HTTP response status code */
-	RESPONSE_STATUS,
-
-	/** A non-standard field */
-	OTHER;
-}
+// ***************************************************************************************************************************
+// * 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.dto.jsonschema;
+
+/**
+ * @deprecated Use JsonSchemaProperty.
+ */
+@Deprecated
+public class SchemaProperty extends Schema {
+
+	/**
+	 * Default constructor.
+	 */
+	public SchemaProperty() {}
+
+	/**
+	 * Convenience constructor.
+	 *
+	 * @param name The name of this property.
+	 */
+	public SchemaProperty(String name) {
+		setName(name);
+	}
+
+	/**
+	 * Convenience constructor.
+	 *
+	 * @param name The name of this property.
+	 * @param type The JSON type of this property.
+	 */
+	public SchemaProperty(String name, JsonType type) {
+		setName(name);
+		setType(type);
+	}
+}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaPropertySimpleArray.java
old mode 100644
new mode 100755
similarity index 72%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
copy to juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaPropertySimpleArray.java
index 3f60e90..1cbc8de
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaPropertySimpleArray.java
@@ -1,46 +1,34 @@
-// ***************************************************************************************************************************
-// * 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.httppart;
-
-/**
- * Represents possible enum values that can be passed to the {@link HttpPartSerializerSession#serialize(HttpPartType, HttpPartSchema, Object)}.
- */
-public enum HttpPartType {
-
-	/** An HTTP request body */
-	BODY,
-
-	/** A URI path variable */
-	PATH,
-
-	/** A URI query parameter */
-	QUERY,
-
-	/** A form-data parameter */
-	FORMDATA,
-
-	/** An HTTP request header */
-	HEADER,
-
-	/** An HTTP response header */
-	RESPONSE_HEADER,
-
-	/** An HTTP response body */
-	RESPONSE_BODY,
-
-	/** An HTTP response status code */
-	RESPONSE_STATUS,
-
-	/** A non-standard field */
-	OTHER;
-}
+// ***************************************************************************************************************************
+// * 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.dto.jsonschema;
+
+/**
+ * @deprecated Use JsonSchemaPropertySimpleArray.
+ */
+@Deprecated
+public class SchemaPropertySimpleArray extends SchemaProperty {
+
+	/**
+	 * Constructor.
+	 *
+	 * @param name The name of the schema property.
+	 * @param elementType The JSON type of the elements in the array.
+	 */
+	public SchemaPropertySimpleArray(String name, JsonType elementType) {
+		setName(name);
+		setType(JsonType.ARRAY);
+		setItems(
+			new Schema().setType(elementType)
+		);
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaRef.java
old mode 100644
new mode 100755
similarity index 72%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
copy to juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaRef.java
index 3f60e90..aff0730
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/SchemaRef.java
@@ -1,46 +1,40 @@
-// ***************************************************************************************************************************
-// * 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.httppart;
-
-/**
- * Represents possible enum values that can be passed to the {@link HttpPartSerializerSession#serialize(HttpPartType, HttpPartSchema, Object)}.
- */
-public enum HttpPartType {
-
-	/** An HTTP request body */
-	BODY,
-
-	/** A URI path variable */
-	PATH,
-
-	/** A URI query parameter */
-	QUERY,
-
-	/** A form-data parameter */
-	FORMDATA,
-
-	/** An HTTP request header */
-	HEADER,
-
-	/** An HTTP response header */
-	RESPONSE_HEADER,
-
-	/** An HTTP response body */
-	RESPONSE_BODY,
-
-	/** An HTTP response status code */
-	RESPONSE_STATUS,
-
-	/** A non-standard field */
-	OTHER;
-}
+// ***************************************************************************************************************************
+// * 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.dto.jsonschema;
+
+import java.net.*;
+
+import org.apache.juneau.*;
+
+/**
+ * @deprecated Use JsonSchemaRef.
+ */
+@Deprecated
+public class SchemaRef extends Schema {
+
+	/**
+	 * Constructor.
+	 *
+	 * <p>
+	 * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}.
+	 * Strings must be valid URIs.
+	 *
+	 * <p>
+	 * URIs defined by {@link UriResolver} can be used for values.
+	 *
+	 * @param uri The URI of the target reference.  Can be <jk>null</jk>.
+	 */
+	public SchemaRef(Object uri) {
+		this.setRef(uri);
+	}
+}
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java
index 336f0af..f2023f2 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java
@@ -1573,4 +1573,13 @@ public class SchemaInfo extends SwaggerElement {
 
 		return this;
 	}
+	
+	/**
+	 * @deprecated Use {@link #setAdditionalProperties(SchemaInfo)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public SchemaInfo setAdditionalProperties(Map<String,Object> value) {
+		return this;
+	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java
index 4ee8b4f..084cecf 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java
@@ -1429,4 +1429,13 @@ public class Swagger extends SwaggerElement {
 			throw new BeanRuntimeException(e, c, "Reference ''{0}'' could not be converted to type ''{1}''.", ref, c.getName());
 		}
 	}
+
+	/**
+	 * @deprecated Use {@link #definition(String, ObjectMap)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public Swagger definition(String name, SchemaInfo schema) {
+		return this;
+	}
 }
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java
index 19ee0eb..4479737 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java
@@ -178,4 +178,15 @@ public abstract class SwaggerElement {
 	public String toString() {
 		return JsonSerializer.DEFAULT.toString(this);
 	}
+	
+	/**
+	 * @deprecated Use {@link #get(String)}
+	 */
+	@Deprecated
+	@SuppressWarnings("javadoc")
+	public Map<String,Object> getExtraProperties() {
+		if (extra == null)
+			extra = new LinkedHashMap<>();
+		return extra;
+	}
 }
diff --git a/juneau-core/juneau-marshall-rdf/pom.xml b/juneau-core/juneau-marshall-rdf/pom.xml
index 6d15453..b9cea4f 100644
--- a/juneau-core/juneau-marshall-rdf/pom.xml
+++ b/juneau-core/juneau-marshall-rdf/pom.xml
@@ -103,6 +103,58 @@
 					</execution>
 				</executions>
 			</plugin>
+			<plugin>
+				<groupId>com.github.siom79.japicmp</groupId>
+				<artifactId>japicmp-maven-plugin</artifactId>
+				<version>0.13.0</version>
+				<configuration>
+					<skip>true</skip>
+					<oldVersion>
+						<dependency>
+							<groupId>org.apache.juneau</groupId>
+							<artifactId>${project.artifactId}</artifactId>
+							<version>${juneau.compare.version}</version>
+							<type>jar</type>
+						</dependency>
+					</oldVersion>
+					<newVersion>
+						<file>
+							<path>${project.build.directory}/${project.artifactId}-${project.version}.jar</path>
+						</file>
+					</newVersion>
+					<parameter>
+						<onlyModified>true</onlyModified>
+						<accessModifier>public</accessModifier>
+						<excludes>
+						</excludes>
+						<ignoreMissingClasses>true</ignoreMissingClasses>
+						<onlyBinaryIncompatible>true</onlyBinaryIncompatible>
+						<breakBuildOnBinaryIncompatibleModifications>true</breakBuildOnBinaryIncompatibleModifications>
+						<breakBuildIfCausedByExclusion>false</breakBuildIfCausedByExclusion>
+						<breakBuildBasedOnSemanticVersioning>true</breakBuildBasedOnSemanticVersioning>
+						<overrideCompatibilityChangeParameters>
+							<overrideCompatibilityChangeParameter>
+								<binaryCompatible>true</binaryCompatible>
+								<compatibilityChange>SUPERCLASS_REMOVED</compatibilityChange>
+								<sourceCompatible>true</sourceCompatible>
+							</overrideCompatibilityChangeParameter>
+							<overrideCompatibilityChangeParameter>
+								<binaryCompatible>true</binaryCompatible>
+								<compatibilityChange>FIELD_REMOVED_IN_SUPERCLASS</compatibilityChange>
+								<sourceCompatible>true</sourceCompatible>
+							</overrideCompatibilityChangeParameter>
+						</overrideCompatibilityChangeParameters>
+					</parameter>
+				</configuration>
+				<executions>
+					<execution>
+						<phase>verify</phase>
+						<goals>
+							<goal>cmp</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/juneau-core/juneau-marshall/pom.xml b/juneau-core/juneau-marshall/pom.xml
index bb66599..5a6d0b6 100644
--- a/juneau-core/juneau-marshall/pom.xml
+++ b/juneau-core/juneau-marshall/pom.xml
@@ -86,6 +86,65 @@
 					</execution>
 				</executions>
 			</plugin>
+			<plugin>
+				<groupId>com.github.siom79.japicmp</groupId>
+				<artifactId>japicmp-maven-plugin</artifactId>
+				<version>0.13.0</version>
+				<configuration>
+					<oldVersion>
+						<dependency>
+							<groupId>org.apache.juneau</groupId>
+							<artifactId>${project.artifactId}</artifactId>
+							<version>${juneau.compare.version}</version>
+							<type>jar</type>
+						</dependency>
+					</oldVersion>
+					<newVersion>
+						<file>
+							<path>${project.build.directory}/${project.artifactId}-${project.version}.jar</path>
+						</file>
+					</newVersion>
+					<parameter>
+						<onlyModified>true</onlyModified>
+						<accessModifier>public</accessModifier>
+						<excludes>
+							<exclude>org.apache.juneau.internal</exclude>
+							<exclude>org.apache.juneau.yaml.proto</exclude>
+							<exclude>org.apache.juneau.xml.XmlSchemaDocSerializer</exclude>
+							<exclude>org.apache.juneau.xml.XmlSchemaDocSerializerSession</exclude>
+							<exclude>org.apache.juneau.xml.XmlSchemaSerializer</exclude>
+							<exclude>org.apache.juneau.xml.XmlSchemaSerializerBuilder</exclude>
+							<exclude>org.apache.juneau.xml.XmlParseException</exclude>
+							<exclude>org.apache.juneau.xml.XmlSchemaSerializerSession</exclude>
+						</excludes>
+						<ignoreMissingClasses>true</ignoreMissingClasses>
+						<onlyBinaryIncompatible>true</onlyBinaryIncompatible>
+						<breakBuildOnBinaryIncompatibleModifications>true</breakBuildOnBinaryIncompatibleModifications>
+						<breakBuildIfCausedByExclusion>false</breakBuildIfCausedByExclusion>
+						<breakBuildBasedOnSemanticVersioning>true</breakBuildBasedOnSemanticVersioning>
+						<overrideCompatibilityChangeParameters>
+							<overrideCompatibilityChangeParameter>
+								<binaryCompatible>true</binaryCompatible>
+								<compatibilityChange>SUPERCLASS_REMOVED</compatibilityChange>
+								<sourceCompatible>true</sourceCompatible>
+							</overrideCompatibilityChangeParameter>
+							<overrideCompatibilityChangeParameter>
+								<binaryCompatible>true</binaryCompatible>
+								<compatibilityChange>FIELD_REMOVED_IN_SUPERCLASS</compatibilityChange>
+								<sourceCompatible>true</sourceCompatible>
+							</overrideCompatibilityChangeParameter>
+						</overrideCompatibilityChangeParameters>
+					</parameter>
+				</configuration>
+				<executions>
+					<execution>
+						<phase>verify</phase>
+						<goals>
+							<goal>cmp</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
 	</build>
 </project>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
index 87e97ea..e28aa63 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
@@ -2685,7 +2685,8 @@ public class BeanContext extends Context {
 	 * @param c The class.
 	 * @return The properties to include for the specified class, or <jk>null</jk> if it's not defined for the class.
 	 */
-	protected String[] getIncludeProperties(Class<?> c) {
+	// TODO - make protected in 8.0.
+	public String[] getIncludeProperties(Class<?> c) {
 		if (includeProperties.isEmpty())
 			return null;
 		String[] s = null;
@@ -2706,8 +2707,9 @@ public class BeanContext extends Context {
 	 *
 	 * @param c The class.
 	 * @return The properties to exclude for the specified class, or <jk>null</jk> if it's not defined for the class.
+	 * TODO - make protected in 8.0.
 	 */
-	protected String[] getExcludeProperties(Class<?> c) {
+	public String[] getExcludeProperties(Class<?> c) {
 		if (excludeProperties.isEmpty())
 			return null;
 		String[] s = null;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index c43248e..edf7415 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -193,7 +193,7 @@ public final class BeanPropertyMeta {
 			}
 
 			if (getter != null) {
-				BeanProperty p = getAnnotation(BeanProperty.class, getter);
+				BeanProperty p = ClassUtils.getAnnotation(BeanProperty.class, getter);
 				if (rawTypeMeta == null)
 					rawTypeMeta = f.resolveClassMeta(p, getter.getGenericReturnType(), typeVarImpls);
 				isUri |= (rawTypeMeta.isUri() || getter.isAnnotationPresent(org.apache.juneau.annotation.URI.class));
@@ -209,7 +209,7 @@ public final class BeanPropertyMeta {
 			}
 
 			if (setter != null) {
-				BeanProperty p = getAnnotation(BeanProperty.class, setter);
+				BeanProperty p = ClassUtils.getAnnotation(BeanProperty.class, setter);
 				if (rawTypeMeta == null)
 					rawTypeMeta = f.resolveClassMeta(p, setter.getGenericParameterTypes()[0], typeVarImpls);
 				isUri |= (rawTypeMeta.isUri() || setter.isAnnotationPresent(org.apache.juneau.annotation.URI.class));
@@ -1063,15 +1063,15 @@ public final class BeanPropertyMeta {
 			appendAnnotations(a, field.getType(), l);
 		}
 		if (getter != null) {
-			addIfNotNull(l, getAnnotation(a, getter));
+			addIfNotNull(l, ClassUtils.getAnnotation(a, getter));
 			appendAnnotations(a, getter.getReturnType(), l);
 		}
 		if (setter != null) {
-			addIfNotNull(l, getAnnotation(a, setter));
+			addIfNotNull(l, ClassUtils.getAnnotation(a, setter));
 			appendAnnotations(a, setter.getReturnType(), l);
 		}
 		if (extraKeys != null) {
-			addIfNotNull(l, getAnnotation(a, extraKeys));
+			addIfNotNull(l, ClassUtils.getAnnotation(a, extraKeys));
 			appendAnnotations(a, extraKeys.getReturnType(), l);
 		}
 
@@ -1094,11 +1094,11 @@ public final class BeanPropertyMeta {
 		if (field != null)
 			t = field.getAnnotation(a);
 		if (t == null && getter != null)
-			t = getAnnotation(a, getter);
+			t = ClassUtils.getAnnotation(a, getter);
 		if (t == null && setter != null)
-			t = getAnnotation(a, setter);
+			t = ClassUtils.getAnnotation(a, setter);
 		if (t == null && extraKeys != null)
-			t = getAnnotation(a, extraKeys);
+			t = ClassUtils.getAnnotation(a, extraKeys);
 		if (t == null)
 			t = ClassUtils.getAnnotation(a, typeMeta.getInnerClass());
 		return t;
@@ -1140,7 +1140,7 @@ public final class BeanPropertyMeta {
 		} catch (ParseException e) {
 			throw e;
 		} catch (Exception e) {
-			throw new ParseException(e);
+			throw new ParseException((Throwable)e);
 		}
 	}
 
@@ -1191,4 +1191,13 @@ public final class BeanPropertyMeta {
 	public boolean canWrite() {
 		return canWrite;
 	}
+
+	/**
+	 * @deprecated Use {@link #findAnnotation(Class)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public <A extends Annotation> A getAnnotation(Class<A> a) {
+		return findAnnotation(a);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRuntimeException.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRuntimeException.java
index 7a426ce..7b4f7a7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRuntimeException.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRuntimeException.java
@@ -79,4 +79,14 @@ public final class BeanRuntimeException extends FormattedRuntimeException {
 			return (c == null ? "" : c.getName() + ": ") + cause.getMessage();
 		return null;
 	}
+
+	/**
+	 * @deprecated
+	 */
+	@Override /* Throwable */
+	@Deprecated
+	public synchronized BeanRuntimeException initCause(Throwable cause) {
+		super.initCause(cause);
+		return this;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
index 2600458..3633884 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
@@ -281,7 +281,8 @@ public class BeanSession extends Session {
 	 * @throws InvalidDataConversionException If the specified value cannot be converted to the specified type.
 	 * @return The converted value.
 	 */
-	protected final <T> T convertToMemberType(Object outer, Object value, ClassMeta<T> to) throws InvalidDataConversionException {
+	// TODO - Make protected in 8.0.
+	public final <T> T convertToMemberType(Object outer, Object value, ClassMeta<T> to) throws InvalidDataConversionException {
 		if (to == null)
 			to = (ClassMeta<T>)object();
 
@@ -730,7 +731,8 @@ public class BeanSession extends Session {
 	 * @param list The contents to populate the array with.
 	 * @return A new object or primitive array.
 	 */
-	protected final Object toArray(ClassMeta<?> type, Collection<?> list) {
+	// TODO - Make protected in 8.0.
+	public final Object toArray(ClassMeta<?> type, Collection<?> list) {
 		if (list == null)
 			return null;
 		ClassMeta<?> componentType = type.isArgs() ? object() : type.getElementType();
@@ -1009,7 +1011,8 @@ public class BeanSession extends Session {
 	 * @param classes The array of classes to get class metas for.
 	 * @return The args {@link ClassMeta} object corresponding to the classes.  Never <jk>null</jk>.
 	 */
-	protected final ClassMeta<Object[]> getArgsClassMeta(Type[] classes) {
+	// TODO - Make protected in 8.0.
+	public final ClassMeta<Object[]> getArgsClassMeta(Type[] classes) {
 		assertFieldNotNull(classes, "classes");
 		ClassMeta[] cm = new ClassMeta<?>[classes.length];
 		for (int i = 0; i < classes.length; i++)
@@ -1048,7 +1051,8 @@ public class BeanSession extends Session {
 	 *
 	 * @return The bean registry defined in this bean context.  Never <jk>null</jk>.
 	 */
-	protected final BeanRegistry getBeanRegistry() {
+	// TODO - Make protected in 8.0.
+	public final BeanRegistry getBeanRegistry() {
 		return ctx.getBeanRegistry();
 	}
 
@@ -1126,7 +1130,8 @@ public class BeanSession extends Session {
 	 *
 	 * @return A new or previously returned string builder.
 	 */
-	protected final StringBuilder getStringBuilder() {
+	// TODO - Make protected in 8.0.
+	public final StringBuilder getStringBuilder() {
 		if (sbStack.isEmpty())
 			return new StringBuilder();
 		return sbStack.pop();
@@ -1137,7 +1142,8 @@ public class BeanSession extends Session {
 	 *
 	 * @param sb The string builder to return to the pool.  No-op if <jk>null</jk>.
 	 */
-	protected final void returnStringBuilder(StringBuilder sb) {
+	// TODO - Make protected in 8.0.
+	public final void returnStringBuilder(StringBuilder sb) {
 		if (sb == null)
 			return;
 		sb.setLength(0);
@@ -1276,7 +1282,8 @@ public class BeanSession extends Session {
 	 * 	<jk>true</jk> if trying to set a value on a non-existent bean property is silently ignored.
 	 * 	<br>Otherwise, a {@code RuntimeException} is thrown.
 	 */
-	protected final boolean isIgnoreUnknownBeanProperties() {
+	// TODO - Make protected in 8.0.
+	public final boolean isIgnoreUnknownBeanProperties() {
 		return ctx.isIgnoreUnknownBeanProperties();
 	}
 
@@ -1458,7 +1465,8 @@ public class BeanSession extends Session {
 	 * @return
 	 * 	<jk>true</jk> if debug mode is enabled.
 	 */
-	protected final boolean isDebug() {
+	// TODO - Make protected in 8.0.
+	public final boolean isDebug() {
 		return debug;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java
index 7f0fa89..e010826 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSessionArgs.java
@@ -127,4 +127,16 @@ public class BeanSessionArgs extends SessionArgs {
 		super.properties(properties);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link #BeanSessionArgs(ObjectMap, Locale, TimeZone, MediaType, HttpPartSchema, Boolean)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public BeanSessionArgs(ObjectMap properties, Locale locale, TimeZone timeZone, MediaType mediaType) {
+		super(properties);
+		this.locale = locale;
+		this.timeZone = timeZone;
+		this.mediaType = mediaType;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index 6e4fda4..72b3606 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -611,7 +611,7 @@ public final class ClassMeta<T> implements Type {
 									return fSwapConstructor.newInstance(f);
 								return super.unswap(session, f, hint);
 							} catch (Exception e) {
-								throw new ParseException(e);
+								throw new ParseException((Throwable)e);
 							}
 						}
 					}
@@ -2230,4 +2230,22 @@ public final class ClassMeta<T> implements Type {
 	public <A extends Annotation> A getAnnotation(Class<A> a) {
 		return this.innerClass.getAnnotation(a);
 	}
+
+	/**
+	 * @deprecated No replacement.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public Map<String,Method> getRemoteableMethods() {
+		return null;
+	}
+	
+	/**
+	 * @deprecated No replacement.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public boolean isRemoteable() {
+		return false;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java
index 73fa0fe..7734f61 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java
@@ -103,7 +103,7 @@ public class ContextCache {
 		CacheEntry ce = m.get(hashCode);
 
 		if (ce != null && USE_DEEP_MATCHING && ! ce.ps.equals(ps))
-			throw new ContextRuntimeException("Property store hashcode mismatch!");
+			throw new ContextRuntimeException("Property store hashcode mismatch!", new Object[0]);
 
 		logCache(c, ce != null);
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextRuntimeException.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextRuntimeException.java
index a98eefd..db4890d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextRuntimeException.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextRuntimeException.java
@@ -50,4 +50,23 @@ public final class ContextRuntimeException extends FormattedRuntimeException {
 	public ContextRuntimeException(Throwable cause) {
 		this(cause, null);
 	}
+
+	/**
+	 * @deprecated Use {@link #ContextRuntimeException(String, Object...)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ContextRuntimeException(String message) {
+		super(message);
+	}
+
+	/**
+	 * @deprecated {@link #ContextRuntimeException(Throwable)}
+	 */
+	@Deprecated
+	@Override /* Throwable */
+	public synchronized ContextRuntimeException initCause(Throwable cause) {
+		super.initCause(cause);
+		return this;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ObjectMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ObjectMap.java
index a9ac595..33a0baa 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ObjectMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ObjectMap.java
@@ -586,7 +586,7 @@ public class ObjectMap extends LinkedHashMap<String,Object> {
 		} catch (ParseException e) {
 			throw e;
 		} catch (Exception e) {
-			throw new ParseException(e);
+			throw new ParseException((Throwable)e);
 		}
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Visibility.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Visibility.java
index 7e16085..6568151 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Visibility.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Visibility.java
@@ -12,10 +12,10 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
-import static org.apache.juneau.internal.ClassUtils.*;
-
 import java.lang.reflect.*;
 
+import org.apache.juneau.internal.*;
+
 /**
  * Defines class/field/method visibilities.
  *
@@ -117,7 +117,7 @@ public enum Visibility {
 		if (x == null)
 			return null;
 		if (isVisible(x))
-			if (! setAccessible(x, true))
+			if (! ClassUtils.setAccessible(x, true))
 				return null;
 		return x;
 	}
@@ -137,7 +137,7 @@ public enum Visibility {
 		if (x == null)
 			return null;
 		if (isVisible(x))
-			if (! setAccessible(x, true))
+			if (! ClassUtils.setAccessible(x, true))
 				return null;
 		return x;
 	}
@@ -157,9 +157,35 @@ public enum Visibility {
 		if (x == null)
 			return null;
 		if (isVisible(x))
-			if (! setAccessible(x, true))
+			if (! ClassUtils.setAccessible(x, true))
 				return null;
 		return x;
 	}
 
+	/**
+	 * @deprecated Use {@link ClassUtils#setAccessible(Constructor, boolean)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public static boolean setAccessible(Constructor<?> x) {
+		return ClassUtils.setAccessible(x, true);
+	}
+
+	/**
+	 * @deprecated Use {@link ClassUtils#setAccessible(Method, boolean)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public static boolean setAccessible(Method x) {
+		return ClassUtils.setAccessible(x, true);
+	}
+
+	/**
+	 * @deprecated Use {@link ClassUtils#setAccessible(Field, boolean)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public static boolean setAccessible(Field x) {
+		return ClassUtils.setAccessible(x, true);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
index 174047e..2a31248 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
@@ -611,4 +611,32 @@ public class CsvSerializerBuilder extends WriterSerializerBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public CsvSerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public CsvSerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@Override
+	@Deprecated
+	public CsvSerializerBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
index 8e989e8..6135e65 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
@@ -42,7 +42,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void head(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void head(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 
 		String[] head = session.getHead();
 		for (int i = 0; i < head.length; i++)
@@ -68,7 +70,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void style(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void style(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 
 		int i = 0;
 		for (String s : session.getStylesheet())
@@ -89,7 +93,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void script(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void script(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		int i = 0;
 		for (String s : session.getScript())
 			w.sIf(i++ > 0).append(3, s).append('\n'); // Must always append a newline even if whitespace disabled!
@@ -103,7 +109,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void body(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void body(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 
 		if (hasHeader(session)) {
 			w.sTag(2, "header").nl(2);
@@ -146,7 +154,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void header(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void header(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		// Write the title of the page.
 		String[] header = session.getHeader();
 		for (int i = 0; i < header.length; i++)
@@ -161,7 +171,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void nav(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void nav(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		String[] links = session.getNavLinks();
 		if (links.length > 0 && ! ArrayUtils.contains("NONE", links)) {
 			w.sTag(3, "ol").nl(3);
@@ -198,7 +210,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void aside(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void aside(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		String[] aside = session.getAside();
 		for (int i = 0; i < aside.length; i++)
 			w.sIf(i > 0).appendln(4, aside[i]);
@@ -212,7 +226,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void article(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void article(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		// To allow for page formatting using CSS, we encapsulate the data inside two div tags:
 		// <div class='outerdata'><div class='data' id='data'>...</div></div>
 		w.oTag(4, "div").attr("class","outerdata").append('>').nl(4);
@@ -242,7 +258,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void footer(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void footer(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		String[] footer = session.getFooter();
 		for (int i = 0; i < footer.length; i++)
 			w.sIf(i > 0).appendln(3, footer[i]);
@@ -254,7 +272,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasStyle(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasStyle(HtmlDocSerializerSession session) {
 		return true;
 	}
 
@@ -264,7 +284,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasScript(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasScript(HtmlDocSerializerSession session) {
 		return true;
 	}
 
@@ -275,7 +297,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasHeader(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasHeader(HtmlDocSerializerSession session) {
 		return session.getHeader().length > 0;
 	}
 
@@ -286,7 +310,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasNav(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasNav(HtmlDocSerializerSession session) {
 		return session.getNav().length > 0 || session.getNavLinks().length > 0;
 	}
 
@@ -297,7 +323,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasAside(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasAside(HtmlDocSerializerSession session) {
 		return session.getAside().length > 0;
 	}
 
@@ -308,7 +336,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasFooter(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasFooter(HtmlDocSerializerSession session) {
 		return session.getFooter().length > 0;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
index db682b6..35370f0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.html;
 
 import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 
 /**
@@ -528,7 +529,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 	 * @param ps The property store containing all the settings for this object.
 	 */
 	public HtmlDocSerializer(PropertyStore ps) {
-		this(ps, "text/html", null);
+		this(ps, "text/html", (String)null);
 	}
 
 	/**
@@ -740,4 +741,14 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 				.append("noResultsMessage", noResultsMessage)
 			);
 	}
+
+	/**
+	 * @deprecated Use {@link #HtmlDocSerializer(PropertyStore, String, String)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public HtmlDocSerializer(PropertyStore ps, String produces, String...accept) {
+		this(ps, produces, StringUtils.join(accept, ","));
+	}
+
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
index 9598e43..be65768 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerSession.java
@@ -121,7 +121,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	The CSS instructions to add to the HTML page.
 	 */
-	protected final Set<String> getStyle() {
+	// TODO - Make protected in 8.0.
+	public final Set<String> getStyle() {
 		return style;
 	}
 
@@ -132,7 +133,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	The link to the stylesheet of the HTML page.
 	 */
-	protected final Set<String> getStylesheet() {
+	// TODO - Make protected in 8.0.
+	public final Set<String> getStylesheet() {
 		return stylesheet;
 	}
 
@@ -143,7 +145,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	Arbitrary Javascript to add to the HTML page.
 	 */
-	protected final Set<String> getScript() {
+	// TODO - Make protected in 8.0.
+	public final Set<String> getScript() {
 		return script;
 	}
 
@@ -154,7 +157,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	Navigation links to add to the HTML page.
 	 */
-	protected final String[] getNavlinks() {
+	// TODO - Make protected in 8.0.
+	public final String[] getNavlinks() {
 		return navlinks;
 	}
 
@@ -165,7 +169,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	HTML content to add to the head section of the HTML page.
 	 */
-	protected final String[] getHead() {
+	// TODO - Make protected in 8.0.
+	public final String[] getHead() {
 		return head;
 	}
 
@@ -176,7 +181,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	The overridden contents of the header section on the HTML page.
 	 */
-	protected final String[] getHeader() {
+	// TODO - Make protected in 8.0.
+	public final String[] getHeader() {
 		return header;
 	}
 
@@ -187,7 +193,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	The overridden contents of the nav section on the HTML page.
 	 */
-	protected final String[] getNav() {
+	// TODO - Make protected in 8.0.
+	public final String[] getNav() {
 		return nav;
 	}
 
@@ -198,7 +205,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	The overridden contents of the aside section on the HTML page.
 	 */
-	protected final String[] getAside() {
+	// TODO - Make protected in 8.0.
+	public final String[] getAside() {
 		return aside;
 	}
 
@@ -209,7 +217,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	The overridden contents of the footer section on the HTML page.
 	 */
-	protected final String[] getFooter() {
+	// TODO - Make protected in 8.0.
+	public final String[] getFooter() {
 		return footer;
 	}
 
@@ -220,7 +229,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	The message used when serializing an empty array or empty list.
 	 */
-	protected final String getNoResultsMessage() {
+	// TODO - Make protected in 8.0.
+	public final String getNoResultsMessage() {
 		return ctx.getNoResultsMessage();
 	}
 
@@ -231,7 +241,8 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	<jk>true</jk> if <js>"* {white-space:nowrap}"</js> shoudl be added to the CSS instructions on the page to prevent word wrapping.
 	 */
-	protected final boolean isNowrap() {
+	// TODO - Make protected in 8.0.
+	public final boolean isNowrap() {
 		return ctx.isNowrap();
 	}
 
@@ -242,7 +253,17 @@ public class HtmlDocSerializerSession extends HtmlStrippedDocSerializerSession {
 	 * @return
 	 * 	The template to use for serializing the page.
 	 */
-	protected final HtmlDocTemplate getTemplate() {
+	// TODO - Make protected in 8.0.
+	public final HtmlDocTemplate getTemplate() {
 		return ctx.getTemplate();
 	}
+
+	/**
+	 * @deprecated No replacement.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public final boolean isNoWrap() {
+		return false;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocTemplate.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocTemplate.java
index 7cdbefa..372313b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocTemplate.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocTemplate.java
@@ -64,4 +64,109 @@ public interface HtmlDocTemplate {
 	 * @throws Exception Any exception can be thrown.
 	 */
 	public void writeTo(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception;
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public void head(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception;
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public void style(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception;
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public void script(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception;
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public void body(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception;
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public void header(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception;
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public void nav(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception;
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public void article(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception;
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public void aside(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception;
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public void footer(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception;
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public boolean hasStyle(HtmlDocSerializerSession session);
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public boolean hasScript(HtmlDocSerializerSession session);
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public boolean hasHeader(HtmlDocSerializerSession session);
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public boolean hasNav(HtmlDocSerializerSession session);
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public boolean hasAside(HtmlDocSerializerSession session);
+
+	/**
+	 * @deprecated Use {@link #writeTo(HtmlDocSerializerSession, HtmlWriter, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public boolean hasFooter(HtmlDocSerializerSession session);
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
old mode 100644
new mode 100755
similarity index 82%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
index 8e989e8..548bac9
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/BasicHtmlDocTemplate.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocTemplateBasic.java
@@ -15,13 +15,10 @@ package org.apache.juneau.html;
 import org.apache.juneau.internal.*;
 
 /**
- * A basic template for the HTML doc serializer.
- *
- * <p>
- * This class can be subclassed to customize page rendering.
+ * @deprecated Use {@link BasicHtmlDocTemplate}
  */
-public class BasicHtmlDocTemplate implements HtmlDocTemplate {
-
+@Deprecated
+public class HtmlDocTemplateBasic implements HtmlDocTemplate {
 	@Override /* HtmlDocTemplate */
 	public void writeTo(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		w.sTag("html").nl(0);
@@ -42,7 +39,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void head(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void head(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 
 		String[] head = session.getHead();
 		for (int i = 0; i < head.length; i++)
@@ -68,7 +67,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void style(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void style(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 
 		int i = 0;
 		for (String s : session.getStylesheet())
@@ -89,7 +90,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void script(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void script(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		int i = 0;
 		for (String s : session.getScript())
 			w.sIf(i++ > 0).append(3, s).append('\n'); // Must always append a newline even if whitespace disabled!
@@ -103,7 +106,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void body(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void body(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 
 		if (hasHeader(session)) {
 			w.sTag(2, "header").nl(2);
@@ -146,7 +151,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void header(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void header(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		// Write the title of the page.
 		String[] header = session.getHeader();
 		for (int i = 0; i < header.length; i++)
@@ -161,7 +168,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void nav(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void nav(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		String[] links = session.getNavLinks();
 		if (links.length > 0 && ! ArrayUtils.contains("NONE", links)) {
 			w.sTag(3, "ol").nl(3);
@@ -198,7 +207,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void aside(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void aside(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		String[] aside = session.getAside();
 		for (int i = 0; i < aside.length; i++)
 			w.sIf(i > 0).appendln(4, aside[i]);
@@ -212,7 +223,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void article(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void article(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		// To allow for page formatting using CSS, we encapsulate the data inside two div tags:
 		// <div class='outerdata'><div class='data' id='data'>...</div></div>
 		w.oTag(4, "div").attr("class","outerdata").append('>').nl(4);
@@ -242,7 +255,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param o The object being serialized.
 	 * @throws Exception Any exception can be thrown.
 	 */
-	protected void footer(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
+	// TODO - Make protected in 8.0.
+	@Override
+	public void footer(HtmlDocSerializerSession session, HtmlWriter w, Object o) throws Exception {
 		String[] footer = session.getFooter();
 		for (int i = 0; i < footer.length; i++)
 			w.sIf(i > 0).appendln(3, footer[i]);
@@ -254,7 +269,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasStyle(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasStyle(HtmlDocSerializerSession session) {
 		return true;
 	}
 
@@ -264,7 +281,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasScript(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasScript(HtmlDocSerializerSession session) {
 		return true;
 	}
 
@@ -275,7 +294,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasHeader(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasHeader(HtmlDocSerializerSession session) {
 		return session.getHeader().length > 0;
 	}
 
@@ -286,7 +307,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasNav(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasNav(HtmlDocSerializerSession session) {
 		return session.getNav().length > 0 || session.getNavLinks().length > 0;
 	}
 
@@ -297,7 +320,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasAside(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasAside(HtmlDocSerializerSession session) {
 		return session.getAside().length > 0;
 	}
 
@@ -308,7 +333,9 @@ public class BasicHtmlDocTemplate implements HtmlDocTemplate {
 	 * @param session The current serializer session.
 	 * @return A boolean flag.
 	 */
-	protected boolean hasFooter(HtmlDocSerializerSession session) {
+	// TODO - Make protected in 8.0.
+	@Override
+	public boolean hasFooter(HtmlDocSerializerSession session) {
 		return session.getFooter().length > 0;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
index d8b7879..c7d6b19 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaDocSerializer.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.html;
 
 import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.jsonschema.*;
 import org.apache.juneau.serializer.*;
 
@@ -98,4 +99,13 @@ public final class HtmlSchemaDocSerializer extends HtmlDocSerializer {
 	JsonSchemaGenerator getGenerator() {
 		return generator;
 	}
+
+	/**
+	 * @deprecated Use {@link #HtmlSchemaDocSerializer(PropertyStore, String, String...)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public HtmlSchemaDocSerializer(PropertyStore ps, String produces, String...accept) {
+		this(ps, produces, StringUtils.join(accept, ','));
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
index 0738f90..1fb285f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializer.java
@@ -16,6 +16,7 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.html.annotation.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.xml.*;
 
@@ -644,7 +645,7 @@ public class HtmlSerializer extends XmlSerializer {
 	 * 	The property store containing all the settings for this object.
 	 */
 	public HtmlSerializer(PropertyStore ps) {
-		this(ps, "text/html", null);
+		this(ps, "text/html", (String)null);
 	}
 
 	/**
@@ -802,4 +803,19 @@ public class HtmlSerializer extends XmlSerializer {
 				.append("addBeanTypes", addBeanTypes)
 			);
 	}
+
+	/**
+	 * @deprecated Use {@link HtmlSerializer#HtmlSerializer(PropertyStore, String, String...)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public HtmlSerializer(PropertyStore ps, String produces, String...accept) {
+		this(ps, produces, StringUtils.join(accept, ','));
+	}
+	
+	/**
+	 * @deprecated {@link #HTML_addBeanTypes}.
+	 */
+	@Deprecated
+	public static final String HTML_addBeanTypeProperties = HTML_addBeanTypes;
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
index cb1b1b5..e18186e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
@@ -792,4 +792,32 @@ public class HtmlSerializerBuilder extends XmlSerializerBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public HtmlSerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public HtmlSerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@Override
+	@Deprecated
+	public HtmlSerializerBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 2f96943..8c2fcb6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -851,7 +851,8 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 	 * @return
 	 * 	<jk>true</jk> if <code><b>key</b></code> and <code><b>value</b></code> column headers are added to tables.
 	 */
-	protected final boolean isAddKeyValueTableHeaders() {
+	// TODO - Make protected in 8.0.
+	public final boolean isAddKeyValueTableHeaders() {
 		return ctx.isAddKeyValueTableHeaders();
 	}
 
@@ -890,4 +891,13 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 	protected final AnchorText getUriAnchorText() {
 		return ctx.getUriAnchorText();
 	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public final boolean isAddBeanTypeProperties() {
+		return false;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
index 41ea324..54b6c0d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializer.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.html;
 
 import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 
 /**
@@ -76,4 +77,13 @@ public class HtmlStrippedDocSerializer extends HtmlSerializer {
 	public WriterSerializerSession createSession(SerializerSessionArgs args) {
 		return new HtmlStrippedDocSerializerSession(this, args);
 	}
+
+	/**
+	 * @deprecated Use {@link #HtmlStrippedDocSerializer(PropertyStore, String, String)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public HtmlStrippedDocSerializer(PropertyStore ps, String produces, String...accept) {
+		this(ps, produces, StringUtils.join(accept, ','));
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWriter.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWriter.java
index 29e6eff..826256d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWriter.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlWriter.java
@@ -343,4 +343,14 @@ public class HtmlWriter extends XmlWriter {
 		super.append(c);
 		return this;
 	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public HtmlWriter attrUri(String name, Object value) throws IOException {
+		super.attrUri((String)null, name, value);
+		return this;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/Html.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/Html.java
index be52db0..afd1743 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/Html.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/Html.java
@@ -57,6 +57,18 @@ public @interface Html {
 	HtmlFormat format() default HtmlFormat.HTML;
 
 	/**
+	 * @deprecated - Use format=HtmlFormat.PLAINTEXT.
+	 */
+	@Deprecated
+	boolean asPlainText() default false;
+
+	/**
+	 * @deprecated - Use format=HtmlFormat.XML.
+	 */
+	@Deprecated
+	boolean asXml() default false;
+
+	/**
 	 * Adds a hyperlink to a bean property when rendered as HTML.
 	 *
 	 * <p>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
index 58d2a6f..4e9ac8a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
@@ -50,4 +50,10 @@ public @interface HtmlLink {
 	 * The bean property whose value becomes the url in the hyperlink.
 	 */
 	String uriProperty() default "uri";
+
+	/**
+	 * @deprecated - Use {@link #uriProperty()}.
+	 */
+	@Deprecated
+	String hrefProperty() default "uri";
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethodName.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethodName.java
index 3209764..709b635 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethodName.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HttpMethodName.java
@@ -51,4 +51,10 @@ public final class HttpMethodName {
 
 	/** A non-standard value. */
 	public static final String OTHER = "OTHER";
+	
+	/**
+	 * @deprecated Use {@link #RRPC}
+	 */
+	@Deprecated
+	public static final String PROXY = "RRPC";
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartParser.java
index b3ecd97..896eb7d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartParser.java
@@ -120,4 +120,11 @@ public interface HttpPartParser {
 	 * @throws SchemaValidationException If the input fails schema validation.
 	 */
 	public <T> T parse(HttpPartSchema schema, String in, Type toType, Type...toTypeArgs) throws ParseException, SchemaValidationException;
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public <T> T parse(HttpPartType partType, String in, ClassMeta<T> type) throws ParseException;
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
index 0e6a3b7..ac54950 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
@@ -434,7 +434,7 @@ public class HttpPartSchema {
 			errors.add("Cannot define an array of objects unless array format is 'uon'.");
 
 		if (! errors.isEmpty())
-			throw new ContextRuntimeException("Schema specification errors: \n\t" + join(errors, "\n\t"));
+			throw new ContextRuntimeException("Schema specification errors: \n\t" + join(errors, "\n\t"), new Object[0]);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSerializer.java
index 537bab4..9ab3356 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSerializer.java
@@ -97,4 +97,11 @@ public interface HttpPartSerializer {
 	 * @throws SchemaValidationException If the output fails schema validation.
 	 */
 	public String serialize(HttpPartSchema schema, Object value) throws SchemaValidationException, SerializeException ;
+
+	/**
+	 * @deprecated Use {@link #serialize(HttpPartType, HttpPartSchema, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public String serialize(HttpPartType type, Object value);
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
index 3f60e90..d59aa37 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
@@ -42,5 +42,11 @@ public enum HttpPartType {
 	RESPONSE_STATUS,
 
 	/** A non-standard field */
-	OTHER;
+	OTHER,
+
+	/**
+	 * @deprecated Use {@link #FORMDATA}.
+	 */
+	@Deprecated
+	FORM_DATA;
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParser.java
index 14b6b4d..afb32f8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParser.java
@@ -14,6 +14,7 @@ package org.apache.juneau.httppart;
 
 import java.lang.reflect.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
 
 /**
@@ -67,4 +68,13 @@ public class SimplePartParser extends BaseHttpPartParser {
 	public <T> T parse(HttpPartType partType, HttpPartSchema schema, String in, Type toType, Type...toTypeArgs) throws ParseException, SchemaValidationException {
 		return createPartSession().parse(partType, schema, in, toType, toTypeArgs);
 	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public <T> T parse(HttpPartType partType, String in, ClassMeta<T> type) throws ParseException {
+		return null;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializer.java
index 7852015..2c449b1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializer.java
@@ -43,4 +43,17 @@ public class SimplePartSerializer extends BaseHttpPartSerializer {
 	public String serialize(HttpPartType partType, HttpPartSchema schema, Object value) throws SchemaValidationException, SerializeException {
 		return createPartSession().serialize(partType, schema, value);
 	}
+
+	/**
+	 * @deprecated Use {@link #serialize(HttpPartType, HttpPartSchema, Object)}
+	 */
+	@Override
+	@Deprecated
+	public String serialize(HttpPartType type, Object value) {
+		try {
+			return serialize(type, null, value);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimpleUonPartSerializer.java
similarity index 61%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializer.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimpleUonPartSerializer.java
index 7852015..f4f7435 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimpleUonPartSerializer.java
@@ -12,35 +12,57 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.httppart;
 
-import org.apache.juneau.internal.*;
-import org.apache.juneau.serializer.*;
+import org.apache.juneau.*;
+import org.apache.juneau.oapi.*;
+import org.apache.juneau.uon.*;
 
 /**
- * An implementation of {@link HttpPartSerializer} that simply serializes everything using {@link Object#toString()}.
- *
- * <p>
- * More precisely, uses the {@link ClassUtils#toString(Object)} method to stringify objects.
+ * @deprecated Use {@link OpenApiSerializer}
  */
-public class SimplePartSerializer extends BaseHttpPartSerializer {
+@Deprecated
+public class SimpleUonPartSerializer extends UonPartSerializer {
 
 	//-------------------------------------------------------------------------------------------------------------------
 	// Predefined instances
 	//-------------------------------------------------------------------------------------------------------------------
 
-	/** Reusable instance of {@link SimplePartSerializer}, all default settings. */
-	public static final SimplePartSerializer DEFAULT = new SimplePartSerializer();
+	/** Reusable instance of {@link SimpleUonPartSerializer}, all default settings. */
+	public static final SimpleUonPartSerializer DEFAULT = new SimpleUonPartSerializer(PropertyStore.DEFAULT);
+
 
 	//-------------------------------------------------------------------------------------------------------------------
 	// Instance
 	//-------------------------------------------------------------------------------------------------------------------
 
-	@Override
-	public SimplePartSerializerSession createPartSession(SerializerSessionArgs args) {
-		return new SimplePartSerializerSession();
+	/**
+	 * Constructor.
+	 *
+	 * @param ps
+	 * 	The property store containing all the settings for this object.
+	 */
+	public SimpleUonPartSerializer(PropertyStore ps) {
+		super(
+			ps.builder()
+				.set(UON_paramFormat, ParamFormat.PLAINTEXT)
+				.build()
+		);
+	}
+
+	@Override /* Context */
+	public SimpleUonPartSerializerBuilder builder() {
+		return new SimpleUonPartSerializerBuilder(getPropertyStore());
 	}
 
-	@Override /* HttpPartSerializer */
-	public String serialize(HttpPartType partType, HttpPartSchema schema, Object value) throws SchemaValidationException, SerializeException {
-		return createPartSession().serialize(partType, schema, value);
+	/**
+	 * Instantiates a new clean-slate {@link SimpleUonPartSerializerBuilder} object.
+	 *
+	 * <p>
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * the settings of the object called on.
+	 *
+	 * @return A new {@link UonPartSerializerBuilder} object.
+	 */
+	public static SimpleUonPartSerializerBuilder create() {
+		return new SimpleUonPartSerializerBuilder();
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimpleUonPartSerializerBuilder.java
similarity index 58%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimpleUonPartSerializerBuilder.java
index b6afd8f..8eb4d44 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimpleUonPartSerializerBuilder.java
@@ -10,26 +10,26 @@
 // * "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.soap;
-
-import static org.apache.juneau.soap.SoapXmlSerializer.*;
+package org.apache.juneau.httppart;
 
 import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.http.*;
+import org.apache.juneau.oapi.*;
 import org.apache.juneau.serializer.*;
-import org.apache.juneau.xml.*;
+import org.apache.juneau.uon.*;
 
 /**
- * Builder class for building instances of soap/xml serializers.
+ * @deprecated Use {@link OpenApiSerializerBuilder}
  */
-public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
+@Deprecated
+public class SimpleUonPartSerializerBuilder extends UonPartSerializerBuilder {
 
 	/**
 	 * Constructor, default settings.
 	 */
-	public SoapXmlSerializerBuilder() {
+	public SimpleUonPartSerializerBuilder() {
 		super();
 	}
 
@@ -38,596 +38,585 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 	 *
 	 * @param ps The initial configuration settings for this builder.
 	 */
-	public SoapXmlSerializerBuilder(PropertyStore ps) {
+	public SimpleUonPartSerializerBuilder(PropertyStore ps) {
 		super(ps);
 	}
 
 	@Override /* ContextBuilder */
-	public SoapXmlSerializer build() {
-		return build(SoapXmlSerializer.class);
+	public SimpleUonPartSerializer build() {
+		return build(SimpleUonPartSerializer.class);
 	}
 
 
-	//-----------------------------------------------------------------------------------------------------------------
+	//--------------------------------------------------------------------------------
 	// Properties
-	//-----------------------------------------------------------------------------------------------------------------
+	//--------------------------------------------------------------------------------
 
-	/**
-	 * Configuration property:  The <code>SOAPAction</code> HTTP header value to set on responses.
-	 *
-	 * <h5 class='section'>See Also:</h5>
-	 * <ul>
-	 * 	<li class='jf'>{@link SoapXmlSerializer#SOAPXML_SOAPAction}
-	 * </ul>
-	 *
-	 * @param value
-	 * 	The new value for this property.
-	 * 	<br>The default is <js>"http://www.w3.org/2003/05/soap-envelope"</js>.
-	 * @return This object (for method chaining).
-	 */
-	public SoapXmlSerializerBuilder soapAction(String value) {
-		return set(SOAPXML_SOAPAction, value);
+	@Override /* UonPartSerializerBuilder */
+	public SimpleUonPartSerializerBuilder paramFormat(ParamFormat value) {
+		super.paramFormat(value);
+		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder addBeanTypes(boolean value) {
-		super.addBeanTypes(value);
+	@Override /* UonPartSerializerBuilder */
+	public SimpleUonPartSerializerBuilder paramFormatPlain() {
+		super.paramFormatPlain();
+		return this;
+	}
+
+	@Override /* UonSerializerBuilder */
+	public SimpleUonPartSerializerBuilder encoding(boolean value) {
+		super.encoding(value);
+		return this;
+	}
+
+	@Override /* UonSerializerBuilder */
+	public SimpleUonPartSerializerBuilder encoding() {
+		super.encoding();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder addBeanTypes() {
-		super.addBeanTypes();
+	public SimpleUonPartSerializerBuilder abridged(boolean value) {
+		super.abridged(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder addRootType(boolean value) {
-		super.addRootType(value);
+	public SimpleUonPartSerializerBuilder abridged() {
+		super.abridged();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder addRootType() {
-		super.addRootType();
+	public SimpleUonPartSerializerBuilder addBeanTypeProperties(boolean value) {
+		super.addBeanTypeProperties(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder detectRecursions(boolean value) {
+	public SimpleUonPartSerializerBuilder detectRecursions(boolean value) {
 		super.detectRecursions(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder detectRecursions() {
+	public SimpleUonPartSerializerBuilder detectRecursions() {
 		super.detectRecursions();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder ignoreRecursions(boolean value) {
+	public SimpleUonPartSerializerBuilder ignoreRecursions(boolean value) {
 		super.ignoreRecursions(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder ignoreRecursions() {
+	public SimpleUonPartSerializerBuilder ignoreRecursions() {
 		super.ignoreRecursions();
 		return this;
 	}
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder initialDepth(int value) {
+	public SimpleUonPartSerializerBuilder initialDepth(int value) {
 		super.initialDepth(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder listener(Class<? extends SerializerListener> value) {
+	public SimpleUonPartSerializerBuilder listener(Class<? extends SerializerListener> value) {
 		super.listener(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder maxDepth(int value) {
+	public SimpleUonPartSerializerBuilder maxDepth(int value) {
 		super.maxDepth(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder maxIndent(int value) {
+	public SimpleUonPartSerializerBuilder maxIndent(int value) {
 		super.maxIndent(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder quoteChar(char value) {
+	public SimpleUonPartSerializerBuilder quoteChar(char value) {
 		super.quoteChar(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder sortCollections(boolean value) {
+	public SimpleUonPartSerializerBuilder sortCollections(boolean value) {
 		super.sortCollections(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder sortCollections() {
+	public SimpleUonPartSerializerBuilder sortCollections() {
 		super.sortCollections();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder sortMaps(boolean value) {
+	public SimpleUonPartSerializerBuilder sortMaps(boolean value) {
 		super.sortMaps(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder sortMaps() {
+	public SimpleUonPartSerializerBuilder sortMaps() {
 		super.sortMaps();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder sq() {
+	public SimpleUonPartSerializerBuilder sq() {
 		super.sq();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder trimEmptyCollections(boolean value) {
+	public SimpleUonPartSerializerBuilder trimEmptyCollections(boolean value) {
 		super.trimEmptyCollections(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder trimEmptyCollections() {
+	public SimpleUonPartSerializerBuilder trimEmptyCollections() {
 		super.trimEmptyCollections();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder trimEmptyMaps(boolean value) {
+	public SimpleUonPartSerializerBuilder trimEmptyMaps(boolean value) {
 		super.trimEmptyMaps(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder trimEmptyMaps() {
+	public SimpleUonPartSerializerBuilder trimEmptyMaps() {
 		super.trimEmptyMaps();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder trimNullProperties(boolean value) {
+	public SimpleUonPartSerializerBuilder trimNullProperties(boolean value) {
 		super.trimNullProperties(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder trimStrings(boolean value) {
+	public SimpleUonPartSerializerBuilder trimStrings(boolean value) {
 		super.trimStrings(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder trimStrings() {
+	public SimpleUonPartSerializerBuilder trimStrings() {
 		super.trimStrings();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder uriContext(UriContext value) {
+	public SimpleUonPartSerializerBuilder uriContext(UriContext value) {
 		super.uriContext(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder uriRelativity(UriRelativity value) {
+	public SimpleUonPartSerializerBuilder uriRelativity(UriRelativity value) {
 		super.uriRelativity(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder uriResolution(UriResolution value) {
+	public SimpleUonPartSerializerBuilder uriResolution(UriResolution value) {
 		super.uriResolution(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder useWhitespace(boolean value) {
+	public SimpleUonPartSerializerBuilder useWhitespace(boolean value) {
 		super.useWhitespace(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder useWhitespace() {
+	public SimpleUonPartSerializerBuilder useWhitespace() {
 		super.useWhitespace();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public SoapXmlSerializerBuilder ws() {
+	public SimpleUonPartSerializerBuilder ws() {
 		super.ws();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanClassVisibility(Visibility value) {
-		super.beanClassVisibility(value);
-		return this;
-	}
-
-	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanConstructorVisibility(Visibility value) {
-		super.beanConstructorVisibility(value);
+	public SimpleUonPartSerializerBuilder beansRequireDefaultConstructor(boolean value) {
+		super.beansRequireDefaultConstructor(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanDictionary(boolean append, Object...values) {
-		super.beanDictionary(append, values);
+	public SimpleUonPartSerializerBuilder beansRequireDefaultConstructor() {
+		super.beansRequireDefaultConstructor();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanDictionary(Class<?>...values) {
-		super.beanDictionary(values);
+	public SimpleUonPartSerializerBuilder beansRequireSerializable(boolean value) {
+		super.beansRequireSerializable(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanDictionary(Object...values) {
-		super.beanDictionary(values);
+	public SimpleUonPartSerializerBuilder beansRequireSerializable() {
+		super.beansRequireSerializable();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanDictionaryRemove(Object...values) {
-		super.beanDictionaryRemove(values);
+	public SimpleUonPartSerializerBuilder beansRequireSettersForGetters(boolean value) {
+		super.beansRequireSettersForGetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanFieldVisibility(Visibility value) {
-		super.beanFieldVisibility(value);
+	public SimpleUonPartSerializerBuilder beansRequireSettersForGetters() {
+		super.beansRequireSettersForGetters();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanFilters(boolean append, Object...values) {
-		super.beanFilters(append, values);
+	public SimpleUonPartSerializerBuilder beansRequireSomeProperties(boolean value) {
+		super.beansRequireSomeProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanFilters(Class<?>...values) {
-		super.beanFilters(values);
+	public SimpleUonPartSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
+		super.beanMapPutReturnsOldValue(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanFilters(Object...values) {
-		super.beanFilters(values);
+	public SimpleUonPartSerializerBuilder beanMapPutReturnsOldValue() {
+		super.beanMapPutReturnsOldValue();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanFiltersRemove(Object...values) {
-		super.beanFiltersRemove(values);
+	public SimpleUonPartSerializerBuilder beanConstructorVisibility(Visibility value) {
+		super.beanConstructorVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
-		super.beanMapPutReturnsOldValue(value);
+	public SimpleUonPartSerializerBuilder beanClassVisibility(Visibility value) {
+		super.beanClassVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanMapPutReturnsOldValue() {
-		super.beanMapPutReturnsOldValue();
+	public SimpleUonPartSerializerBuilder beanFieldVisibility(Visibility value) {
+		super.beanFieldVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanMethodVisibility(Visibility value) {
+	public SimpleUonPartSerializerBuilder beanMethodVisibility(Visibility value) {
 		super.beanMethodVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beansRequireDefaultConstructor(boolean value) {
-		super.beansRequireDefaultConstructor(value);
-		return this;
-	}
-
-	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beansRequireDefaultConstructor() {
-		super.beansRequireDefaultConstructor();
+	public SimpleUonPartSerializerBuilder useJavaBeanIntrospector(boolean value) {
+		super.useJavaBeanIntrospector(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beansRequireSerializable(boolean value) {
-		super.beansRequireSerializable(value);
+	public SimpleUonPartSerializerBuilder useJavaBeanIntrospector() {
+		super.useJavaBeanIntrospector();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beansRequireSerializable() {
-		super.beansRequireSerializable();
+	public SimpleUonPartSerializerBuilder useInterfaceProxies(boolean value) {
+		super.useInterfaceProxies(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beansRequireSettersForGetters(boolean value) {
-		super.beansRequireSettersForGetters(value);
+	public SimpleUonPartSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
+		super.ignoreUnknownBeanProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beansRequireSettersForGetters() {
-		super.beansRequireSettersForGetters();
+	public SimpleUonPartSerializerBuilder ignoreUnknownBeanProperties() {
+		super.ignoreUnknownBeanProperties();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beansRequireSomeProperties(boolean value) {
-		super.beansRequireSomeProperties(value);
+	public SimpleUonPartSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
+		super.ignoreUnknownNullBeanProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder beanTypePropertyName(String value) {
-		super.beanTypePropertyName(value);
+	public SimpleUonPartSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
+		super.ignorePropertiesWithoutSetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder debug() {
-		super.debug();
+	public SimpleUonPartSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
+		super.ignoreInvocationExceptionsOnGetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public <T> SoapXmlSerializerBuilder example(Class<T> c, T o) {
-		super.example(c, o);
+	public SimpleUonPartSerializerBuilder ignoreInvocationExceptionsOnGetters() {
+		super.ignoreInvocationExceptionsOnGetters();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
-		super.ignoreInvocationExceptionsOnGetters(value);
+	public SimpleUonPartSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
+		super.ignoreInvocationExceptionsOnSetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder ignoreInvocationExceptionsOnGetters() {
-		super.ignoreInvocationExceptionsOnGetters();
+	public SimpleUonPartSerializerBuilder ignoreInvocationExceptionsOnSetters() {
+		super.ignoreInvocationExceptionsOnSetters();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
-		super.ignoreInvocationExceptionsOnSetters(value);
+	public SimpleUonPartSerializerBuilder sortProperties(boolean value) {
+		super.sortProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder ignoreInvocationExceptionsOnSetters() {
-		super.ignoreInvocationExceptionsOnSetters();
+	public SimpleUonPartSerializerBuilder sortProperties() {
+		super.sortProperties();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
-		super.ignorePropertiesWithoutSetters(value);
+	public SimpleUonPartSerializerBuilder notBeanPackages(Object...values) {
+		super.notBeanPackages(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
-		super.ignoreUnknownBeanProperties(value);
+	public SimpleUonPartSerializerBuilder notBeanPackages(String...values) {
+		super.notBeanPackages(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder ignoreUnknownBeanProperties() {
-		super.ignoreUnknownBeanProperties();
+	public SimpleUonPartSerializerBuilder notBeanPackages(boolean append, Object...values) {
+		super.notBeanPackages(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
-		super.ignoreUnknownNullBeanProperties(value);
+	public SimpleUonPartSerializerBuilder notBeanPackagesRemove(Object...values) {
+		super.notBeanPackagesRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public <T> SoapXmlSerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
-		super.implClass(interfaceClass, implClass);
+	public SimpleUonPartSerializerBuilder notBeanClasses(Object...values) {
+		super.notBeanClasses(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder implClasses(Map<String,Class<?>> values) {
-		super.implClasses(values);
+	public SimpleUonPartSerializerBuilder notBeanClasses(Class<?>...values) {
+		super.notBeanClasses(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder locale(Locale value) {
-		super.locale(value);
+	public SimpleUonPartSerializerBuilder notBeanClasses(boolean append, Object...values) {
+		super.notBeanClasses(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder mediaType(MediaType value) {
-		super.mediaType(value);
+	public SimpleUonPartSerializerBuilder notBeanClassesRemove(Object...values) {
+		super.notBeanClassesRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder notBeanClasses(boolean append, Object...values) {
-		super.notBeanClasses(append, values);
+	public SimpleUonPartSerializerBuilder beanFilters(Object...values) {
+		super.beanFilters(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder notBeanClasses(Class<?>...values) {
-		super.notBeanClasses(values);
+	public SimpleUonPartSerializerBuilder beanFilters(Class<?>...values) {
+		super.beanFilters(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder notBeanClasses(Object...values) {
-		super.notBeanClasses(values);
+	public SimpleUonPartSerializerBuilder beanFilters(boolean append, Object...values) {
+		super.beanFilters(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder notBeanClassesRemove(Object...values) {
-		super.notBeanClassesRemove(values);
+	public SimpleUonPartSerializerBuilder beanFiltersRemove(Object...values) {
+		super.beanFiltersRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder notBeanPackages(boolean append, Object...values) {
-		super.notBeanPackages(append, values);
+	public SimpleUonPartSerializerBuilder pojoSwaps(Object...values) {
+		super.pojoSwaps(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder notBeanPackages(Object...values) {
-		super.notBeanPackages(values);
+	public SimpleUonPartSerializerBuilder pojoSwaps(Class<?>...values) {
+		super.pojoSwaps(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder notBeanPackages(String...values) {
-		super.notBeanPackages(values);
+	public SimpleUonPartSerializerBuilder pojoSwaps(boolean append, Object...values) {
+		super.pojoSwaps(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder notBeanPackagesRemove(Object...values) {
-		super.notBeanPackagesRemove(values);
+	public SimpleUonPartSerializerBuilder pojoSwapsRemove(Object...values) {
+		super.pojoSwapsRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder pojoSwaps(boolean append, Object...values) {
-		super.pojoSwaps(append, values);
+	public SimpleUonPartSerializerBuilder implClasses(Map<String,Class<?>> values) {
+		super.implClasses(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder pojoSwaps(Class<?>...values) {
-		super.pojoSwaps(values);
+	public <T> SimpleUonPartSerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
+		super.implClass(interfaceClass, implClass);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder pojoSwaps(Object...values) {
-		super.pojoSwaps(values);
+	public SimpleUonPartSerializerBuilder beanDictionary(Object...values) {
+		super.beanDictionary(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder pojoSwapsRemove(Object...values) {
-		super.pojoSwapsRemove(values);
+	public SimpleUonPartSerializerBuilder beanDictionary(Class<?>...values) {
+		super.beanDictionary(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder sortProperties(boolean value) {
-		super.sortProperties(value);
+	public SimpleUonPartSerializerBuilder beanDictionary(boolean append, Object...values) {
+		super.beanDictionary(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder sortProperties() {
-		super.sortProperties();
+	public SimpleUonPartSerializerBuilder beanDictionaryRemove(Object...values) {
+		super.beanDictionaryRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder timeZone(TimeZone value) {
-		super.timeZone(value);
+	public SimpleUonPartSerializerBuilder beanTypePropertyName(String value) {
+		super.beanTypePropertyName(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder useEnumNames() {
-		super.useEnumNames();
+	public SimpleUonPartSerializerBuilder locale(Locale value) {
+		super.locale(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder useInterfaceProxies(boolean value) {
-		super.useInterfaceProxies(value);
+	public SimpleUonPartSerializerBuilder timeZone(TimeZone value) {
+		super.timeZone(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder useJavaBeanIntrospector(boolean value) {
-		super.useJavaBeanIntrospector(value);
+	public SimpleUonPartSerializerBuilder mediaType(MediaType value) {
+		super.mediaType(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public SoapXmlSerializerBuilder useJavaBeanIntrospector() {
-		super.useJavaBeanIntrospector();
+	public SimpleUonPartSerializerBuilder debug() {
+		super.debug();
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public SoapXmlSerializerBuilder set(String name, Object value) {
+	public SimpleUonPartSerializerBuilder set(String name, Object value) {
 		super.set(name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public SoapXmlSerializerBuilder set(boolean append, String name, Object value) {
+	public SimpleUonPartSerializerBuilder set(boolean append, String name, Object value) {
 		super.set(append, name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public SoapXmlSerializerBuilder set(Map<String,Object> properties) {
+	public SimpleUonPartSerializerBuilder set(Map<String,Object> properties) {
 		super.set(properties);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public SoapXmlSerializerBuilder add(Map<String,Object> properties) {
+	public SimpleUonPartSerializerBuilder add(Map<String,Object> properties) {
 		super.add(properties);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public SoapXmlSerializerBuilder addTo(String name, Object value) {
+	public SimpleUonPartSerializerBuilder addTo(String name, Object value) {
 		super.addTo(name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public SoapXmlSerializerBuilder addTo(String name, String key, Object value) {
+	public SimpleUonPartSerializerBuilder addTo(String name, String key, Object value) {
 		super.addTo(name, key, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public SoapXmlSerializerBuilder removeFrom(String name, Object value) {
+	public SimpleUonPartSerializerBuilder removeFrom(String name, Object value) {
 		super.removeFrom(name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public SoapXmlSerializerBuilder apply(PropertyStore copyFrom) {
+	public SimpleUonPartSerializerBuilder apply(PropertyStore copyFrom) {
 		super.apply(copyFrom);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartParser.java
similarity index 50%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartParser.java
index 2e053dc..837eff2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartParser.java
@@ -1,88 +1,99 @@
-// ***************************************************************************************************************************
-// * 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.json;
-
-import org.apache.juneau.*;
-
-/**
- * Serializes POJO models to Simplified JSON.
- *
- * <h5 class='topic'>Media types</h5>
- *
- * Handles <code>Accept</code> types:  <code><b>application/json, text/json</b></code>
- * <p>
- * Produces <code>Content-Type</code> types:  <code><b>application/json+simple</b></code>
- *
- * <h5 class='topic'>Description</h5>
- * <p>
- * 	This is a JSON serializer that uses simplified notation:
- * <ul class='spaced-list'>
- * 	<li>Lax quoting of JSON attribute names.
- * 	<li>Single quotes.
- * </ul>
- *
- * <h5 class='section'>See Also:</h5>
- * <ul class='doctree'>
- * 	<li class='link'>{@doc juneau-marshall.JsonDetails.SimplifiedJson}
- * </ul>
- */
-public class SimpleJsonSerializer extends JsonSerializer {
-
-	//-------------------------------------------------------------------------------------------------------------------
-	// Predefined instances
-	//-------------------------------------------------------------------------------------------------------------------
-
-	/** Default serializer, single quotes, {@link #JSON_simpleMode simple mode}. */
-	public static final JsonSerializer DEFAULT = new SimpleJsonSerializer(PropertyStore.DEFAULT);
-
-	/** Default serializer, single quotes, simple mode, with whitespace. */
-	public static final JsonSerializer DEFAULT_READABLE = new Readable(PropertyStore.DEFAULT);
-
-	//-------------------------------------------------------------------------------------------------------------------
-	// Predefined subclasses
-	//-------------------------------------------------------------------------------------------------------------------
-
-	/** Default serializer, single quotes, simple mode, with whitespace. */
-	public static class Readable extends JsonSerializer {
-
-		/**
-		 * Constructor.
-		 *
-		 * @param ps The property store containing all the settings for this object.
-		 */
-		public Readable(PropertyStore ps) {
-			super(
-				ps.builder()
-					.set(JSON_simpleMode, true)
-					.set(WSERIALIZER_quoteChar, '\'')
-					.set(SERIALIZER_useWhitespace, true)
-					.build()
-			);
-		}
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param ps The property store containing all the settings for this object.
-	 */
-	public SimpleJsonSerializer(PropertyStore ps) {
-		super(
-			ps.builder()
-				.set(JSON_simpleMode, true)
-				.set(WSERIALIZER_quoteChar, '\'')
-				.build(),
-			"application/json", "application/json+simple,text/json+simple,application/json;q=0.9,text/json;q=0.9"
-		);
-	}
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * 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.httppart;
+
+import static org.apache.juneau.internal.StringUtils.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.parser.*;
+import org.apache.juneau.uon.*;
+
+/**
+ * @deprecated Use {@link UonParser}
+ */
+@Deprecated
+@SuppressWarnings({ "unchecked" })
+public class UonPartParser extends UonParser {
+
+	//-------------------------------------------------------------------------------------------------------------------
+	// Predefined instances
+	//-------------------------------------------------------------------------------------------------------------------
+
+	/** Reusable instance of {@link UonPartParser}. */
+	public static final UonPartParser DEFAULT = new UonPartParser(PropertyStore.DEFAULT);
+
+
+	//-------------------------------------------------------------------------------------------------------------------
+	// Instance
+	//-------------------------------------------------------------------------------------------------------------------
+
+	/**
+	 * Constructor.
+	 *
+	 * @param ps The property store containing all the settings for this object.
+	 */
+	public UonPartParser(PropertyStore ps) {
+		super(
+			ps.builder()
+				.build(),
+			"application/x-www-form-urlencoded"
+		);
+	}
+
+	@Override /* Context */
+	public UonPartParserBuilder builder() {
+		return new UonPartParserBuilder(getPropertyStore());
+	}
+
+	/**
+	 * Instantiates a new clean-slate {@link UonPartParserBuilder} object.
+	 *
+	 * <p>
+	 * This is equivalent to simply calling <code><jk>new</jk> UonPartParserBuilder()</code>.
+	 *
+	 * <p>
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * the settings of the object called on.
+	 *
+	 * @return A new {@link UonPartParserBuilder} object.
+	 */
+	public static UonPartParserBuilder create() {
+		return new UonPartParserBuilder();
+	}
+
+	@Override
+	public <T> T parse(HttpPartType partType, String in, ClassMeta<T> type) throws ParseException {
+		if (in == null)
+			return null;
+		if (type.isString() && in.length() > 0) {
+			// Shortcut - If we're returning a string and the value doesn't start with "'" or is "null", then
+			// just return the string since it's a plain value.
+			// This allows us to bypass the creation of a UonParserSession object.
+			char x = firstNonWhitespaceChar(in);
+			if (x != '\'' && x != 'n' && in.indexOf('~') == -1)
+				return (T)in;
+			if (x == 'n' && "null".equals(in))
+				return null;
+		}
+		UonParserSession session = createParameterSession();
+		try (ParserPipe pipe = session.createPipe(in)) {
+			try (UonReader r = session.getUonReader(pipe, false)) {
+				return session.parseAnything(type, r, null, true, null);
+			}
+		} catch (ParseException e) {
+			throw e;
+		} catch (Exception e) {
+			throw new ParseException(e);
+		}
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartParserBuilder.java
similarity index 60%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartParserBuilder.java
index b1d6a26..131f8c4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartParserBuilder.java
@@ -10,23 +10,27 @@
 // * "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.msgpack;
+package org.apache.juneau.httppart;
+
+import static org.apache.juneau.uon.UonParser.*;
 
 import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.parser.*;
+import org.apache.juneau.uon.*;
 
 /**
- * Builder class for building instances of MessagePack parsers.
+ * @deprecated Use {@link UonParserBuilder}
  */
-public class MsgPackParserBuilder extends InputStreamParserBuilder {
+@Deprecated
+public class UonPartParserBuilder extends UonParserBuilder {
 
 	/**
 	 * Constructor, default settings.
 	 */
-	public MsgPackParserBuilder() {
+	public UonPartParserBuilder() {
 		super();
 	}
 
@@ -35,460 +39,429 @@ public class MsgPackParserBuilder extends InputStreamParserBuilder {
 	 *
 	 * @param ps The initial configuration settings for this builder.
 	 */
-	public MsgPackParserBuilder(PropertyStore ps) {
+	public UonPartParserBuilder(PropertyStore ps) {
 		super(ps);
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackParser build() {
-		return build(MsgPackParser.class);
+	public UonPartParser build() {
+		return build(UonPartParser.class);
 	}
 
 
-	//-----------------------------------------------------------------------------------------------------------------
+	//--------------------------------------------------------------------------------
 	// Properties
-	//-----------------------------------------------------------------------------------------------------------------
-
-	@Override /* InputStreamParserBuilder */
-	public MsgPackParserBuilder binaryFormat(BinaryFormat value) {
-		super.binaryFormat(value);
-		return this;
-	}
+	//--------------------------------------------------------------------------------
 
-	@Override /* ParserBuilder */
-	public MsgPackParserBuilder autoCloseStreams(boolean value) {
-		super.autoCloseStreams(value);
-		return this;
+	@Override /* UonParserBuilder */
+	public UonPartParserBuilder decoding(boolean value) {
+		return set(UON_decoding, value);
 	}
 
 	@Override /* ParserBuilder */
-	public MsgPackParserBuilder autoCloseStreams() {
-		super.autoCloseStreams();
+	public UonPartParserBuilder fileCharset(String value) {
+		super.fileCharset(value);
 		return this;
 	}
 
 	@Override /* ParserBuilder */
-	public MsgPackParserBuilder debugOutputLines(int value) {
-		super.debugOutputLines(value);
+	public UonPartParserBuilder inputStreamCharset(String value) {
+		super.inputStreamCharset(value);
 		return this;
 	}
 
 	@Override /* ParserBuilder */
-	public MsgPackParserBuilder listener(Class<? extends ParserListener> value) {
+	public UonPartParserBuilder listener(Class<? extends ParserListener> value) {
 		super.listener(value);
 		return this;
 	}
 
 	@Override /* ParserBuilder */
-	public MsgPackParserBuilder strict(boolean value) {
+	public UonPartParserBuilder strict(boolean value) {
 		super.strict(value);
 		return this;
 	}
 
 	@Override /* ParserBuilder */
-	public MsgPackParserBuilder strict() {
+	public UonPartParserBuilder strict() {
 		super.strict();
 		return this;
 	}
 
 	@Override /* ParserBuilder */
-	public MsgPackParserBuilder trimStrings(boolean value) {
+	public UonPartParserBuilder trimStrings(boolean value) {
 		super.trimStrings(value);
 		return this;
 	}
 
 	@Override /* ParserBuilder */
-	public MsgPackParserBuilder trimStrings() {
+	public UonPartParserBuilder trimStrings() {
 		super.trimStrings();
 		return this;
 	}
 
-	@Override /* ParserBuilder */
-	public MsgPackParserBuilder unbuffered(boolean value) {
-		super.unbuffered(value);
-		return this;
-	}
-
-	@Override /* ParserBuilder */
-	public MsgPackParserBuilder unbuffered() {
-		super.unbuffered();
-		return this;
-	}
-
-	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanClassVisibility(Visibility value) {
-		super.beanClassVisibility(value);
-		return this;
-	}
-
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanConstructorVisibility(Visibility value) {
-		super.beanConstructorVisibility(value);
+	public UonPartParserBuilder beansRequireDefaultConstructor(boolean value) {
+		super.beansRequireDefaultConstructor(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanDictionary(boolean append, Object...values) {
-		super.beanDictionary(append, values);
+	public UonPartParserBuilder beansRequireDefaultConstructor() {
+		super.beansRequireDefaultConstructor();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanDictionary(Class<?>...values) {
-		super.beanDictionary(values);
+	public UonPartParserBuilder beansRequireSerializable(boolean value) {
+		super.beansRequireSerializable(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanDictionary(Object...values) {
-		super.beanDictionary(values);
+	public UonPartParserBuilder beansRequireSerializable() {
+		super.beansRequireSerializable();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanDictionaryRemove(Object...values) {
-		super.beanDictionaryRemove(values);
+	public UonPartParserBuilder beansRequireSettersForGetters(boolean value) {
+		super.beansRequireSettersForGetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanFieldVisibility(Visibility value) {
-		super.beanFieldVisibility(value);
+	public UonPartParserBuilder beansRequireSettersForGetters() {
+		super.beansRequireSettersForGetters();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanFilters(boolean append, Object...values) {
-		super.beanFilters(append, values);
+	public UonPartParserBuilder beansRequireSomeProperties(boolean value) {
+		super.beansRequireSomeProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanFilters(Class<?>...values) {
-		super.beanFilters(values);
+	public UonPartParserBuilder beanMapPutReturnsOldValue(boolean value) {
+		super.beanMapPutReturnsOldValue(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanFilters(Object...values) {
-		super.beanFilters(values);
+	public UonPartParserBuilder beanMapPutReturnsOldValue() {
+		super.beanMapPutReturnsOldValue();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanFiltersRemove(Object...values) {
-		super.beanFiltersRemove(values);
+	public UonPartParserBuilder beanConstructorVisibility(Visibility value) {
+		super.beanConstructorVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanMapPutReturnsOldValue(boolean value) {
-		super.beanMapPutReturnsOldValue(value);
+	public UonPartParserBuilder beanClassVisibility(Visibility value) {
+		super.beanClassVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanMapPutReturnsOldValue() {
-		super.beanMapPutReturnsOldValue();
+	public UonPartParserBuilder beanFieldVisibility(Visibility value) {
+		super.beanFieldVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanMethodVisibility(Visibility value) {
+	public UonPartParserBuilder beanMethodVisibility(Visibility value) {
 		super.beanMethodVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beansRequireDefaultConstructor(boolean value) {
-		super.beansRequireDefaultConstructor(value);
-		return this;
-	}
-
-	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beansRequireDefaultConstructor() {
-		super.beansRequireDefaultConstructor();
+	public UonPartParserBuilder useJavaBeanIntrospector(boolean value) {
+		super.useJavaBeanIntrospector(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beansRequireSerializable(boolean value) {
-		super.beansRequireSerializable(value);
+	public UonPartParserBuilder useJavaBeanIntrospector() {
+		super.useJavaBeanIntrospector();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beansRequireSerializable() {
-		super.beansRequireSerializable();
+	public UonPartParserBuilder useInterfaceProxies(boolean value) {
+		super.useInterfaceProxies(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beansRequireSettersForGetters(boolean value) {
-		super.beansRequireSettersForGetters(value);
+	public UonPartParserBuilder ignoreUnknownBeanProperties(boolean value) {
+		super.ignoreUnknownBeanProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beansRequireSettersForGetters() {
-		super.beansRequireSettersForGetters();
+	public UonPartParserBuilder ignoreUnknownBeanProperties() {
+		super.ignoreUnknownBeanProperties();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beansRequireSomeProperties(boolean value) {
-		super.beansRequireSomeProperties(value);
+	public UonPartParserBuilder ignoreUnknownNullBeanProperties(boolean value) {
+		super.ignoreUnknownNullBeanProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder beanTypePropertyName(String value) {
-		super.beanTypePropertyName(value);
+	public UonPartParserBuilder ignorePropertiesWithoutSetters(boolean value) {
+		super.ignorePropertiesWithoutSetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder debug() {
-		super.debug();
+	public UonPartParserBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
+		super.ignoreInvocationExceptionsOnGetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public <T> MsgPackParserBuilder example(Class<T> c, T o) {
-		super.example(c, o);
+	public UonPartParserBuilder ignoreInvocationExceptionsOnGetters() {
+		super.ignoreInvocationExceptionsOnGetters();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
-		super.ignoreInvocationExceptionsOnGetters(value);
+	public UonPartParserBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
+		super.ignoreInvocationExceptionsOnSetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder ignoreInvocationExceptionsOnGetters() {
-		super.ignoreInvocationExceptionsOnGetters();
+	public UonPartParserBuilder ignoreInvocationExceptionsOnSetters() {
+		super.ignoreInvocationExceptionsOnSetters();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
-		super.ignoreInvocationExceptionsOnSetters(value);
+	public UonPartParserBuilder sortProperties(boolean value) {
+		super.sortProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder ignoreInvocationExceptionsOnSetters() {
-		super.ignoreInvocationExceptionsOnSetters();
+	public UonPartParserBuilder sortProperties() {
+		super.sortProperties();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder ignorePropertiesWithoutSetters(boolean value) {
-		super.ignorePropertiesWithoutSetters(value);
+	public UonPartParserBuilder notBeanPackages(Object...values) {
+		super.notBeanPackages(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder ignoreUnknownBeanProperties(boolean value) {
-		super.ignoreUnknownBeanProperties(value);
+	public UonPartParserBuilder notBeanPackages(String...values) {
+		super.notBeanPackages(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder ignoreUnknownBeanProperties() {
-		super.ignoreUnknownBeanProperties();
+	public UonPartParserBuilder notBeanPackages(boolean append, Object...values) {
+		super.notBeanPackages(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder ignoreUnknownNullBeanProperties(boolean value) {
-		super.ignoreUnknownNullBeanProperties(value);
+	public UonPartParserBuilder notBeanPackagesRemove(Object...values) {
+		super.notBeanPackagesRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public <T> MsgPackParserBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
-		super.implClass(interfaceClass, implClass);
+	public UonPartParserBuilder notBeanClasses(Object...values) {
+		super.notBeanClasses(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder implClasses(Map<String,Class<?>> values) {
-		super.implClasses(values);
+	public UonPartParserBuilder notBeanClasses(Class<?>...values) {
+		super.notBeanClasses(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder locale(Locale value) {
-		super.locale(value);
+	public UonPartParserBuilder notBeanClasses(boolean append, Object...values) {
+		super.notBeanClasses(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder mediaType(MediaType value) {
-		super.mediaType(value);
+	public UonPartParserBuilder notBeanClassesRemove(Object...values) {
+		super.notBeanClassesRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder notBeanClasses(boolean append, Object...values) {
-		super.notBeanClasses(append, values);
+	public UonPartParserBuilder beanFilters(Object...values) {
+		super.beanFilters(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder notBeanClasses(Class<?>...values) {
-		super.notBeanClasses(values);
+	public UonPartParserBuilder beanFilters(Class<?>...values) {
+		super.beanFilters(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder notBeanClasses(Object...values) {
-		super.notBeanClasses(values);
+	public UonPartParserBuilder beanFilters(boolean append, Object...values) {
+		super.beanFilters(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder notBeanClassesRemove(Object...values) {
-		super.notBeanClassesRemove(values);
+	public UonPartParserBuilder beanFiltersRemove(Object...values) {
+		super.beanFiltersRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder notBeanPackages(boolean append, Object...values) {
-		super.notBeanPackages(append, values);
+	public UonPartParserBuilder pojoSwaps(Object...values) {
+		super.pojoSwaps(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder notBeanPackages(Object...values) {
-		super.notBeanPackages(values);
+	public UonPartParserBuilder pojoSwaps(Class<?>...values) {
+		super.pojoSwaps(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder notBeanPackages(String...values) {
-		super.notBeanPackages(values);
+	public UonPartParserBuilder pojoSwaps(boolean append, Object...values) {
+		super.pojoSwaps(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder notBeanPackagesRemove(Object...values) {
-		super.notBeanPackagesRemove(values);
+	public UonPartParserBuilder pojoSwapsRemove(Object...values) {
+		super.pojoSwapsRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder pojoSwaps(boolean append, Object...values) {
-		super.pojoSwaps(append, values);
+	public UonPartParserBuilder implClasses(Map<String,Class<?>> values) {
+		super.implClasses(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder pojoSwaps(Class<?>...values) {
-		super.pojoSwaps(values);
+	public <T> UonPartParserBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
+		super.implClass(interfaceClass, implClass);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder pojoSwaps(Object...values) {
-		super.pojoSwaps(values);
+	public UonPartParserBuilder beanDictionary(Object...values) {
+		super.beanDictionary(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder pojoSwapsRemove(Object...values) {
-		super.pojoSwapsRemove(values);
+	public UonPartParserBuilder beanDictionary(Class<?>...values) {
+		super.beanDictionary(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder sortProperties(boolean value) {
-		super.sortProperties(value);
+	public UonPartParserBuilder beanDictionary(boolean append, Object...values) {
+		super.beanDictionary(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder sortProperties() {
-		super.sortProperties();
+	public UonPartParserBuilder beanDictionaryRemove(Object...values) {
+		super.beanDictionaryRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder timeZone(TimeZone value) {
-		super.timeZone(value);
+	public UonPartParserBuilder beanTypePropertyName(String value) {
+		super.beanTypePropertyName(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder useEnumNames() {
-		super.useEnumNames();
+	public UonPartParserBuilder locale(Locale value) {
+		super.locale(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder useInterfaceProxies(boolean value) {
-		super.useInterfaceProxies(value);
+	public UonPartParserBuilder timeZone(TimeZone value) {
+		super.timeZone(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder useJavaBeanIntrospector(boolean value) {
-		super.useJavaBeanIntrospector(value);
+	public UonPartParserBuilder mediaType(MediaType value) {
+		super.mediaType(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackParserBuilder useJavaBeanIntrospector() {
-		super.useJavaBeanIntrospector();
+	public UonPartParserBuilder debug() {
+		super.debug();
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackParserBuilder set(String name, Object value) {
+	public UonPartParserBuilder set(String name, Object value) {
 		super.set(name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackParserBuilder set(boolean append, String name, Object value) {
+	public UonPartParserBuilder set(boolean append, String name, Object value) {
 		super.set(append, name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackParserBuilder set(Map<String,Object> properties) {
+	public UonPartParserBuilder set(Map<String,Object> properties) {
 		super.set(properties);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackParserBuilder add(Map<String,Object> properties) {
+	public UonPartParserBuilder add(Map<String,Object> properties) {
 		super.add(properties);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackParserBuilder addTo(String name, Object value) {
+	public UonPartParserBuilder addTo(String name, Object value) {
 		super.addTo(name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackParserBuilder addTo(String name, String key, Object value) {
+	public UonPartParserBuilder addTo(String name, String key, Object value) {
 		super.addTo(name, key, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackParserBuilder removeFrom(String name, Object value) {
+	public UonPartParserBuilder removeFrom(String name, Object value) {
 		super.removeFrom(name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackParserBuilder apply(PropertyStore copyFrom) {
+	public UonPartParserBuilder apply(PropertyStore copyFrom) {
 		super.apply(copyFrom);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartSerializer.java
similarity index 51%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartSerializer.java
index 2e053dc..558685d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartSerializer.java
@@ -1,88 +1,97 @@
-// ***************************************************************************************************************************
-// * 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.json;
-
-import org.apache.juneau.*;
-
-/**
- * Serializes POJO models to Simplified JSON.
- *
- * <h5 class='topic'>Media types</h5>
- *
- * Handles <code>Accept</code> types:  <code><b>application/json, text/json</b></code>
- * <p>
- * Produces <code>Content-Type</code> types:  <code><b>application/json+simple</b></code>
- *
- * <h5 class='topic'>Description</h5>
- * <p>
- * 	This is a JSON serializer that uses simplified notation:
- * <ul class='spaced-list'>
- * 	<li>Lax quoting of JSON attribute names.
- * 	<li>Single quotes.
- * </ul>
- *
- * <h5 class='section'>See Also:</h5>
- * <ul class='doctree'>
- * 	<li class='link'>{@doc juneau-marshall.JsonDetails.SimplifiedJson}
- * </ul>
- */
-public class SimpleJsonSerializer extends JsonSerializer {
-
-	//-------------------------------------------------------------------------------------------------------------------
-	// Predefined instances
-	//-------------------------------------------------------------------------------------------------------------------
-
-	/** Default serializer, single quotes, {@link #JSON_simpleMode simple mode}. */
-	public static final JsonSerializer DEFAULT = new SimpleJsonSerializer(PropertyStore.DEFAULT);
-
-	/** Default serializer, single quotes, simple mode, with whitespace. */
-	public static final JsonSerializer DEFAULT_READABLE = new Readable(PropertyStore.DEFAULT);
-
-	//-------------------------------------------------------------------------------------------------------------------
-	// Predefined subclasses
-	//-------------------------------------------------------------------------------------------------------------------
-
-	/** Default serializer, single quotes, simple mode, with whitespace. */
-	public static class Readable extends JsonSerializer {
-
-		/**
-		 * Constructor.
-		 *
-		 * @param ps The property store containing all the settings for this object.
-		 */
-		public Readable(PropertyStore ps) {
-			super(
-				ps.builder()
-					.set(JSON_simpleMode, true)
-					.set(WSERIALIZER_quoteChar, '\'')
-					.set(SERIALIZER_useWhitespace, true)
-					.build()
-			);
-		}
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param ps The property store containing all the settings for this object.
-	 */
-	public SimpleJsonSerializer(PropertyStore ps) {
-		super(
-			ps.builder()
-				.set(JSON_simpleMode, true)
-				.set(WSERIALIZER_quoteChar, '\'')
-				.build(),
-			"application/json", "application/json+simple,text/json+simple,application/json;q=0.9,text/json;q=0.9"
-		);
-	}
-}
\ No newline at end of file
+// ***************************************************************************************************************************
+// * 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.httppart;
+
+import java.io.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
+import org.apache.juneau.uon.*;
+
+/**
+ * @deprecated Use {@link UonSerializer}
+ */
+@Deprecated
+public class UonPartSerializer extends UonSerializer {
+
+	//-------------------------------------------------------------------------------------------------------------------
+	// Predefined instances
+	//-------------------------------------------------------------------------------------------------------------------
+
+	/** Reusable instance of {@link UonPartSerializer}, all default settings. */
+	public static final UonPartSerializer DEFAULT = new UonPartSerializer(PropertyStore.DEFAULT);
+
+
+	//-------------------------------------------------------------------------------------------------------------------
+	// Instance
+	//-------------------------------------------------------------------------------------------------------------------
+
+	/**
+	 * Constructor.
+	 *
+	 * @param ps
+	 * 	The property store containing all the settings for this object.
+	 */
+	public UonPartSerializer(PropertyStore ps) {
+		super(
+			ps.builder()
+				.set(UON_encoding, false)
+				.build()
+		);
+	}
+
+	@Override /* Context */
+	public UonPartSerializerBuilder builder() {
+		return new UonPartSerializerBuilder(getPropertyStore());
+	}
+
+	/**
+	 * Instantiates a new clean-slate {@link UonPartSerializerBuilder} object.
+	 *
+	 * <p>
+	 * Note that this method creates a builder initialized to all default settings, whereas {@link #builder()} copies
+	 * the settings of the object called on.
+	 *
+	 * @return A new {@link UonPartSerializerBuilder} object.
+	 */
+	public static UonPartSerializerBuilder create() {
+		return new UonPartSerializerBuilder();
+	}
+
+	//--------------------------------------------------------------------------------
+	// Entry point methods
+	//--------------------------------------------------------------------------------
+
+	@Override
+	public String serialize(HttpPartType type, Object value) {
+		try {
+			// Shortcut for simple types.
+			ClassMeta<?> cm = getClassMetaForObject(value);
+			if (cm != null) {
+				if (cm.isNumber() || cm.isBoolean())
+					return ClassUtils.toString(value);
+				if (cm.isString()) {
+					String s = ClassUtils.toString(value);
+					if (s.isEmpty() || ! UonUtils.needsQuotes(s))
+						return s;
+				}
+			}
+			StringWriter w = new StringWriter();
+			UonSerializerSession s = new UonSerializerSession(this, false, createDefaultSessionArgs());
+			s.serialize(value, w);
+			return w.toString();
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartSerializerBuilder.java
similarity index 61%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartSerializerBuilder.java
index c454e05..9e486c0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/UonPartSerializerBuilder.java
@@ -10,23 +10,25 @@
 // * "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.msgpack;
+package org.apache.juneau.httppart;
 
 import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.serializer.*;
+import org.apache.juneau.uon.*;
 
 /**
- * Builder class for building instances of MessagePack serializers.
+ * @deprecated Use {@link UonSerializerBuilder}
  */
-public class MsgPackSerializerBuilder extends OutputStreamSerializerBuilder {
+@Deprecated
+public class UonPartSerializerBuilder extends UonSerializerBuilder {
 
 	/**
 	 * Constructor, default settings.
 	 */
-	public MsgPackSerializerBuilder() {
+	public UonPartSerializerBuilder() {
 		super();
 	}
 
@@ -35,549 +37,558 @@ public class MsgPackSerializerBuilder extends OutputStreamSerializerBuilder {
 	 *
 	 * @param ps The initial configuration settings for this builder.
 	 */
-	public MsgPackSerializerBuilder(PropertyStore ps) {
+	public UonPartSerializerBuilder(PropertyStore ps) {
 		super(ps);
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackSerializer build() {
-		return build(MsgPackSerializer.class);
+	public UonPartSerializer build() {
+		return build(UonPartSerializer.class);
 	}
 
 
-	//-----------------------------------------------------------------------------------------------------------------
+	//--------------------------------------------------------------------------------
 	// Properties
-	//-----------------------------------------------------------------------------------------------------------------
+	//--------------------------------------------------------------------------------
 
-	@Override /* OutputStreamSerializerBuilder */
-	public MsgPackSerializerBuilder binaryFormat(BinaryFormat value) {
-		super.binaryFormat(value);
+	@Override
+	public UonPartSerializerBuilder abridged(boolean value) {
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder addBeanTypes(boolean value) {
-		super.addBeanTypes(value);
+	@Override
+	public UonPartSerializerBuilder abridged() {
 		return this;
 	}
 
-	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder addBeanTypes() {
-		super.addBeanTypes();
+	@Override
+	public UonPartSerializerBuilder addBeanTypeProperties(boolean value) {
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder addRootType(boolean value) {
-		super.addRootType(value);
-		return this;
-	}
-
-	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder addRootType() {
-		super.addRootType();
-		return this;
-	}
-
-	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder detectRecursions(boolean value) {
+	public UonPartSerializerBuilder detectRecursions(boolean value) {
 		super.detectRecursions(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder detectRecursions() {
+	public UonPartSerializerBuilder detectRecursions() {
 		super.detectRecursions();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder ignoreRecursions(boolean value) {
+	public UonPartSerializerBuilder ignoreRecursions(boolean value) {
 		super.ignoreRecursions(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder ignoreRecursions() {
+	public UonPartSerializerBuilder ignoreRecursions() {
 		super.ignoreRecursions();
 		return this;
 	}
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder initialDepth(int value) {
+	public UonPartSerializerBuilder initialDepth(int value) {
 		super.initialDepth(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder listener(Class<? extends SerializerListener> value) {
+	public UonPartSerializerBuilder listener(Class<? extends SerializerListener> value) {
 		super.listener(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder maxDepth(int value) {
+	public UonPartSerializerBuilder maxDepth(int value) {
 		super.maxDepth(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder sortCollections(boolean value) {
+	public UonPartSerializerBuilder maxIndent(int value) {
+		super.maxIndent(value);
+		return this;
+	}
+
+	@Override /* SerializerBuilder */
+	public UonPartSerializerBuilder quoteChar(char value) {
+		super.quoteChar(value);
+		return this;
+	}
+
+	@Override /* SerializerBuilder */
+	public UonPartSerializerBuilder sortCollections(boolean value) {
 		super.sortCollections(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder sortCollections() {
+	public UonPartSerializerBuilder sortCollections() {
 		super.sortCollections();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder sortMaps(boolean value) {
+	public UonPartSerializerBuilder sortMaps(boolean value) {
 		super.sortMaps(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder sortMaps() {
+	public UonPartSerializerBuilder sortMaps() {
 		super.sortMaps();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder trimEmptyCollections(boolean value) {
+	public UonPartSerializerBuilder sq() {
+		super.sq();
+		return this;
+	}
+
+	@Override /* SerializerBuilder */
+	public UonPartSerializerBuilder trimEmptyCollections(boolean value) {
 		super.trimEmptyCollections(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder trimEmptyCollections() {
+	public UonPartSerializerBuilder trimEmptyCollections() {
 		super.trimEmptyCollections();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder trimEmptyMaps(boolean value) {
+	public UonPartSerializerBuilder trimEmptyMaps(boolean value) {
 		super.trimEmptyMaps(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder trimEmptyMaps() {
+	public UonPartSerializerBuilder trimEmptyMaps() {
 		super.trimEmptyMaps();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder trimNullProperties(boolean value) {
+	public UonPartSerializerBuilder trimNullProperties(boolean value) {
 		super.trimNullProperties(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder trimStrings(boolean value) {
+	public UonPartSerializerBuilder trimStrings(boolean value) {
 		super.trimStrings(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder trimStrings() {
+	public UonPartSerializerBuilder trimStrings() {
 		super.trimStrings();
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder uriContext(UriContext value) {
+	public UonPartSerializerBuilder uriContext(UriContext value) {
 		super.uriContext(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder uriRelativity(UriRelativity value) {
+	public UonPartSerializerBuilder uriRelativity(UriRelativity value) {
 		super.uriRelativity(value);
 		return this;
 	}
 
 	@Override /* SerializerBuilder */
-	public MsgPackSerializerBuilder uriResolution(UriResolution value) {
+	public UonPartSerializerBuilder uriResolution(UriResolution value) {
 		super.uriResolution(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanClassVisibility(Visibility value) {
-		super.beanClassVisibility(value);
-		return this;
-	}
-
-	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanConstructorVisibility(Visibility value) {
-		super.beanConstructorVisibility(value);
+	@Override /* SerializerBuilder */
+	public UonPartSerializerBuilder useWhitespace(boolean value) {
+		super.useWhitespace(value);
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanDictionary(boolean append, Object...values) {
-		super.beanDictionary(append, values);
+	@Override /* SerializerBuilder */
+	public UonPartSerializerBuilder useWhitespace() {
+		super.useWhitespace();
 		return this;
 	}
 
-	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanDictionary(Class<?>...values) {
-		super.beanDictionary(values);
+	@Override /* SerializerBuilder */
+	public UonPartSerializerBuilder ws() {
+		super.ws();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanDictionary(Object...values) {
-		super.beanDictionary(values);
+	public UonPartSerializerBuilder beansRequireDefaultConstructor(boolean value) {
+		super.beansRequireDefaultConstructor(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanDictionaryRemove(Object...values) {
-		super.beanDictionaryRemove(values);
+	public UonPartSerializerBuilder beansRequireDefaultConstructor() {
+		super.beansRequireDefaultConstructor();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanFieldVisibility(Visibility value) {
-		super.beanFieldVisibility(value);
+	public UonPartSerializerBuilder beansRequireSerializable(boolean value) {
+		super.beansRequireSerializable(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanFilters(boolean append, Object...values) {
-		super.beanFilters(append, values);
+	public UonPartSerializerBuilder beansRequireSerializable() {
+		super.beansRequireSerializable();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanFilters(Class<?>...values) {
-		super.beanFilters(values);
+	public UonPartSerializerBuilder beansRequireSettersForGetters(boolean value) {
+		super.beansRequireSettersForGetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanFilters(Object...values) {
-		super.beanFilters(values);
+	public UonPartSerializerBuilder beansRequireSettersForGetters() {
+		super.beansRequireSettersForGetters();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanFiltersRemove(Object...values) {
-		super.beanFiltersRemove(values);
+	public UonPartSerializerBuilder beansRequireSomeProperties(boolean value) {
+		super.beansRequireSomeProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
+	public UonPartSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
 		super.beanMapPutReturnsOldValue(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanMapPutReturnsOldValue() {
+	public UonPartSerializerBuilder beanMapPutReturnsOldValue() {
 		super.beanMapPutReturnsOldValue();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanMethodVisibility(Visibility value) {
-		super.beanMethodVisibility(value);
+	public UonPartSerializerBuilder beanConstructorVisibility(Visibility value) {
+		super.beanConstructorVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beansRequireDefaultConstructor(boolean value) {
-		super.beansRequireDefaultConstructor(value);
+	public UonPartSerializerBuilder beanClassVisibility(Visibility value) {
+		super.beanClassVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beansRequireDefaultConstructor() {
-		super.beansRequireDefaultConstructor();
+	public UonPartSerializerBuilder beanFieldVisibility(Visibility value) {
+		super.beanFieldVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beansRequireSerializable(boolean value) {
-		super.beansRequireSerializable(value);
+	public UonPartSerializerBuilder beanMethodVisibility(Visibility value) {
+		super.beanMethodVisibility(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beansRequireSerializable() {
-		super.beansRequireSerializable();
+	public UonPartSerializerBuilder useJavaBeanIntrospector(boolean value) {
+		super.useJavaBeanIntrospector(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beansRequireSettersForGetters(boolean value) {
-		super.beansRequireSettersForGetters(value);
+	public UonPartSerializerBuilder useJavaBeanIntrospector() {
+		super.useJavaBeanIntrospector();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beansRequireSettersForGetters() {
-		super.beansRequireSettersForGetters();
+	public UonPartSerializerBuilder useInterfaceProxies(boolean value) {
+		super.useInterfaceProxies(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beansRequireSomeProperties(boolean value) {
-		super.beansRequireSomeProperties(value);
+	public UonPartSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
+		super.ignoreUnknownBeanProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder beanTypePropertyName(String value) {
-		super.beanTypePropertyName(value);
+	public UonPartSerializerBuilder ignoreUnknownBeanProperties() {
+		super.ignoreUnknownBeanProperties();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder debug() {
-		super.debug();
+	public UonPartSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
+		super.ignoreUnknownNullBeanProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public <T> MsgPackSerializerBuilder example(Class<T> c, T o) {
-		super.example(c, o);
+	public UonPartSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
+		super.ignorePropertiesWithoutSetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
+	public UonPartSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
 		super.ignoreInvocationExceptionsOnGetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder ignoreInvocationExceptionsOnGetters() {
+	public UonPartSerializerBuilder ignoreInvocationExceptionsOnGetters() {
 		super.ignoreInvocationExceptionsOnGetters();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
+	public UonPartSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
 		super.ignoreInvocationExceptionsOnSetters(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder ignoreInvocationExceptionsOnSetters() {
+	public UonPartSerializerBuilder ignoreInvocationExceptionsOnSetters() {
 		super.ignoreInvocationExceptionsOnSetters();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
-		super.ignorePropertiesWithoutSetters(value);
+	public UonPartSerializerBuilder sortProperties(boolean value) {
+		super.sortProperties(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
-		super.ignoreUnknownBeanProperties(value);
+	public UonPartSerializerBuilder sortProperties() {
+		super.sortProperties();
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder ignoreUnknownBeanProperties() {
-		super.ignoreUnknownBeanProperties();
+	public UonPartSerializerBuilder notBeanPackages(Object...values) {
+		super.notBeanPackages(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
-		super.ignoreUnknownNullBeanProperties(value);
+	public UonPartSerializerBuilder notBeanPackages(String...values) {
+		super.notBeanPackages(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public <T> MsgPackSerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
-		super.implClass(interfaceClass, implClass);
+	public UonPartSerializerBuilder notBeanPackages(boolean append, Object...values) {
+		super.notBeanPackages(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder implClasses(Map<String,Class<?>> values) {
-		super.implClasses(values);
+	public UonPartSerializerBuilder notBeanPackagesRemove(Object...values) {
+		super.notBeanPackagesRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder locale(Locale value) {
-		super.locale(value);
+	public UonPartSerializerBuilder notBeanClasses(Object...values) {
+		super.notBeanClasses(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder mediaType(MediaType value) {
-		super.mediaType(value);
+	public UonPartSerializerBuilder notBeanClasses(Class<?>...values) {
+		super.notBeanClasses(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder notBeanClasses(boolean append, Object...values) {
+	public UonPartSerializerBuilder notBeanClasses(boolean append, Object...values) {
 		super.notBeanClasses(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder notBeanClasses(Class<?>...values) {
-		super.notBeanClasses(values);
+	public UonPartSerializerBuilder notBeanClassesRemove(Object...values) {
+		super.notBeanClassesRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder notBeanClasses(Object...values) {
-		super.notBeanClasses(values);
+	public UonPartSerializerBuilder beanFilters(Object...values) {
+		super.beanFilters(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder notBeanClassesRemove(Object...values) {
-		super.notBeanClassesRemove(values);
+	public UonPartSerializerBuilder beanFilters(Class<?>...values) {
+		super.beanFilters(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder notBeanPackages(boolean append, Object...values) {
-		super.notBeanPackages(append, values);
+	public UonPartSerializerBuilder beanFilters(boolean append, Object...values) {
+		super.beanFilters(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder notBeanPackages(Object...values) {
-		super.notBeanPackages(values);
+	public UonPartSerializerBuilder beanFiltersRemove(Object...values) {
+		super.beanFiltersRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder notBeanPackages(String...values) {
-		super.notBeanPackages(values);
+	public UonPartSerializerBuilder pojoSwaps(Object...values) {
+		super.pojoSwaps(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder notBeanPackagesRemove(Object...values) {
-		super.notBeanPackagesRemove(values);
+	public UonPartSerializerBuilder pojoSwaps(Class<?>...values) {
+		super.pojoSwaps(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder pojoSwaps(boolean append, Object...values) {
+	public UonPartSerializerBuilder pojoSwaps(boolean append, Object...values) {
 		super.pojoSwaps(append, values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder pojoSwaps(Class<?>...values) {
-		super.pojoSwaps(values);
+	public UonPartSerializerBuilder pojoSwapsRemove(Object...values) {
+		super.pojoSwapsRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder pojoSwaps(Object...values) {
-		super.pojoSwaps(values);
+	public UonPartSerializerBuilder implClasses(Map<String,Class<?>> values) {
+		super.implClasses(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder pojoSwapsRemove(Object...values) {
-		super.pojoSwapsRemove(values);
+	public <T> UonPartSerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
+		super.implClass(interfaceClass, implClass);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder sortProperties(boolean value) {
-		super.sortProperties(value);
+	public UonPartSerializerBuilder beanDictionary(Object...values) {
+		super.beanDictionary(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder sortProperties() {
-		super.sortProperties();
+	public UonPartSerializerBuilder beanDictionary(Class<?>...values) {
+		super.beanDictionary(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder timeZone(TimeZone value) {
-		super.timeZone(value);
+	public UonPartSerializerBuilder beanDictionary(boolean append, Object...values) {
+		super.beanDictionary(append, values);
+		return this;
+	}
+
+	@Override /* BeanContextBuilder */
+	public UonPartSerializerBuilder beanDictionaryRemove(Object...values) {
+		super.beanDictionaryRemove(values);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder useEnumNames() {
-		super.useEnumNames();
+	public UonPartSerializerBuilder beanTypePropertyName(String value) {
+		super.beanTypePropertyName(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder useInterfaceProxies(boolean value) {
-		super.useInterfaceProxies(value);
+	public UonPartSerializerBuilder locale(Locale value) {
+		super.locale(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder useJavaBeanIntrospector(boolean value) {
-		super.useJavaBeanIntrospector(value);
+	public UonPartSerializerBuilder timeZone(TimeZone value) {
+		super.timeZone(value);
 		return this;
 	}
 
 	@Override /* BeanContextBuilder */
-	public MsgPackSerializerBuilder useJavaBeanIntrospector() {
-		super.useJavaBeanIntrospector();
+	public UonPartSerializerBuilder mediaType(MediaType value) {
+		super.mediaType(value);
+		return this;
+	}
+
+	@Override /* BeanContextBuilder */
+	public UonPartSerializerBuilder debug() {
+		super.debug();
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackSerializerBuilder set(String name, Object value) {
+	public UonPartSerializerBuilder set(String name, Object value) {
 		super.set(name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackSerializerBuilder set(boolean append, String name, Object value) {
+	public UonPartSerializerBuilder set(boolean append, String name, Object value) {
 		super.set(append, name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackSerializerBuilder set(Map<String,Object> properties) {
+	public UonPartSerializerBuilder set(Map<String,Object> properties) {
 		super.set(properties);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackSerializerBuilder add(Map<String,Object> properties) {
+	public UonPartSerializerBuilder add(Map<String,Object> properties) {
 		super.add(properties);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackSerializerBuilder addTo(String name, Object value) {
+	public UonPartSerializerBuilder addTo(String name, Object value) {
 		super.addTo(name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackSerializerBuilder addTo(String name, String key, Object value) {
+	public UonPartSerializerBuilder addTo(String name, String key, Object value) {
 		super.addTo(name, key, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackSerializerBuilder removeFrom(String name, Object value) {
+	public UonPartSerializerBuilder removeFrom(String name, Object value) {
 		super.removeFrom(name, value);
 		return this;
 	}
 
 	@Override /* ContextBuilder */
-	public MsgPackSerializerBuilder apply(PropertyStore copyFrom) {
+	public UonPartSerializerBuilder apply(PropertyStore copyFrom) {
 		super.apply(copyFrom);
 		return this;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
index 576a7ef..23680f0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
@@ -492,4 +492,22 @@ public class JsoParserBuilder extends InputStreamParserBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public JsoParserBuilder fileCharset(String value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public JsoParserBuilder inputStreamCharset(String value) {
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
index 9fca5bf..363c10c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
@@ -581,4 +581,91 @@ public class JsoSerializerBuilder extends OutputStreamSerializerBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public JsoSerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public JsoSerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@Override
+	@Deprecated
+	public JsoSerializerBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public JsoSerializerBuilder maxIndent(int value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public JsoSerializerBuilder quoteChar(char value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public JsoSerializerBuilder sq() {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public JsoSerializerBuilder useWhitespace(boolean value) {
+		super.useWhitespace(value);
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public JsoSerializerBuilder useWhitespace() {
+		super.useWhitespace();
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public JsoSerializerBuilder ws() {
+		super.ws();
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
index 63ed977..f5ad898 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
@@ -817,4 +817,32 @@ public class JsonSchemaSerializerBuilder extends JsonSerializerBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public JsonSchemaSerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public JsonSchemaSerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@Override
+	@Deprecated
+	public JsonSchemaSerializerBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
index a7c1095..b8d2e7a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializer.java
@@ -15,6 +15,7 @@ package org.apache.juneau.json;
 import java.util.*;
 
 import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 
 /**
@@ -258,6 +259,19 @@ public class JsonSerializer extends WriterSerializer {
 	/** Default serializer, all default settings.*/
 	public static final JsonSerializer DEFAULT_READABLE = new Readable(PropertyStore.DEFAULT);
 
+	/** @deprecated Use {@link SimpleJsonSerializer#DEFAULT} */
+	@Deprecated
+	public static final JsonSerializer DEFAULT_LAX = new SimpleJsonSerializer(PropertyStore.DEFAULT);
+
+	/** @deprecated Use {@link SimpleJsonSerializer#DEFAULT_READABLE} */
+	@Deprecated
+	public static final JsonSerializer DEFAULT_LAX_READABLE = new SimpleJsonSerializer.Readable(PropertyStore.DEFAULT);
+
+	/** @deprecated Use {@link SimpleJsonSerializer#DEFAULT_READABLE} */
+	@Deprecated
+	public static final JsonSerializer DEFAULT_LAX_READABLE_SAFE = new SimpleJsonSerializer.ReadableSafe(PropertyStore.DEFAULT);
+
+
 	//-------------------------------------------------------------------------------------------------------------------
 	// Predefined subclasses
 	//-------------------------------------------------------------------------------------------------------------------
@@ -277,6 +291,68 @@ public class JsonSerializer extends WriterSerializer {
 		}
 	}
 
+	/** @deprecated Use {@link SimpleJsonSerializer} */
+	@Deprecated
+	public static class Simple extends JsonSerializer {
+
+		/**
+		 * Constructor.
+		 *
+		 * @param ps The property store containing all the settings for this object.
+		 */
+		public Simple(PropertyStore ps) {
+			super(
+				ps.builder()
+					.set(JSON_simpleMode, true)
+					.set(WSERIALIZER_quoteChar, '\'')
+					.build(),
+				"application/json",
+				"application/json+simple,text/json+simple"
+			);
+		}
+	}
+
+	/** @deprecated Use {@link SimpleJsonSerializer.Readable} */
+	@Deprecated
+	public static class SimpleReadable extends JsonSerializer {
+
+		/**
+		 * Constructor.
+		 *
+		 * @param ps The property store containing all the settings for this object.
+		 */
+		public SimpleReadable(PropertyStore ps) {
+			super(
+				ps.builder()
+					.set(JSON_simpleMode, true)
+					.set(WSERIALIZER_quoteChar, '\'')
+					.set(SERIALIZER_useWhitespace, true)
+					.build()
+			);
+		}
+	}
+
+	/** @deprecated Use {@link SimpleJsonSerializer.Readable} */
+	@Deprecated
+	public static class SimpleReadableSafe extends JsonSerializer {
+
+		/**
+		 * Constructor.
+		 *
+		 * @param ps The property store containing all the settings for this object.
+		 */
+		public SimpleReadableSafe(PropertyStore ps) {
+			super(
+				ps.builder()
+					.set(JSON_simpleMode, true)
+					.set(WSERIALIZER_quoteChar, '\'')
+					.set(SERIALIZER_useWhitespace, true)
+					.set(BEANTRAVERSE_detectRecursions, true)
+					.build()
+			);
+		}
+	}
+
 	/**
 	 * Default serializer, single quotes, simple mode, with whitespace and recursion detection.
 	 * Note that recursion detection introduces a small performance penalty.
@@ -446,4 +522,20 @@ public class JsonSerializer extends WriterSerializer {
 				.append("addBeanTypes", addBeanTypes)
 			);
 	}
+
+	/**
+	 * @deprecated Use {@link #JsonSerializer(PropertyStore, String, String)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public JsonSerializer(PropertyStore ps, String produces, String...accept) {
+		this(ps, produces, StringUtils.join(accept, ','));
+	}
+	
+	/**
+	 * @deprecated Use {@link #JSON_addBeanTypes}
+	 */
+	@Deprecated
+	public static final String JSON_addBeanTypeProperties = JSON_addBeanTypes;
+	
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
index eed2a60..12f7569 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
@@ -706,4 +706,32 @@ public class JsonSerializerBuilder extends WriterSerializerBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public JsonSerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public JsonSerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@Override
+	@Deprecated
+	public JsonSerializerBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java
index 2e053dc..b66d72f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializer.java
@@ -43,17 +43,17 @@ public class SimpleJsonSerializer extends JsonSerializer {
 	//-------------------------------------------------------------------------------------------------------------------
 
 	/** Default serializer, single quotes, {@link #JSON_simpleMode simple mode}. */
-	public static final JsonSerializer DEFAULT = new SimpleJsonSerializer(PropertyStore.DEFAULT);
+	public static final SimpleJsonSerializer DEFAULT = new SimpleJsonSerializer(PropertyStore.DEFAULT);
 
 	/** Default serializer, single quotes, simple mode, with whitespace. */
-	public static final JsonSerializer DEFAULT_READABLE = new Readable(PropertyStore.DEFAULT);
+	public static final SimpleJsonSerializer DEFAULT_READABLE = new Readable(PropertyStore.DEFAULT);
 
 	//-------------------------------------------------------------------------------------------------------------------
 	// Predefined subclasses
 	//-------------------------------------------------------------------------------------------------------------------
 
 	/** Default serializer, single quotes, simple mode, with whitespace. */
-	public static class Readable extends JsonSerializer {
+	public static class Readable extends SimpleJsonSerializer {
 
 		/**
 		 * Constructor.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java
index e7455b2..c1b0e87 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackInputStream.java
@@ -473,4 +473,22 @@ public final class MsgPackInputStream extends ParserInputStream {
 		long l = read(); l <<= 8; l |= read(); l <<= 8; l |= read(); l <<= 8; l |= read();
 		return l;
 	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ParserPipe getPipe() {
+		return null;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public int read() throws IOException {
+		return super.read();
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
index b1d6a26..6340af5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserBuilder.java
@@ -492,4 +492,22 @@ public class MsgPackParserBuilder extends InputStreamParserBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public MsgPackParserBuilder fileCharset(String value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public MsgPackParserBuilder inputStreamCharset(String value) {
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
index 8891c12..615dbfa 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java
@@ -165,4 +165,10 @@ public class MsgPackSerializer extends OutputStreamSerializer {
 				.append("addBeanTypes", addBeanTypes)
 			);
 	}
+
+	/**
+	 * @deprecated Use {@link #MSGPACK_addBeanTypes}.
+	 */
+	@Deprecated
+	public static final String MSGPACK_addBeanTypeProperties = MSGPACK_addBeanTypes;
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
index c454e05..e84a6c9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
@@ -581,4 +581,86 @@ public class MsgPackSerializerBuilder extends OutputStreamSerializerBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public MsgPackSerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public MsgPackSerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@Override
+	@Deprecated
+	public MsgPackSerializerBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public MsgPackSerializerBuilder maxIndent(int value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public MsgPackSerializerBuilder quoteChar(char value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public MsgPackSerializerBuilder sq() {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public MsgPackSerializerBuilder useWhitespace(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public MsgPackSerializerBuilder useWhitespace() {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public MsgPackSerializerBuilder ws() {
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParseException.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParseException.java
index a0b69b9..89697f5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParseException.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParseException.java
@@ -133,4 +133,41 @@ public class ParseException extends FormattedException {
 			t = (ParseException)t.getCause();
 		return t;
 	}
+
+	/**
+	 * @deprecated Use {@link #ParseException(ParserSession, String, Object[])}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ParseException(ObjectMap location, String message, Object...args) {
+		super(getMessage(null, message, args));
+	}
+
+	/**
+	 * @deprecated Use {@link #ParseException(ParserSession, Exception)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ParseException(ObjectMap location, Exception causedBy) {
+		super(causedBy, getMessage(null, causedBy.getMessage()));
+	}
+
+	/**
+	 * @deprecated Use {@link #ParseException(ParserSession, Exception)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ParseException(Exception causedBy) {
+		super(causedBy, getMessage(null, causedBy.getMessage()));
+	}
+
+	/**
+	 * @deprecated Use {@link #ParseException(ParserSession, Exception)}
+	 */
+	@Override
+	@Deprecated
+	public synchronized ParseException initCause(Throwable cause) {
+		super.initCause(cause);
+		return this;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
index ea69bc9..ab2ce0c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Parser.java
@@ -902,4 +902,16 @@ public abstract class Parser extends BeanContext {
 	protected final Class<? extends ParserListener> getListenerClass() {
 		return listener;
 	}
+	
+	/**
+	 * @deprecated Not used.
+	 */
+	@Deprecated
+	public static final String PARSER_fileCharset = PREFIX + "fileCharset.s";
+	
+	/**
+	 * @deprecated Not used.
+	 */
+	@Deprecated
+	public static final String PARSER_inputStreamCharset = PREFIX + "inputStreamCharset.s";
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
index 90fed6c..be4397f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
@@ -14,6 +14,7 @@ package org.apache.juneau.parser;
 
 import static org.apache.juneau.parser.Parser.*;
 
+import java.nio.charset.*;
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -615,4 +616,40 @@ public class ParserBuilder extends BeanContextBuilder {
 	public Parser build() {
 		return null;
 	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ParserBuilder fileCharset(String value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ParserBuilder fileCharset(Charset value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ParserBuilder inputStreamCharset(String value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ParserBuilder inputStreamCharset(Charset value) {
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
index ac7c974..0323477 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
@@ -56,4 +56,25 @@ public class ParserListener {
 	public void onError(ParserSession session, Throwable t, String msg) {
 		// Do something with this information.
 	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public <T> void onUnknownBeanProperty(ParserSession session, ParserPipe pipe, String propertyName, Class<T> beanClass, T bean, int line, int col) {
+		onError(session, pipe, null,
+			format("Unknown property ''{0}'' encountered while trying to parse into class ''{1}'' at line {2} column {3}",
+				propertyName, beanClass, line, col)
+		);
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public void onError(ParserSession session, ParserPipe pipe, Throwable t, String msg) {
+		// Do something with this information.
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserReader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserReader.java
index dcdb7dd..4c58965 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserReader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserReader.java
@@ -14,6 +14,7 @@ package org.apache.juneau.parser;
 
 import java.io.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.internal.*;
 
 /**
@@ -406,4 +407,40 @@ public class ParserReader extends Reader implements Positionable {
 	public Position getPosition() {
 		return new Position(line, column);
 	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public final int getLine() {
+		return line;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public final int getColumn() {
+		return column;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ObjectMap getLocation(ParserSession session) {
+		return session.getLastLocation().append("line", getLine()).append("column", getColumn());
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public final ParserPipe getPipe() {
+		return null;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
index 9e95acd..a9acaac 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
@@ -147,7 +147,10 @@ public abstract class ParserSession extends BeanSession {
 	 * @return
 	 * 	A new {@link ParserPipe} wrapper around the specified input object.
 	 */
-	public abstract ParserPipe createPipe(Object input);
+	// TODO - Make abstract in 8.0
+	public ParserPipe createPipe(Object input) { 
+		return null;
+	}
 
 	/**
 	 * Returns information used to determine at what location in the parse a failure occurred.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java
index 75f76ca..4643a7f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSessionArgs.java
@@ -120,4 +120,13 @@ public final class ParserSessionArgs extends BeanSessionArgs {
 		super.properties(properties);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link #ParserSessionArgs(ObjectMap, Method, Locale, TimeZone, MediaType, HttpPartSchema, Boolean, Object)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public ParserSessionArgs(ObjectMap properties, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, Object outer) {
+		this(properties, javaMethod, locale, timeZone, mediaType, null, null, outer);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
index c07b465..69b977d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
@@ -62,6 +62,7 @@ public abstract class ReaderParserBuilder extends ParserBuilder {
 	 * 	<br>The default value is <js>"DEFAULT"</js> which causes the system default to be used.
 	 * @return This object (for method chaining).
 	 */
+	@Override
 	public ReaderParserBuilder fileCharset(String value) {
 		return set(RPARSER_fileCharset, value);
 	}
@@ -82,6 +83,7 @@ public abstract class ReaderParserBuilder extends ParserBuilder {
 	 * 	<br>The default value is <js>"DEFAULT"</js> which causes the system default to be used.
 	 * @return This object (for method chaining).
 	 */
+	@Override
 	public ReaderParserBuilder fileCharset(Charset value) {
 		return set(RPARSER_fileCharset, value);
 	}
@@ -102,6 +104,7 @@ public abstract class ReaderParserBuilder extends ParserBuilder {
 	 * 	<br>The default value is <js>"UTF-8"</js>.
 	 * @return This object (for method chaining).
 	 */
+	@Override
 	public ReaderParserBuilder inputStreamCharset(String value) {
 		return set(RPARSER_inputStreamCharset, value);
 	}
@@ -122,6 +125,7 @@ public abstract class ReaderParserBuilder extends ParserBuilder {
 	 * 	<br>The default value is <js>"UTF-8"</js>.
 	 * @return This object (for method chaining).
 	 */
+	@Override
 	public ReaderParserBuilder inputStreamCharset(Charset value) {
 		return set(RPARSER_inputStreamCharset, value);
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
index 8e657dd..a811cd5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializer.java
@@ -12,7 +12,13 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.plaintext;
 
+import java.lang.reflect.*;
+import java.util.*;
+
 import org.apache.juneau.*;
+import org.apache.juneau.http.*;
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.transform.*;
 
@@ -54,7 +60,7 @@ public class PlainTextSerializer extends WriterSerializer {
 	 * 	The property store containing all the settings for this object.
 	 */
 	public PlainTextSerializer(PropertyStore ps) {
-		this(ps, "text/plain", null);
+		this(ps, "text/plain", (String)null);
 	}
 
 	/**
@@ -113,4 +119,13 @@ public class PlainTextSerializer extends WriterSerializer {
 	public WriterSerializerSession createSession(SerializerSessionArgs args) {
 		return new PlainTextSerializerSession(this, args);
 	}
+
+	/**
+	 * @deprecated Use {@link #ParserSessionArgs(ObjectMap, Method, Locale, TimeZone, MediaType, HttpPartSchema, Boolean, Object)}
+	 */
+	@Deprecated
+	@SuppressWarnings("javadoc")
+	public PlainTextSerializer(PropertyStore ps, String produces, String...accept) {
+		super(ps, produces, StringUtils.join(accept, ','));
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
index 06b85c7..7fc711a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
@@ -611,4 +611,31 @@ public class PlainTextSerializerBuilder extends WriterSerializerBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public PlainTextSerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public PlainTextSerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link #addBeanTypeProperties(boolean)}.
+	 */
+	@Override
+	@Deprecated
+	public PlainTextSerializerBuilder addBeanTypeProperties(boolean value) {
+		return addBeanTypes(value);
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Body.java
similarity index 72%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Body.java
index 3f60e90..9eb2b59 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Body.java
@@ -1,46 +1,28 @@
-// ***************************************************************************************************************************
-// * 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.httppart;
-
-/**
- * Represents possible enum values that can be passed to the {@link HttpPartSerializerSession#serialize(HttpPartType, HttpPartSchema, Object)}.
- */
-public enum HttpPartType {
-
-	/** An HTTP request body */
-	BODY,
-
-	/** A URI path variable */
-	PATH,
-
-	/** A URI query parameter */
-	QUERY,
-
-	/** A form-data parameter */
-	FORMDATA,
-
-	/** An HTTP request header */
-	HEADER,
-
-	/** An HTTP response header */
-	RESPONSE_HEADER,
-
-	/** An HTTP response body */
-	RESPONSE_BODY,
-
-	/** An HTTP response status code */
-	RESPONSE_STATUS,
-
-	/** A non-standard field */
-	OTHER;
-}
+// ***************************************************************************************************************************
+// * 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.remoteable;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+import java.lang.annotation.*;
+
+/**
+ * @deprecated Use {@link org.apache.juneau.http.annotation.Body}
+ */
+@Deprecated
+@Documented
+@Target({PARAMETER,FIELD,METHOD})
+@Retention(RUNTIME)
+@Inherited
+public @interface Body {}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/FormData.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/FormData.java
new file mode 100644
index 0000000..19787e3
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/FormData.java
@@ -0,0 +1,114 @@
+// ***************************************************************************************************************************
+// * 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.remoteable;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+import java.lang.annotation.*;
+
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.urlencoding.*;
+
+/**
+ * @deprecated Use {@link org.apache.juneau.http.annotation.FormData}
+ */
+@Deprecated
+@Documented
+@Target({PARAMETER,FIELD,METHOD})
+@Retention(RUNTIME)
+@Inherited
+public @interface FormData {
+
+	/**
+	 * The form post parameter name.
+	 *
+	 * <p>
+	 * Note that {@link #name()} and {@link #value()} are synonyms.
+	 *
+	 * <p>
+	 * The value should be either <js>"*"</js> to represent multiple name/value pairs, or a label that defines the
+	 * form data parameter name.
+	 *
+	 * <p>
+	 * A blank value (the default) has the following behavior:
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		If the data type is <code>NameValuePairs</code>, <code>Map</code>, or a bean,
+	 * 		then it's the equivalent to <js>"*"</js> which will cause the value to be serialized as name/value pairs.
+	 *
+	 * 		<h5 class='figure'>Example:</h5>
+	 * 		<p class='bcode'>
+	 * 	<jc>// When used on a remote method parameter</jc>
+	 * 	<ja>@Remoteable</ja>(path=<js>"/myproxy"</js>)
+	 * 	<jk>public interface</jk> MyProxy {
+	 *
+	 * 		<jc>// Equivalent to @FormData("*")</jc>
+	 * 		<ja>@RemoteMethod</ja>(path=<js>"/mymethod"</js>)
+	 * 		String myProxyMethod1(<ja>@FormData</ja> Map&lt;String,Object&gt; formData);
+	 * 	}
+	 *
+	 * 	<jc>// When used on a request bean method</jc>
+	 * 	<jk>public interface</jk> MyRequestBean {
+	 *
+	 * 		<jc>// Equivalent to @FormData("*")</jc>
+	 * 		<ja>@FormData</ja>
+	 * 		Map&lt;String,Object&gt; getFoo();
+	 * 	}
+	 * 		</p>
+	 * 	</li>
+	 * 	<li>
+	 * 		If used on a request bean method, uses the bean property name.
+	 *
+	 * 		<h5 class='figure'>Example:</h5>
+	 * 		<p class='bcode'>
+	 * 	<jk>public interface</jk> MyRequestBean {
+	 *
+	 * 		<jc>// Equivalent to @FormData("foo")</jc>
+	 * 		<ja>@FormData</ja>
+	 * 		String getFoo();
+	 * 	}
+	 * 		</p>
+	 * 	</li>
+	 * </ul>
+	 */
+	String name() default "";
+
+	/**
+	 * A synonym for {@link #name()}.
+	 *
+	 * <p>
+	 * Allows you to use shortened notation if you're only specifying the name.
+	 */
+	String value() default "";
+
+	/**
+	 * Skips this value if it's an empty string or empty collection/array.
+	 *
+	 * <p>
+	 * Note that <jk>null</jk> values are already ignored.
+	 */
+	boolean skipIfEmpty() default false;
+
+	/**
+	 * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.
+	 *
+	 * <p>
+	 * The default value defaults to the using the part serializer defined on the {@link RequestBean @RequestBean} annotation,
+	 * then on the client which by default is {@link UrlEncodingSerializer}.
+	 *
+	 * <p>
+	 * This annotation is provided to allow values to be custom serialized.
+	 */
+	Class<? extends HttpPartSerializer> serializer() default HttpPartSerializer.Null.class;
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/FormDataIfNE.java
similarity index 63%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/FormDataIfNE.java
index 58d2a6f..c700c49 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/FormDataIfNE.java
@@ -10,44 +10,49 @@
 // * "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.html.annotation;
+package org.apache.juneau.remoteable;
 
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
-import org.apache.juneau.html.*;
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.urlencoding.*;
 
 /**
- * Used in conjunction with the {@link HtmlSerializer} class to define hyperlinks.
- *
- * <p>
- * This annotation is applied to classes.
- *
- * <p>
- * Annotation that can be used to specify that a class has a URL associated with it.
- *
- * <p>
- * When rendered using the {@link org.apache.juneau.html.HtmlSerializer HtmlSerializer} class, this class will get
- * rendered as a hyperlink like so...
- * <p class='code'>
- * 	<xt>&lt;a</xt> <xa>href</xa>=<xs>'hrefProperty'</xs><xt>&gt;</xt>nameProperty<xt>&lt;/a&gt;</xt>
- * </p>
+ * @deprecated Use {@link org.apache.juneau.http.annotation.FormData#skipIfEmpty()}
  */
+@Deprecated
 @Documented
-@Target(TYPE)
+@Target({PARAMETER,FIELD,METHOD})
 @Retention(RUNTIME)
 @Inherited
-public @interface HtmlLink {
+public @interface FormDataIfNE {
 
 	/**
-	 * The bean property whose value becomes the name in the hyperlink.
+	 * The form post parameter name.
+	 *
+	 * @see FormData#name()
 	 */
-	String nameProperty() default "name";
+	String name() default "";
 
 	/**
-	 * The bean property whose value becomes the url in the hyperlink.
+	 * A synonym for {@link #name()}.
+	 *
+	 * @see FormData#value()
 	 */
-	String uriProperty() default "uri";
+	String value() default "";
+
+	/**
+	 * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.
+	 *
+	 * <p>
+	 * The default value defaults to the using the part serializer defined on the {@link RequestBean @RequestBean} annotation,
+	 * then on the client which by default is {@link UrlEncodingSerializer}.
+	 *
+	 * <p>
+	 * This annotation is provided to allow values to be custom serialized.
+	 */
+	Class<? extends HttpPartSerializer> serializer() default HttpPartSerializer.Null.class;
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Header.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Header.java
new file mode 100644
index 0000000..8e621c6
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Header.java
@@ -0,0 +1,115 @@
+// ***************************************************************************************************************************
+// * 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.remoteable;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+import java.lang.annotation.*;
+
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.urlencoding.*;
+
+/**
+ * @deprecated Use {@link org.apache.juneau.http.annotation.Header}
+ */
+@Deprecated
+@Documented
+@Target({PARAMETER,FIELD,METHOD})
+@Retention(RUNTIME)
+@Inherited
+public @interface Header {
+
+	/**
+	 * The HTTP header name.
+	 *
+	 * <p>
+	 * A blank value (the default) indicates to reuse the bean property name when used on a request bean property.
+	 *
+	 * <p>
+	 * The value should be either <js>"*"</js> to represent multiple name/value pairs, or a label that defines the
+	 * header name.
+	 *
+	 * <p>
+	 * A blank value (the default) has the following behavior:
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		If the data type is <code>NameValuePairs</code>, <code>Map</code>, or a bean,
+	 * 		then it's the equivalent to <js>"*"</js> which will cause the value to be serialized as name/value pairs.
+	 *
+	 * 		<h5 class='figure'>Example:</h5>
+	 * 		<p class='bcode'>
+	 * 	<jc>// When used on a remote method parameter</jc>
+	 * 	<ja>@Remoteable</ja>(path=<js>"/myproxy"</js>)
+	 * 	<jk>public interface</jk> MyProxy {
+	 *
+	 * 		<jc>// Equivalent to @Header("*")</jc>
+	 * 		<ja>@RemoteMethod</ja>(path=<js>"/mymethod"</js>)
+	 * 		String myProxyMethod1(<ja>@Header</ja> Map&lt;String,Object&gt; headers);
+	 * 	}
+	 *
+	 * 	<jc>// When used on a request bean method</jc>
+	 * 	<jk>public interface</jk> MyRequestBean {
+	 *
+	 * 		<jc>// Equivalent to @Header("*")</jc>
+	 * 		<ja>@Header</ja>
+	 * 		Map&lt;String,Object&gt; getFoo();
+	 * 	}
+	 * 		</p>
+	 * 	</li>
+	 * 	<li>
+	 * 		If used on a request bean method, uses the bean property name.
+	 *
+	 * 		<h5 class='figure'>Example:</h5>
+	 * 		<p class='bcode'>
+	 * 	<jk>public interface</jk> MyRequestBean {
+	 *
+	 * 		<jc>// Equivalent to @Header("Foo")</jc>
+	 * 		<ja>@Header</ja>
+	 * 		<ja>@BeanProperty</ja>(<js>"Foo"</js>)
+	 * 		String getFoo();
+	 * 	}
+	 * 		</p>
+	 * 	</li>
+	 * </ul>
+	 */
+	String name() default "";
+
+	/**
+	 * A synonym for {@link #name()}.
+	 *
+	 * <p>
+	 * Allows you to use shortened notation if you're only specifying the name.
+	 */
+	String value() default "";
+
+	/**
+	 * Skips this value if it's an empty string or empty collection/array.
+	 *
+	 * <p>
+	 * Note that <jk>null</jk> values are already ignored.
+	 */
+	boolean skipIfEmpty() default false;
+
+	/**
+	 * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.
+	 *
+	 * <p>
+	 * The default value defaults to the using the part serializer defined on the {@link RequestBean @RequestBean} annotation,
+	 * then on the client which by default is {@link UrlEncodingSerializer}.
+	 *
+	 * <p>
+	 * This annotation is provided to allow values to be custom serialized.
+	 */
+	Class<? extends HttpPartSerializer> serializer() default HttpPartSerializer.Null.class;
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/HeaderIfNE.java
similarity index 63%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/HeaderIfNE.java
index 58d2a6f..1117a55 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/HeaderIfNE.java
@@ -10,44 +10,49 @@
 // * "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.html.annotation;
+package org.apache.juneau.remoteable;
 
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
-import org.apache.juneau.html.*;
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.urlencoding.*;
 
 /**
- * Used in conjunction with the {@link HtmlSerializer} class to define hyperlinks.
- *
- * <p>
- * This annotation is applied to classes.
- *
- * <p>
- * Annotation that can be used to specify that a class has a URL associated with it.
- *
- * <p>
- * When rendered using the {@link org.apache.juneau.html.HtmlSerializer HtmlSerializer} class, this class will get
- * rendered as a hyperlink like so...
- * <p class='code'>
- * 	<xt>&lt;a</xt> <xa>href</xa>=<xs>'hrefProperty'</xs><xt>&gt;</xt>nameProperty<xt>&lt;/a&gt;</xt>
- * </p>
+ * @deprecated Use {@link org.apache.juneau.http.annotation.Header#skipIfEmpty()}
  */
+@Deprecated
 @Documented
-@Target(TYPE)
+@Target({PARAMETER,FIELD,METHOD})
 @Retention(RUNTIME)
 @Inherited
-public @interface HtmlLink {
+public @interface HeaderIfNE {
 
 	/**
-	 * The bean property whose value becomes the name in the hyperlink.
+	 * The HTTP header name.
+	 *
+	 * @see Header#name()
 	 */
-	String nameProperty() default "name";
+	String name() default "";
 
 	/**
-	 * The bean property whose value becomes the url in the hyperlink.
+	 * A synonym for {@link #name()}.
+	 *
+	 * @see Header#value()
 	 */
-	String uriProperty() default "uri";
+	String value() default "";
+
+	/**
+	 * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.
+	 *
+	 * <p>
+	 * The default value defaults to the using the part serializer defined on the {@link RequestBean @RequestBean} annotation,
+	 * then on the client which by default is {@link UrlEncodingSerializer}.
+	 *
+	 * <p>
+	 * This annotation is provided to allow values to be custom serialized.
+	 */
+	Class<? extends HttpPartSerializer> serializer() default HttpPartSerializer.Null.class;
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Path.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Path.java
new file mode 100644
index 0000000..25ac55a
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Path.java
@@ -0,0 +1,104 @@
+// ***************************************************************************************************************************
+// * 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.remoteable;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+import java.lang.annotation.*;
+
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.urlencoding.*;
+
+/**
+ * @deprecated Use {@link org.apache.juneau.http.annotation.Path}
+ */
+@Deprecated
+@Documented
+@Target({PARAMETER,FIELD,METHOD})
+@Retention(RUNTIME)
+@Inherited
+public @interface Path {
+
+	/**
+	 * The path parameter name.
+	 *
+	 * <p>
+	 * Note that {@link #name()} and {@link #value()} are synonyms.
+	 *
+	 * <p>
+	 * The value should be either <js>"*"</js> to represent multiple name/value pairs, or a label that defines the
+	 * path variable name.
+	 *
+	 * <p>
+	 * A blank value (the default) has the following behavior:
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		If the data type is <code>NameValuePairs</code>, <code>Map</code>, or a bean,
+	 * 		then it's the equivalent to <js>"*"</js> which will cause the value to be treated as name/value pairs.
+	 *
+	 * 		<h5 class='figure'>Example:</h5>
+	 * 		<p class='bcode'>
+	 * 	<jc>// When used on a remote method parameter</jc>
+	 * 	<ja>@Remoteable</ja>(path=<js>"/myproxy"</js>)
+	 * 	<jk>public interface</jk> MyProxy {
+	 *
+	 * 		<jc>// Equivalent to @Path("*")</jc>
+	 * 		<ja>@RemoteMethod</ja>(path=<js>"/mymethod/{foo}/{bar}"</js>)
+	 * 		String myProxyMethod1(<ja>@FormData</ja> Map&lt;String,Object&gt; pathVars);
+	 * 	}
+	 *
+	 * 	<jc>// When used on a request bean method</jc>
+	 * 	<jk>public interface</jk> MyRequestBean {
+	 *
+	 * 		<jc>// Equivalent to @Path("*")</jc>
+	 * 		<ja>@Path</ja>
+	 * 		Map&lt;String,Object&gt; getPathVars();
+	 * 	}
+	 * 		</p>
+	 * 	</li>
+	 * 	<li>
+	 * 		If used on a request bean method, uses the bean property name.
+	 *
+	 * 		<h5 class='figure'>Example:</h5>
+	 * 		<p class='bcode'>
+	 * 	<jk>public interface</jk> MyRequestBean {
+	 *
+	 * 		<jc>// Equivalent to @Path("foo")</jc>
+	 * 		<ja>@Path</ja>
+	 * 		String getFoo();
+	 * 	}
+	 * </ul>
+	 */
+	String name() default "";
+
+	/**
+	 * A synonym for {@link #name()}.
+	 *
+	 * <p>
+	 * Allows you to use shortened notation if you're only specifying the name.
+	 */
+	String value() default "";
+
+	/**
+	 * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.
+	 *
+	 * <p>
+	 * The default value defaults to the using the part serializer defined on the {@link RequestBean @RequestBean} annotation,
+	 * then on the client which by default is {@link UrlEncodingSerializer}.
+	 *
+	 * <p>
+	 * This annotation is provided to allow values to be custom serialized.
+	 */
+	Class<? extends HttpPartSerializer> serializer() default HttpPartSerializer.Null.class;
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Query.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Query.java
new file mode 100644
index 0000000..a16409d
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Query.java
@@ -0,0 +1,114 @@
+// ***************************************************************************************************************************
+// * 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.remoteable;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+import java.lang.annotation.*;
+
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.urlencoding.*;
+
+/**
+ * @deprecated Use {@link org.apache.juneau.http.annotation.Query}
+ */
+@Deprecated
+@Documented
+@Target({PARAMETER,FIELD,METHOD})
+@Retention(RUNTIME)
+@Inherited
+public @interface Query {
+
+	/**
+	 * The query parameter name.
+	 *
+	 * <p>
+	 * Note that {@link #name()} and {@link #value()} are synonyms.
+	 *
+	 * <p>
+	 * The value should be either <js>"*"</js> to represent multiple name/value pairs, or a label that defines the
+	 * query parameter name.
+	 *
+	 * <p>
+	 * A blank value (the default) has the following behavior:
+	 * <ul class='spaced-list'>
+	 * 	<li>
+	 * 		If the data type is <code>NameValuePairs</code>, <code>Map</code>, or a bean,
+	 * 		then it's the equivalent to <js>"*"</js> which will cause the value to be serialized as name/value pairs.
+	 *
+	 * 		<h5 class='figure'>Example:</h5>
+	 * 		<p class='bcode'>
+	 * 	<jc>// When used on a remote method parameter</jc>
+	 * 	<ja>@Remoteable</ja>(path=<js>"/myproxy"</js>)
+	 * 	<jk>public interface</jk> MyProxy {
+	 *
+	 * 		<jc>// Equivalent to @Query("*")</jc>
+	 * 		<ja>@RemoteMethod</ja>(path=<js>"/mymethod"</js>)
+	 * 		String myProxyMethod1(<ja>@Query</ja> Map&lt;String,Object&gt; formData);
+	 * 	}
+	 *
+	 * 	<jc>// When used on a request bean method</jc>
+	 * 	<jk>public interface</jk> MyRequestBean {
+	 *
+	 * 		<jc>// Equivalent to @Query("*")</jc>
+	 * 		<ja>@Query</ja>
+	 * 		Map&lt;String,Object&gt; getFoo();
+	 * 	}
+	 * 		</p>
+	 * 	</li>
+	 * 	<li>
+	 * 		If used on a request bean method, uses the bean property name.
+	 *
+	 * 		<h5 class='figure'>Example:</h5>
+	 * 		<p class='bcode'>
+	 * 	<jk>public interface</jk> MyRequestBean {
+	 *
+	 * 		<jc>// Equivalent to @Query("foo")</jc>
+	 * 		<ja>@Query</ja>
+	 * 		String getFoo();
+	 * 	}
+	 * 		</p>
+	 * 	</li>
+	 * </ul>
+	 */
+	String name() default "";
+
+	/**
+	 * A synonym for {@link #name()}.
+	 *
+	 * <p>
+	 * Allows you to use shortened notation if you're only specifying the name.
+	 */
+	String value() default "";
+
+	/**
+	 * Skips this value if it's an empty string or empty collection/array.
+	 *
+	 * <p>
+	 * Note that <jk>null</jk> values are already ignored.
+	 */
+	boolean skipIfEmpty() default false;
+
+	/**
+	 * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.
+	 *
+	 * <p>
+	 * The default value defaults to the using the part serializer defined on the {@link RequestBean @RequestBean} annotation,
+	 * then on the client which by default is {@link UrlEncodingSerializer}.
+	 *
+	 * <p>
+	 * This annotation is provided to allow values to be custom serialized.
+	 */
+	Class<? extends HttpPartSerializer> serializer() default HttpPartSerializer.Null.class;
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/QueryIfNE.java
similarity index 63%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/QueryIfNE.java
index 58d2a6f..3b3cedb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/QueryIfNE.java
@@ -10,44 +10,49 @@
 // * "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.html.annotation;
+package org.apache.juneau.remoteable;
 
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
-import org.apache.juneau.html.*;
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.urlencoding.*;
 
 /**
- * Used in conjunction with the {@link HtmlSerializer} class to define hyperlinks.
- *
- * <p>
- * This annotation is applied to classes.
- *
- * <p>
- * Annotation that can be used to specify that a class has a URL associated with it.
- *
- * <p>
- * When rendered using the {@link org.apache.juneau.html.HtmlSerializer HtmlSerializer} class, this class will get
- * rendered as a hyperlink like so...
- * <p class='code'>
- * 	<xt>&lt;a</xt> <xa>href</xa>=<xs>'hrefProperty'</xs><xt>&gt;</xt>nameProperty<xt>&lt;/a&gt;</xt>
- * </p>
+ * @deprecated Use {@link org.apache.juneau.http.annotation.Query#skipIfEmpty()}
  */
+@Deprecated
 @Documented
-@Target(TYPE)
+@Target({PARAMETER,FIELD,METHOD})
 @Retention(RUNTIME)
 @Inherited
-public @interface HtmlLink {
+public @interface QueryIfNE {
 
 	/**
-	 * The bean property whose value becomes the name in the hyperlink.
+	 * The query parameter name.
+	 *
+	 * @see Query#name()
 	 */
-	String nameProperty() default "name";
+	String name() default "";
 
 	/**
-	 * The bean property whose value becomes the url in the hyperlink.
+	 * A synonym for {@link #name()}.
+	 *
+	 * @see Query#value()
 	 */
-	String uriProperty() default "uri";
+	String value() default "";
+
+	/**
+	 * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.
+	 *
+	 * <p>
+	 * The default value defaults to the using the part serializer defined on the {@link RequestBean @RequestBean} annotation,
+	 * then on the client which by default is {@link UrlEncodingSerializer}.
+	 *
+	 * <p>
+	 * This annotation is provided to allow values to be custom serialized.
+	 */
+	Class<? extends HttpPartSerializer> serializer() default HttpPartSerializer.Null.class;
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteMethod.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteMethod.java
new file mode 100644
index 0000000..446cf07
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteMethod.java
@@ -0,0 +1,87 @@
+// ***************************************************************************************************************************
+// * 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.remoteable;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+import java.io.*;
+import java.lang.annotation.*;
+
+/**
+ * @deprecated Use {@link org.apache.juneau.client.remote.RemoteMethod}
+ */
+@SuppressWarnings("javadoc")
+@Deprecated
+@Documented
+@Target(METHOD)
+@Retention(RUNTIME)
+@Inherited
+public @interface RemoteMethod {
+
+	/**
+	 * The path to the REST service for this Java method relative to the parent proxy interface URL.
+	 *
+	 * <p>
+	 * The default value is the Java method name (e.g. <js>"http://localhost/root-url/org.foo.MyInterface/myMethod"</js>)
+	 * if {@link Remoteable#methodPaths() @Remoteable.methodPaths()} is <js>"NAME"</js>, or the Java method signature
+	 * (e.g. <js>"http://localhost/root-url/org.foo.MyInterface/myMethod(int,boolean,java.lang.String)"</js>) if
+	 * it's <js>"SIGNATURE"</js>.
+	 */
+	String path() default "";
+
+	/**
+	 * Defines the HTTP method to use for REST calls.
+	 *
+	 * <p>
+	 * Possible values:
+	 * <ul>
+	 * 	<li><jsf>POST</jsf> (default) - Parameters are serialized using the serializer registered with the RestClient.
+	 * 	<li><jsf>GET</jsf> - Parameters are serialized using the UrlEncodingSerializer registered with the RestClient.
+	 * </ul>
+	 *
+	 * <p>
+	 * The default value is <js>"POST"</js>.
+	 */
+	String httpMethod() default "POST";
+
+	/**
+	 * The value the remoteable method returns.
+	 *
+	 * <p>
+	 * Possible values:
+	 * <ul>
+	 * 	<li>
+	 * 		{@link ReturnValue#BODY} (default) - The body of the HTTP response converted to a POJO.
+	 * 		<br>The return type on the Java method can be any of the following:
+	 * 		<ul>
+	 * 			<li><jk>void</jk> - Don't parse any response.  Note that the method will still throw an exception if an
+	 * 					error HTTP status is returned.
+	 * 			<li>Any parsable POJO - The body of the response will be converted to the POJO using the parser defined
+	 * 					on the <code>RestClient</code>.
+	 * 			<li><code>HttpResponse</code> - Returns the raw <code>HttpResponse</code> returned by the inner
+	 * 					<code>HttpClient</code>.
+	 * 			<li>{@link Reader} - Returns access to the raw reader of the response.
+	 * 			<li>{@link InputStream} - Returns access to the raw input stream of the response.
+	 * 		</ul>
+	 * 	<li>
+	 * 		{@link ReturnValue#HTTP_STATUS} - The HTTP status code on the response.
+	 * 		<br>The return type on the Java method can be any of the following:
+	 * 		<ul>
+	 * 			<li><jk>int</jk>/<code>Integer</code> - The HTTP response code.
+	 * 			<li><jk>boolean</jk>/<code>Boolean</code> - <jk>true</jk> if the response code is <code>&lt;400</code>
+	 * 		</ul>
+	 * </ul>
+	 */
+	ReturnValue returns() default ReturnValue.BODY;
+}
diff --git a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/XPartSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteMethodArg.java
similarity index 53%
copy from juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/XPartSerializer.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteMethodArg.java
index bb533f0..68a900e 100644
--- a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/testutils/XPartSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteMethodArg.java
@@ -10,28 +10,46 @@
 // * "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.rest.testutils;
+package org.apache.juneau.remoteable;
+
+import static org.apache.juneau.internal.ClassUtils.*;
 
 import org.apache.juneau.httppart.*;
-import org.apache.juneau.serializer.*;
+import org.apache.juneau.urlencoding.*;
 
 /**
- * Test serializer.
+ * @deprecated Internal class.
  */
-public class XPartSerializer extends BaseHttpPartSerializer {
-
-	@Override
-	public HttpPartSerializerSession createPartSession(SerializerSessionArgs args) {
-		return new BaseHttpPartSerializerSession() {
-			@Override
-			public String serialize(HttpPartType partType, HttpPartSchema schema, Object value) throws SerializeException, SchemaValidationException {
-				return "x" + value + "x";
-			}
-		};
-	}
+@Deprecated
+public class RemoteMethodArg {
+
+	/** The argument name.  Can be blank. */
+	public final String name;
+
+	/** The zero-based index of the argument on the Java method. */
+	public final int index;
+
+	/** The value is skipped if it's null/empty. */
+	public final boolean skipIfNE;
+
+	/** The serializer used for converting objects to strings. */
+	public final HttpPartSerializer serializer;
 
-	@Override
-	public String serialize(HttpPartType partType, HttpPartSchema schema, Object value) throws SchemaValidationException, SerializeException {
-		return createPartSession().serialize(partType, schema, value);
+	/**
+	 * Constructor.
+	 *
+	 * @param name The argument name pulled from name().
+	 * @param name2 The argument name pulled from value().
+	 * @param index The zero-based index of the argument on the Java method.
+	 * @param skipIfNE The value is skipped if it's null/empty.
+	 * @param serializer
+	 * 	The class to use for serializing headers, query parameters, form-data parameters, and path variables.
+	 * 	If {@link UrlEncodingSerializer}, then the url-encoding serializer defined on the client will be used.
+	 */
+	protected RemoteMethodArg(String name, String name2, int index, boolean skipIfNE, Class<? extends HttpPartSerializer> serializer) {
+		this.name = name.isEmpty() ? name2 : name;
+		this.index = index;
+		this.skipIfNE = skipIfNE;
+		this.serializer = newInstance(HttpPartSerializer.class, serializer);
 	}
-}
\ No newline at end of file
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Remoteable.java
similarity index 50%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Remoteable.java
index 58d2a6f..be4dc77 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/Remoteable.java
@@ -10,44 +10,63 @@
 // * "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.html.annotation;
+package org.apache.juneau.remoteable;
 
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
-import org.apache.juneau.html.*;
-
 /**
- * Used in conjunction with the {@link HtmlSerializer} class to define hyperlinks.
- *
- * <p>
- * This annotation is applied to classes.
- *
- * <p>
- * Annotation that can be used to specify that a class has a URL associated with it.
- *
- * <p>
- * When rendered using the {@link org.apache.juneau.html.HtmlSerializer HtmlSerializer} class, this class will get
- * rendered as a hyperlink like so...
- * <p class='code'>
- * 	<xt>&lt;a</xt> <xa>href</xa>=<xs>'hrefProperty'</xs><xt>&gt;</xt>nameProperty<xt>&lt;/a&gt;</xt>
- * </p>
+ * @deprecated Use {@link org.apache.juneau.rest.client.remote#RemoteResource}
  */
+@SuppressWarnings("javadoc")
+@Deprecated
 @Documented
-@Target(TYPE)
+@Target({TYPE,METHOD})
 @Retention(RUNTIME)
 @Inherited
-public @interface HtmlLink {
+public @interface Remoteable {
+
+	/**
+	 * The absolute or relative path of the REST service.
+	 *
+	 * <p>
+	 * When a relative path is specified, it's relative to the root-url defined on the <code>RestClient</code> used
+	 * to instantiate the interface.
+	 *
+	 * <p>
+	 * When no path is specified, the path is assumed to be the class name (e.g.
+	 * <js>"http://localhost/root-url/org.foo.MyInterface"</js>)
+	 */
+	String path() default "";
 
 	/**
-	 * The bean property whose value becomes the name in the hyperlink.
+	 * Identifies which methods on the interface should be exposed through the proxy.
+	 *
+	 * <p>
+	 * The options are:
+	 * <ul>
+	 * 	<li><js>"DECLARED"</js> (default) - Only methods declared on the immediate interface/class are exposed.
+	 * 		Methods on parent interfaces/classes are ignored.
+	 * 	<li><js>"ANNOTATED"</js> - Only methods annotated with {@link RemoteMethod} are exposed.
+	 * 	<li><js>"ALL"</js> - All methods defined on the interface or class are exposed.
+	 * </ul>
 	 */
-	String nameProperty() default "name";
+	String expose() default "DECLARED";
 
 	/**
-	 * The bean property whose value becomes the url in the hyperlink.
+	 * Defines the methodology to use for the path names of the methods when not explicitly defined via
+	 * {@link RemoteMethod#path() @RemoteMethod.path()}.
+	 *
+	 * <p>
+	 * The options are:
+	 * <ul>
+	 * 	<li><js>"NAME"</js> (default) - Use the method name (e.g. "myMethod").
+	 * 	<li><js>"SIGNATURE"</js> - Use the method signature (e.g. "myMethod(int,boolean,java.lang.String,int[][][])").
+	 * </ul>
+	 * <p>
+	 * Note that if you use <js>"NAME"</js>, method names must be unique in the interface.
 	 */
-	String uriProperty() default "uri";
+	String methodPaths() default "NAME";
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteableMeta.java
similarity index 50%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteableMeta.java
index ac7c974..8c33b0a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserListener.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteableMeta.java
@@ -1,59 +1,64 @@
-// ***************************************************************************************************************************
-// * 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.parser;
-
-import static org.apache.juneau.internal.StringUtils.*;
-
-import org.apache.juneau.*;
-
-/**
- * Class for listening for certain parse events during a document parse.
- */
-public class ParserListener {
-
-	/**
-	 * Represents no parser listener.
-	 */
-	public static final class Null extends ParserListener {}
-
-	/**
-	 * Gets called when an unknown bean property is detected in a document.
-	 *
-	 * <p>
-	 * This method only gets called if {@link BeanContext#BEAN_ignoreUnknownBeanProperties} setting is <jk>true</jk>.
-	 * Otherwise, the parser will throw a {@link ParseException}.
-	 *
-	 * @param <T> The class type of the bean.
-	 * @param session The parser session.
-	 * @param propertyName The property name encountered in the document.
-	 * @param beanClass The bean class.
-	 * @param bean The bean.
-	 */
-	public <T> void onUnknownBeanProperty(ParserSession session, String propertyName, Class<T> beanClass, T bean) {
-		onError(session, null,
-			format("Unknown property ''{0}'' encountered while trying to parse into class ''{1}'' at location {2}",
-				propertyName, beanClass, session.getPosition())
-		);
-	}
-
-	/**
-	 * Called when an error occurs during parsing but is ignored.
-	 *
-	 * @param session The parser session.
-	 * @param t The throwable that was thrown by the getter method.
-	 * @param msg The error message.
-	 */
-	public void onError(ParserSession session, Throwable t, String msg) {
-		// Do something with this information.
-	}
-}
+// ***************************************************************************************************************************
+// * 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.remoteable;
+
+import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
+
+import java.lang.reflect.*;
+import java.util.*;
+
+/**
+ * @deprecated Internal class.
+ */
+@Deprecated
+public class RemoteableMeta {
+
+	private final Map<Method,RemoteableMethodMeta> methods;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param c The interface class annotated with a {@link Remoteable @Remoteable} annotation (optional).
+	 * @param restUrl The absolute URL of the remote REST interface that implements this proxy interface.
+	 */
+	public RemoteableMeta(Class<?> c, String restUrl) {
+		Remoteable r = getAnnotation(Remoteable.class, c);
+
+		String expose = r == null ? "DECLARED" : r.expose();
+		if (! isOneOf(expose, "ALL", "DECLARED", "ANNOTATED"))
+			throw new RemoteableMetadataException(c, "Invalid value specified for ''expose'' annotation.  Valid values are [ALL,ANNOTATED,DECLARED].");
+
+		Map<Method,RemoteableMethodMeta> _methods = new LinkedHashMap<>();
+		for (Method m : expose.equals("DECLARED") ? c.getDeclaredMethods() : c.getMethods()) {
+			if (isPublic(m)) {
+				RemoteMethod rm = c.getAnnotation(RemoteMethod.class);
+				if (rm != null || ! expose.equals("ANNOTATED"))
+					_methods.put(m, new RemoteableMethodMeta(restUrl, m));
+			}
+		}
+
+		this.methods = unmodifiableMap(_methods);
+	}
+
+	/**
+	 * Returns the metadata about the specified method on this interface proxy.
+	 *
+	 * @param m The method to look up.
+	 * @return Metadata about the method, or <jk>null</jk> if no metadata was found.
+	 */
+	public RemoteableMethodMeta getMethodMeta(Method m) {
+		return methods.get(m);
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextRuntimeException.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteableMetadataException.java
similarity index 63%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextRuntimeException.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteableMetadataException.java
index a98eefd..56ec616 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextRuntimeException.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteableMetadataException.java
@@ -1,53 +1,57 @@
-// ***************************************************************************************************************************
-// * 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 java.text.*;
-
-/**
- * General runtime operation exception that can occur in any of the context classes.
- */
-public final class ContextRuntimeException extends FormattedRuntimeException {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Constructor.
-	 *
-	 * @param cause The cause of this exception.
-	 * @param message The {@link MessageFormat}-style message.
-	 * @param args Optional {@link MessageFormat}-style arguments.
-	 */
-	public ContextRuntimeException(Throwable cause, String message, Object... args) {
-		super(cause, getMessage(cause, message, null), args);
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param message The error message.
-	 * @param args Arguments passed in to the {@code String.format()} method.
-	 */
-	public ContextRuntimeException(String message, Object...args) {
-		this(null, message, args);
-	}
-
-	/**
-	 * Constructor.
-	 *
-	 * @param cause The initial cause of the exception.
-	 */
-	public ContextRuntimeException(Throwable cause) {
-		this(cause, null);
-	}
-}
+// ***************************************************************************************************************************
+// * 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.remoteable;
+
+import java.lang.reflect.*;
+import java.text.*;
+
+import org.apache.juneau.*;
+
+/**
+ * @deprecated Internal class.
+ */
+@Deprecated
+public class RemoteableMetadataException extends FormattedRuntimeException {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param m The interface method that has an invalid definition.
+	 * @param message The {@link MessageFormat}-style message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
+	 */
+	public RemoteableMetadataException(Method m, String message, Object...args) {
+		super(getMessage(m.getDeclaringClass(), m, message), args);
+	}
+
+	/**
+	 * Constructor.
+	 *
+	 * @param c The interface class that has an invalid definition.
+	 * @param message The {@link MessageFormat}-style message.
+	 * @param args Optional {@link MessageFormat}-style arguments.
+	 */
+	public RemoteableMetadataException(Class<?> c, String message, Object...args) {
+		super(getMessage(c, null, message), args);
+	}
+
+	private static final String getMessage(Class<?> c, Method m, String msg) {
+		StringBuilder sb = new StringBuilder("Invalid remoteable definition found on class ").append(c.getName());
+		if (m != null)
+			sb.append(" on method ").append(m.getName());
+		sb.append(". ").append(msg);
+		return sb.toString();
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteableMethodMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteableMethodMeta.java
new file mode 100644
index 0000000..5003feb
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RemoteableMethodMeta.java
@@ -0,0 +1,229 @@
+// ***************************************************************************************************************************
+// * 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.remoteable;
+
+import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
+
+import java.lang.annotation.*;
+import java.lang.reflect.*;
+import java.util.*;
+
+/**
+ * @deprecated Internal class.
+ */
+@Deprecated
+public class RemoteableMethodMeta {
+
+	private final String httpMethod;
+	private final String url;
+	private final RemoteMethodArg[] pathArgs, queryArgs, headerArgs, formDataArgs, requestBeanArgs;
+	private final Integer[] otherArgs;
+	private final Integer bodyArg;
+	private final ReturnValue returnValue;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param restUrl The absolute URL of the REST interface backing the interface proxy.
+	 * @param m The Java method.
+	 */
+	public RemoteableMethodMeta(final String restUrl, Method m) {
+		Builder b = new Builder(restUrl, m);
+		this.httpMethod = b.httpMethod;
+		this.url = b.url;
+		this.pathArgs = b.pathArgs.toArray(new RemoteMethodArg[b.pathArgs.size()]);
+		this.queryArgs = b.queryArgs.toArray(new RemoteMethodArg[b.queryArgs.size()]);
+		this.formDataArgs = b.formDataArgs.toArray(new RemoteMethodArg[b.formDataArgs.size()]);
+		this.headerArgs = b.headerArgs.toArray(new RemoteMethodArg[b.headerArgs.size()]);
+		this.requestBeanArgs = b.requestBeanArgs.toArray(new RemoteMethodArg[b.requestBeanArgs.size()]);
+		this.otherArgs = b.otherArgs.toArray(new Integer[b.otherArgs.size()]);
+		this.bodyArg = b.bodyArg;
+		this.returnValue = b.returnValue;
+	}
+
+	private static final class Builder {
+		String httpMethod, url;
+		List<RemoteMethodArg>
+			pathArgs = new LinkedList<>(),
+			queryArgs = new LinkedList<>(),
+			headerArgs = new LinkedList<>(),
+			formDataArgs = new LinkedList<>(),
+			requestBeanArgs = new LinkedList<>();
+		List<Integer>
+			otherArgs = new LinkedList<>();
+		Integer bodyArg;
+		ReturnValue returnValue;
+
+		Builder(String restUrl, Method m) {
+			Remoteable r = m.getDeclaringClass().getAnnotation(Remoteable.class);
+			RemoteMethod rm = m.getAnnotation(RemoteMethod.class);
+
+			httpMethod = rm == null ? "POST" : rm.httpMethod();
+			if (! isOneOf(httpMethod, "DELETE", "GET", "POST", "PUT"))
+				throw new RemoteableMetadataException(m,
+					"Invalid value specified for @RemoteMethod.httpMethod() annotation.  Valid values are [DELTE,GET,POST,PUT].");
+
+			String path = rm == null || rm.path().isEmpty() ? null : rm.path();
+			String methodPaths = r == null ? "NAME" : r.methodPaths();
+
+			if (! isOneOf(methodPaths, "NAME", "SIGNATURE"))
+				throw new RemoteableMetadataException(m,
+					"Invalid value specified for @Remoteable.methodPaths() annotation.  Valid values are [NAME,SIGNATURE].");
+
+			returnValue = rm == null ? ReturnValue.BODY : rm.returns();
+
+			url =
+				trimSlashes(restUrl)
+				+ '/'
+				+ (path != null ? trimSlashes(path) : urlEncode("NAME".equals(methodPaths) ? m.getName() : getMethodSignature(m)));
+
+			int index = 0;
+			for (Annotation[] aa : m.getParameterAnnotations()) {
+				boolean annotated = false;
+				for (Annotation a : aa) {
+					Class<?> ca = a.annotationType();
+					if (ca == Path.class) {
+						Path p = (Path)a;
+						annotated = pathArgs.add(new RemoteMethodArg(p.name(), p.value(), index, false, p.serializer()));
+					} else if (ca == Query.class) {
+						Query q = (Query)a;
+						annotated = queryArgs.add(new RemoteMethodArg(q.name(), q.value(), index, q.skipIfEmpty(), q.serializer()));
+					} else if (ca == QueryIfNE.class) {
+						QueryIfNE q = (QueryIfNE)a;
+						annotated = queryArgs.add(new RemoteMethodArg(q.name(), q.value(), index, true, q.serializer()));
+					} else if (ca == FormData.class) {
+						FormData f = (FormData)a;
+						annotated = formDataArgs.add(new RemoteMethodArg(f.name(), f.value(), index, f.skipIfEmpty(), f.serializer()));
+					} else if (ca == FormDataIfNE.class) {
+						FormDataIfNE f = (FormDataIfNE)a;
+						annotated = formDataArgs.add(new RemoteMethodArg(f.name(), f.value(), index, true, f.serializer()));
+					} else if (ca == Header.class) {
+						Header h = (Header)a;
+						annotated = headerArgs.add(new RemoteMethodArg(h.name(), h.value(), index, h.skipIfEmpty(), h.serializer()));
+					} else if (ca == HeaderIfNE.class) {
+						HeaderIfNE h = (HeaderIfNE)a;
+						annotated = headerArgs.add(new RemoteMethodArg(h.name(), h.value(), index, true, h.serializer()));
+					} else if (ca == RequestBean.class) {
+						RequestBean rb = (RequestBean)a;
+						annotated = requestBeanArgs.add(new RemoteMethodArg("", "", index, false, rb.serializer()));
+					} else if (ca == Body.class) {
+						annotated = true;
+						if (bodyArg == null)
+							bodyArg = index;
+						else
+							throw new RemoteableMetadataException(m,
+								"Multiple @Body parameters found.  Only one can be specified per Java method.");
+					}
+				}
+				if (! annotated)
+					otherArgs.add(index);
+				index++;
+			}
+
+			if (bodyArg != null && otherArgs.size() > 0)
+				throw new RemoteableMetadataException(m,
+					"@Body and non-annotated parameters found together.  Non-annotated parameters cannot be used when @Body is used.");
+		}
+	}
+
+	/**
+	 * Returns the value of the {@link RemoteMethod#httpMethod() @RemoteMethod.httpMethod()} annotation on this Java method.
+	 *
+	 * @return The value of the annotation, never <jk>null</jk>.
+	 */
+	public String getHttpMethod() {
+		return httpMethod;
+	}
+
+	/**
+	 * Returns the absolute URL of the REST interface invoked by this Java method.
+	 *
+	 * @return The absolute URL of the REST interface, never <jk>null</jk>.
+	 */
+	public String getUrl() {
+		return url;
+	}
+
+	/**
+	 * Returns the {@link Path @Path} annotated arguments on this Java method.
+	 *
+	 * @return A map of {@link Path#value() @Path.value()} names to zero-indexed argument indices.
+	 */
+	public RemoteMethodArg[] getPathArgs() {
+		return pathArgs;
+	}
+
+	/**
+	 * Returns the {@link Query @Query} annotated arguments on this Java method.
+	 *
+	 * @return A map of {@link Query#value() @Query.value()} names to zero-indexed argument indices.
+	 */
+	public RemoteMethodArg[] getQueryArgs() {
+		return queryArgs;
+	}
+
+	/**
+	 * Returns the {@link FormData @FormData} annotated arguments on this Java method.
+	 *
+	 * @return A map of {@link FormData#value() @FormData.value()} names to zero-indexed argument indices.
+	 */
+	public RemoteMethodArg[] getFormDataArgs() {
+		return formDataArgs;
+	}
+
+	/**
+	 * Returns the {@link Header @Header} annotated arguments on this Java method.
+	 *
+	 * @return A map of {@link Header#value() @Header.value()} names to zero-indexed argument indices.
+	 */
+	public RemoteMethodArg[] getHeaderArgs() {
+		return headerArgs;
+	}
+
+	/**
+	 * Returns the {@link RequestBean @RequestBean} annotated arguments on this Java method.
+	 *
+	 * @return A list of zero-indexed argument indices.
+	 */
+	public RemoteMethodArg[] getRequestBeanArgs() {
+		return requestBeanArgs;
+	}
+
+	/**
+	 * Returns the remaining non-annotated arguments on this Java method.
+	 *
+	 * @return A list of zero-indexed argument indices.
+	 */
+	public Integer[] getOtherArgs() {
+		return otherArgs;
+	}
+
+	/**
+	 * Returns the argument annotated with {@link Body @Body}.
+	 *
+	 * @return A index of the argument with the {@link Body @Body} annotation, or <jk>null</jk> if no argument exists.
+	 */
+	public Integer getBodyArg() {
+		return bodyArg;
+	}
+
+	/**
+	 * Returns whether the method returns the HTTP response body or status code.
+	 *
+	 * @return Whether the method returns the HTTP response body or status code.
+	 */
+	public ReturnValue getReturns() {
+		return returnValue;
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RequestBean.java
similarity index 65%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RequestBean.java
index 58d2a6f..b534f1f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/annotation/HtmlLink.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/RequestBean.java
@@ -10,44 +10,35 @@
 // * "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.html.annotation;
+package org.apache.juneau.remoteable;
 
 import static java.lang.annotation.ElementType.*;
 import static java.lang.annotation.RetentionPolicy.*;
 
 import java.lang.annotation.*;
 
-import org.apache.juneau.html.*;
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.urlencoding.*;
 
 /**
- * Used in conjunction with the {@link HtmlSerializer} class to define hyperlinks.
- *
- * <p>
- * This annotation is applied to classes.
- *
- * <p>
- * Annotation that can be used to specify that a class has a URL associated with it.
- *
- * <p>
- * When rendered using the {@link org.apache.juneau.html.HtmlSerializer HtmlSerializer} class, this class will get
- * rendered as a hyperlink like so...
- * <p class='code'>
- * 	<xt>&lt;a</xt> <xa>href</xa>=<xs>'hrefProperty'</xs><xt>&gt;</xt>nameProperty<xt>&lt;/a&gt;</xt>
- * </p>
+ * @deprecated Use {@link org.apache.juneau.http.annotation.Request}
  */
+@Deprecated
 @Documented
-@Target(TYPE)
+@Target(PARAMETER)
 @Retention(RUNTIME)
 @Inherited
-public @interface HtmlLink {
+public @interface RequestBean {
 
 	/**
-	 * The bean property whose value becomes the name in the hyperlink.
+	 * Specifies the {@link HttpPartSerializer} class used for serializing values to strings.
+	 *
+	 * <p>
+	 * The default value defaults to the using the part serializer defined on the client which by default is
+	 * {@link UrlEncodingSerializer}.
+	 *
+	 * <p>
+	 * This annotation is provided to allow values to be custom serialized.
 	 */
-	String nameProperty() default "name";
-
-	/**
-	 * The bean property whose value becomes the url in the hyperlink.
-	 */
-	String uriProperty() default "uri";
+	Class<? extends HttpPartSerializer> serializer() default HttpPartSerializer.Null.class;
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/ReturnValue.java
similarity index 72%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/ReturnValue.java
index 3f60e90..6f837df 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/remoteable/ReturnValue.java
@@ -10,37 +10,17 @@
 // * "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.httppart;
+package org.apache.juneau.remoteable;
 
 /**
- * Represents possible enum values that can be passed to the {@link HttpPartSerializerSession#serialize(HttpPartType, HttpPartSchema, Object)}.
+ * @deprecated
  */
-public enum HttpPartType {
+@Deprecated
+public enum ReturnValue {
 
-	/** An HTTP request body */
+	/** HTTP response body */
 	BODY,
 
-	/** A URI path variable */
-	PATH,
-
-	/** A URI query parameter */
-	QUERY,
-
-	/** A form-data parameter */
-	FORMDATA,
-
-	/** An HTTP request header */
-	HEADER,
-
-	/** An HTTP response header */
-	RESPONSE_HEADER,
-
-	/** An HTTP response body */
-	RESPONSE_BODY,
-
-	/** An HTTP response status code */
-	RESPONSE_STATUS,
-
-	/** A non-standard field */
-	OTHER;
+	/** HTTP status code */
+	HTTP_STATUS;
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
index 582fe14..f12f7f4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializer.java
@@ -166,4 +166,13 @@ public abstract class OutputStreamSerializer extends Serializer {
 				.append("binaryFormat", binaryFormat)
 			);
 	}
+
+	/**
+	 * @deprecated No replacement.
+	 */
+	@SuppressWarnings({ "javadoc", "unused" })
+	@Deprecated
+	public final String serializeToHex(Object o) throws SerializeException {
+		return null;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
index 8e3c885..7457349 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/Serializer.java
@@ -1099,4 +1099,61 @@ public abstract class Serializer extends BeanTraverseContext {
 				.append("listener", listener)
 			);
 	}
+
+	/**
+	 * @deprecated Use {@link #SERIALIZER_addRootType}.
+	 */
+	@Deprecated
+	public static final String SERIALIZER_abridged = SERIALIZER_addRootType;
+
+	/**
+	 * @deprecated Use {@link #SERIALIZER_addBeanTypes}.
+	 */
+	@Deprecated
+	public static final String SERIALIZER_addBeanTypeProperties = SERIALIZER_addBeanTypes;
+
+	/**
+	 * @deprecated Use {@link BeanTraverseContext#BEANTRAVERSE_detectRecursions}.
+	 */
+	@Deprecated
+	public static final String SERIALIZER_detectRecursions = BeanTraverseContext.BEANTRAVERSE_detectRecursions;
+
+	/**
+	 * @deprecated Use {@link BeanTraverseContext#BEANTRAVERSE_ignoreRecursions}.
+	 */
+	@Deprecated
+	public static final String SERIALIZER_ignoreRecursions = BeanTraverseContext.BEANTRAVERSE_ignoreRecursions;
+
+	/**
+	 * @deprecated Use {@link BeanTraverseContext#BEANTRAVERSE_initialDepth}.
+	 */
+	@Deprecated
+	public static final String SERIALIZER_initialDepth = BeanTraverseContext.BEANTRAVERSE_initialDepth;
+
+	/**
+	 * @deprecated Use {@link BeanTraverseContext#BEANTRAVERSE_maxDepth}.
+	 */
+	@Deprecated
+	public static final String SERIALIZER_maxDepth = BeanTraverseContext.BEANTRAVERSE_maxDepth;
+
+	/**
+	 * @deprecated Use {@link BeanTraverseContext#BEANTRAVERSE_maxDepth}.
+	 */
+	@Deprecated
+	public static final String SERIALIZER_maxIndent = BeanTraverseContext.BEANTRAVERSE_maxDepth;
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Deprecated
+	public static final String SERIALIZER_quoteChar = PREFIX + "quoteChar.s";
+
+	/**
+	 * @deprecated Use {@link #getMediaTypeRanges()}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public final MediaType[] getMediaTypes() {
+		return null;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
index 2ea90fa..888a7c8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
@@ -956,4 +956,59 @@ public class SerializerBuilder extends BeanTraverseBuilder {
 	public Serializer build() {
 		return null;
 	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public SerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public SerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public SerializerBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public SerializerBuilder maxIndent(int value) {
+		return set(SERIALIZER_maxIndent, value);
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public SerializerBuilder quoteChar(char value) {
+		return set(SERIALIZER_quoteChar, value);
+	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public SerializerBuilder sq() {
+		return quoteChar('\'');
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
index d2526ad..beefb56 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
@@ -1030,4 +1030,32 @@ public class SerializerGroupBuilder extends BeanTraverseBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated No replacement
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public SerializerGroupBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated No replacement
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public SerializerGroupBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public SerializerGroupBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
index 937becf..b54e192 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
@@ -613,7 +613,8 @@ public abstract class SerializerSession extends BeanTraverseSession {
 	 * @return
 	 * 	<jk>true</jk> if whitespace is added to the output to improve readability.
 	 */
-	public final boolean isUseWhitespace() {
+	// TODO - Make final in 8.0
+	public boolean isUseWhitespace() {
 		return useWhitespace;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java
index ae60142..8ef5c6e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java
@@ -72,7 +72,7 @@ public final class SerializerSessionArgs extends BeanSessionArgs {
 	 * @param useWhitespace
 	 * 	Override the use-whitespace flag on the serializer.
 	 */
-	public SerializerSessionArgs(ObjectMap properties, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, HttpPartSchema schema, Boolean debug, UriContext uriContext, Boolean 	useWhitespace) {
+	public SerializerSessionArgs(ObjectMap properties, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, HttpPartSchema schema, Boolean debug, UriContext uriContext, Boolean useWhitespace) {
 		super(properties, locale, timeZone, mediaType, schema, debug);
 		this.javaMethod = javaMethod;
 		this.uriContext = uriContext;
@@ -147,4 +147,13 @@ public final class SerializerSessionArgs extends BeanSessionArgs {
 		super.properties(properties);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link #SerializerSessionArgs(ObjectMap, Method, Locale, TimeZone, MediaType, HttpPartSchema, Boolean, UriContext, Boolean)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public SerializerSessionArgs(ObjectMap properties, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) {
+		this(properties, javaMethod, locale, timeZone, mediaType, null, null, uriContext, false);
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
index 0eb76f4..2a8b46c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
@@ -61,6 +61,7 @@ public class WriterSerializerBuilder extends SerializerBuilder {
 	 * 	<br>The default is <code>100</code>.
 	 * @return This object (for method chaining).
 	 */
+	@Override
 	public WriterSerializerBuilder maxIndent(int value) {
 		return set(WSERIALIZER_maxIndent, value);
 	}
@@ -81,6 +82,7 @@ public class WriterSerializerBuilder extends SerializerBuilder {
 	 * 	<br>The default is <js>'"'</js>.
 	 * @return This object (for method chaining).
 	 */
+	@Override
 	public WriterSerializerBuilder quoteChar(char value) {
 		return set(WSERIALIZER_quoteChar, value);
 	}
@@ -98,6 +100,7 @@ public class WriterSerializerBuilder extends SerializerBuilder {
 	 *
 	 * @return This object (for method chaining).
 	 */
+	@Override
 	public WriterSerializerBuilder sq() {
 		return quoteChar('\'');
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
index b6afd8f..8ad73fe 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
@@ -631,4 +631,32 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public SoapXmlSerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public SoapXmlSerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@Override
+	@Deprecated
+	public SoapXmlSerializerBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
index 530f863..03f84b7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
@@ -93,7 +93,7 @@ public class SurrogateSwap<T,F> extends PojoSwap<T,F> {
 		try {
 			return (T)unswapMethod.invoke(f);
 		} catch (Exception e) {
-			throw new ParseException(e);
+			throw new ParseException((Throwable)e);
 		}
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarSwap.java
index 8f82cf9..cc14c73 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/CalendarSwap.java
@@ -624,7 +624,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 			c.setTimeZone(in.getTimeZone());
 			return c;
 		} catch (Exception e) {
-			throw new ParseException(e);
+			throw new ParseException((Throwable)e);
 		}
 	}
 
@@ -636,7 +636,7 @@ public class CalendarSwap extends StringSwap<Calendar> {
 			c.setTime(in);
 			return c;
 		} catch (Exception e) {
-			throw new ParseException(e);
+			throw new ParseException((Throwable)e);
 		}
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
index c32f996..63fc454 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
@@ -290,4 +290,13 @@ public class UonParser extends ReaderParser implements HttpPartParser {
 				.append("decodeChars", decodeChars)
 			);
 	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@Override
+	@Deprecated
+	public <T> T parse(HttpPartType partType, String in, ClassMeta<T> type) throws ParseException {
+		return null;
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
index 71528b6..e5e72bd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
@@ -135,7 +135,7 @@ public class UonParserSession extends ReaderParserSession implements HttpPartPar
 		} catch (ParseException e) {
 			throw e;
 		} catch (Exception e) {
-			throw new ParseException(e);
+			throw new ParseException((Throwable)e);
 		}
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
index 01cd187..981e635 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
@@ -14,6 +14,7 @@ package org.apache.juneau.uon;
 
 import org.apache.juneau.*;
 import org.apache.juneau.httppart.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.urlencoding.*;
 
@@ -318,7 +319,7 @@ public class UonSerializer extends WriterSerializer implements HttpPartSerialize
 	 * 	The property store containing all the settings for this object.
 	 */
 	public UonSerializer(PropertyStore ps) {
-		this(ps, "text/uon", null);
+		this(ps, "text/uon", (String)null);
 	}
 
 	/**
@@ -453,4 +454,33 @@ public class UonSerializer extends WriterSerializer implements HttpPartSerialize
 				.append("paramFormat", paramFormat)
 			);
 	}
+
+	/**
+	 * @deprecated Use {@link #UON_addBeanTypes}.
+	 */
+	@Deprecated
+	public static final String UON_addBeanTypeProperties = UON_addBeanTypes;
+
+
+	/**
+	 * @deprecated Use {@link #UonSerializer(PropertyStore, String, String)}.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public UonSerializer(PropertyStore ps, String produces, String...accept) {
+		this(ps, produces, StringUtils.join(accept, ","));
+	}
+
+	/**
+	 * @deprecated Use {@link #serialize(HttpPartType, HttpPartSchema, Object)}
+	 */
+	@Override
+	@Deprecated
+	public String serialize(HttpPartType type, Object value) {
+		try {
+			return serialize(type, null, value);
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
index aa33f0c..efb93f6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
@@ -687,4 +687,32 @@ public class UonSerializerBuilder extends WriterSerializerBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public UonSerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public UonSerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@Override
+	@Deprecated
+	public UonSerializerBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
index 6211598..4975a6c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerSession.java
@@ -332,4 +332,13 @@ public class UonSerializerSession extends WriterSerializerSession implements Htt
 	protected final ParamFormat getParamFormat() {
 		return ctx.getParamFormat();
 	}
+
+	/**
+	 * @deprecated Unused.
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public final boolean isAddBeanTypeProperties() {
+		return isAddBeanTypes();
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
index 6e71028..5632c8d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.urlencoding;
 
 import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.uon.*;
 
@@ -256,7 +257,7 @@ public class UrlEncodingSerializer extends UonSerializer {
 	 * 	The property store containing all the settings for this object.
 	 */
 	public UrlEncodingSerializer(PropertyStore ps) {
-		this(ps, "application/x-www-form-urlencoded", null);
+		this(ps, "application/x-www-form-urlencoded", (String)null);
 	}
 
 	/**
@@ -350,4 +351,13 @@ public class UrlEncodingSerializer extends UonSerializer {
 				.append("expandedParams", expandedParams)
 			);
 	}
+
+	/**
+	 * @deprecated Use {@link #UrlEncodingSerializer(PropertyStore, String, String)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public UrlEncodingSerializer(PropertyStore ps, String produces, String...accept) {
+		this(ps, produces, StringUtils.join(accept, ","));
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
index c2d89aa..df3e2a2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
@@ -676,4 +676,32 @@ public class UrlEncodingSerializerBuilder extends UonSerializerBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public UrlEncodingSerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public UrlEncodingSerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@Override
+	@Deprecated
+	public UrlEncodingSerializerBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/AList.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/AList.java
index 441cad3..7d03c0d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/AList.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/AList.java
@@ -26,9 +26,12 @@ import java.util.*;
  *
  * @param <T> The entry type.
  */
-@SuppressWarnings({"serial","unchecked"})
+@SuppressWarnings({"unchecked"})
 public final class AList<T> extends LinkedList<T> {
 
+	// TODO - Change to 1L in 8.0
+	private static final long serialVersionUID = 2165760898071759212L;
+
 	/**
 	 * Convenience method for creating a list of objects.
 	 *
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/AMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/AMap.java
index db85ecd..52c2a01 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/AMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/AMap.java
@@ -28,9 +28,11 @@ import java.util.*;
  * @param <K> The key type.
  * @param <V> The value type.
  */
-@SuppressWarnings("serial")
 public final class AMap<K,V> extends LinkedHashMap<K,V> {
 
+	// TODO - Change to 1L in 8.0
+	private static final long serialVersionUID = 7344180601810042208L;
+
 	/**
 	 * Creates an empty map.
 	 *
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ASet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ASet.java
index b1efd99..6cdd32c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ASet.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ASet.java
@@ -26,9 +26,12 @@ import java.util.*;
  *
  * @param <T> The entry type.
  */
-@SuppressWarnings({"serial","unchecked"})
+@SuppressWarnings({"unchecked"})
 public final class ASet<T> extends LinkedHashSet<T> {
 
+	// TODO - Change to 1L in 8.0
+	private static final long serialVersionUID = -7789361749029840633L;
+
 	/**
 	 * Convenience method for creating a list of objects.
 	 *
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
index 82f3d14..553e56e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ZipFileList.java
@@ -28,10 +28,12 @@ import org.apache.juneau.http.annotation.*;
  * Generally associated with <code>RestServlets</code> using the <code>responseHandlers</code> annotation so that
  * REST methods can easily create ZIP file responses by simply returning instances of this class.
  */
-@SuppressWarnings("serial")
 @Response
 public class ZipFileList extends LinkedList<ZipFileList.ZipFileEntry> implements Streamable {
 
+	// TODO - Change to 1L in 8.0
+	private static final long serialVersionUID = 2694299794576160344L;
+
 	/**
 	 * The name of the zip file.
 	 */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlReader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlReader.java
index 7cc9759..5f550f6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlReader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlReader.java
@@ -64,7 +64,7 @@ public final class XmlReader implements XMLStreamReader, Positionable {
 		} catch (Error e) {
 			throw new ParseException(e.getLocalizedMessage());
 		} catch (XMLStreamException e) {
-			throw new ParseException(e);
+			throw new ParseException((Throwable)e);
 		}
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index 5827f15..0e9c318 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.xml;
 
 import org.apache.juneau.*;
+import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.xmlschema.*;
@@ -470,7 +471,7 @@ public class XmlSerializer extends WriterSerializer {
 	 * 	The property store containing all the settings for this object.
 	 */
 	public XmlSerializer(PropertyStore ps) {
-		this(ps, "text/xml", null);
+		this(ps, "text/xml", (String)null);
 	}
 
 	/**
@@ -643,4 +644,19 @@ public class XmlSerializer extends WriterSerializer {
 				.append("addBeanTypes", addBeanTypes)
 			);
 	}
+
+	/**
+	 * @deprecated Use {@link #XML_addBeanTypes}
+	 */
+	@Deprecated
+	public static final String XML_addBeanTypeProperties = XML_addBeanTypes;
+
+	/**
+	 * @deprecated Use {@link #XmlSerializer(PropertyStore, String, String)}
+	 */
+	@SuppressWarnings("javadoc")
+	@Deprecated
+	public XmlSerializer(PropertyStore ps, String produces, String...accept) {
+		this(ps, produces, StringUtils.join(accept, ","));
+	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
index 0f661c9..b97075e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
@@ -784,4 +784,32 @@ public class XmlSerializerBuilder extends WriterSerializerBuilder {
 		super.apply(copyFrom);
 		return this;
 	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public XmlSerializerBuilder abridged(boolean value) {
+		return this;
+	}
+
+	/**
+	 * @deprecated Use {@link Serializer#SERIALIZER_addRootType}.
+	 */
+	@Override
+	@Deprecated
+	public XmlSerializerBuilder abridged() {
+		return this;
+	}
+
+	/**
+	 * @deprecated {@link #addBeanTypes(boolean)}
+	 */
+	@Override
+	@Deprecated
+	public XmlSerializerBuilder addBeanTypeProperties(boolean value) {
+		this.addBeanTypes(value);
+		return this;
+	}
 }
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlClassMeta.java
similarity index 67%
copy from juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
copy to juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlClassMeta.java
index 3f60e90..04d4ac9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartType.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlClassMeta.java
@@ -1,46 +1,45 @@
-// ***************************************************************************************************************************
-// * 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.httppart;
-
-/**
- * Represents possible enum values that can be passed to the {@link HttpPartSerializerSession#serialize(HttpPartType, HttpPartSchema, Object)}.
- */
-public enum HttpPartType {
-
-	/** An HTTP request body */
-	BODY,
-
-	/** A URI path variable */
-	PATH,
-
-	/** A URI query parameter */
-	QUERY,
-
-	/** A form-data parameter */
... 3054 lines suppressed ...


Mime
View raw message