You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2020/10/20 17:04:21 UTC

[juneau] branch master updated: @Marshalled annotation.

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 99d1b1c  @Marshalled annotation.
99d1b1c is described below

commit 99d1b1cb502f0d5dec9c15d24894175770995353
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Tue Oct 20 13:04:14 2020 -0400

    @Marshalled annotation.
---
 .../apache/juneau/BeanConfigAnnotationTest.java    |   4 -
 .../juneau/jsonschema/JsonSchemaGeneratorTest.java |  14 +-
 .../juneau/testutils/pojos/TestEnumToString.java   |   7 +
 .../org/apache/juneau/jena/RdfParserBuilder.java   |   4 +-
 .../apache/juneau/jena/RdfSerializerBuilder.java   |   4 +-
 .../main/java/org/apache/juneau/BeanContext.java   |  98 +------------
 .../java/org/apache/juneau/BeanContextBuilder.java |  55 ++++----
 .../main/java/org/apache/juneau/BeanFilter.java    |  24 +++-
 .../java/org/apache/juneau/BeanFilterBuilder.java  |  35 ++++-
 .../main/java/org/apache/juneau/BeanSession.java   |  11 --
 .../org/apache/juneau/BeanTraverseBuilder.java     |   4 +-
 .../src/main/java/org/apache/juneau/ClassMeta.java |  70 +++++-----
 .../src/main/java/org/apache/juneau/Context.java   |  11 ++
 .../java/org/apache/juneau/MarshalledFilter.java   |  80 +++++++++++
 .../org/apache/juneau/MarshalledFilterBuilder.java |  90 ++++++++++++
 .../src/main/java/org/apache/juneau/Session.java   |  11 ++
 .../java/org/apache/juneau/annotation/Bean.java    |  54 ++++++++
 .../apache/juneau/annotation/BeanAnnotation.java   |  34 +++++
 .../org/apache/juneau/annotation/BeanConfig.java   |  86 ++----------
 .../apache/juneau/annotation/BeanConfigApply.java  |  16 +--
 .../org/apache/juneau/annotation/Marshalled.java   | 154 +++++++++++++++++++++
 .../juneau/annotation/MarshalledAnnotation.java    |  84 +++++++++++
 .../org/apache/juneau/csv/CsvParserBuilder.java    |   4 +-
 .../apache/juneau/csv/CsvSerializerBuilder.java    |   4 +-
 .../juneau/html/HtmlDocSerializerBuilder.java      |   4 +-
 .../org/apache/juneau/html/HtmlParserBuilder.java  |   4 +-
 .../juneau/html/HtmlSchemaSerializerBuilder.java   |   6 +-
 .../apache/juneau/html/HtmlSerializerBuilder.java  |   4 +-
 .../html/HtmlStrippedDocSerializerBuilder.java     |   4 +-
 .../org/apache/juneau/http/annotation/Body.java    |  18 +--
 .../apache/juneau/http/annotation/FormData.java    |   8 +-
 .../org/apache/juneau/http/annotation/Header.java  |   8 +-
 .../org/apache/juneau/http/annotation/Path.java    |   7 +-
 .../org/apache/juneau/http/annotation/Query.java   |   7 +-
 .../apache/juneau/http/annotation/Response.java    |  19 +--
 .../org/apache/juneau/jso/JsoParserBuilder.java    |   4 +-
 .../apache/juneau/jso/JsoSerializerBuilder.java    |   4 +-
 .../org/apache/juneau/json/JsonParserBuilder.java  |   4 +-
 .../juneau/json/JsonSchemaSerializerBuilder.java   |   6 +-
 .../apache/juneau/json/JsonSerializerBuilder.java  |   4 +-
 .../juneau/json/SimpleJsonParserBuilder.java       |   4 +-
 .../juneau/json/SimpleJsonSerializerBuilder.java   |   4 +-
 .../juneau/jsonschema/JsonSchemaGenerator.java     |   2 +-
 .../jsonschema/JsonSchemaGeneratorBuilder.java     |   6 +-
 .../jsonschema/annotation/JsonSchemaConfig.java    |   2 +-
 .../juneau/msgpack/MsgPackParserBuilder.java       |   4 +-
 .../juneau/msgpack/MsgPackSerializerBuilder.java   |   4 +-
 .../apache/juneau/oapi/OpenApiParserBuilder.java   |   4 +-
 .../juneau/oapi/OpenApiSerializerBuilder.java      |   4 +-
 .../juneau/parser/InputStreamParserBuilder.java    |   4 +-
 .../org/apache/juneau/parser/ParserBuilder.java    |   4 +-
 .../apache/juneau/parser/ParserGroupBuilder.java   |   4 +-
 .../apache/juneau/parser/ReaderParserBuilder.java  |   4 +-
 .../juneau/plaintext/PlainTextParserBuilder.java   |   4 +-
 .../plaintext/PlainTextSerializerBuilder.java      |   4 +-
 .../serializer/OutputStreamSerializerBuilder.java  |   4 +-
 .../juneau/serializer/SerializerBuilder.java       |   4 +-
 .../juneau/serializer/SerializerGroupBuilder.java  |   4 +-
 .../juneau/serializer/WriterSerializerBuilder.java |   4 +-
 .../juneau/soap/SoapXmlSerializerBuilder.java      |   4 +-
 .../org/apache/juneau/uon/UonParserBuilder.java    |   4 +-
 .../apache/juneau/uon/UonSerializerBuilder.java    |   4 +-
 .../urlencoding/UrlEncodingParserBuilder.java      |   4 +-
 .../urlencoding/UrlEncodingSerializerBuilder.java  |   4 +-
 .../org/apache/juneau/xml/XmlParserBuilder.java    |   4 +-
 .../apache/juneau/xml/XmlSerializerBuilder.java    |   4 +-
 juneau-doc/docs/ReleaseNotes/9.0.0.html            |  50 +++++++
 .../juneau/examples/rest/dto/AtomFeedResource.java |   2 +-
 .../examples/rest/dto/JsonSchemaResource.java      |   2 +-
 .../org/apache/juneau/rest/RestContextBuilder.java |   4 +-
 .../juneau/rest/RestMethodContextBuilder.java      |   4 +-
 71 files changed, 824 insertions(+), 409 deletions(-)

diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanConfigAnnotationTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanConfigAnnotationTest.java
index 0028d45..7a91146 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanConfigAnnotationTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/BeanConfigAnnotationTest.java
@@ -125,7 +125,6 @@ public class BeanConfigAnnotationTest {
 		bpwo="A1:$X{qux}",
 		debug="$X{true}",
 		detectRecursions="$X{true}",
-		examples="$X{A1}: {foo:1}",
 		fluentSetters="$X{true}",
 		ignoreInvocationExceptionsOnGetters="$X{true}",
 		ignoreInvocationExceptionsOnSetters="$X{true}",
@@ -175,7 +174,6 @@ public class BeanConfigAnnotationTest {
 		check("foo", bc.getBeanTypePropertyName());
 		check("true", bc.isDebug());
 		check("true", bc.isDetectRecursions());
-		check("A1={foo:1}", bc.getExamples());
 		check("true", bc.isFluentSetters());
 		check("true", bc.isIgnoreInvocationExceptionsOnGetters());
 		check("true", bc.isIgnoreInvocationExceptionsOnSetters());
@@ -224,7 +222,6 @@ public class BeanConfigAnnotationTest {
 		check("_type", bc.getBeanTypePropertyName());
 		check("false", bc.isDebug());
 		check("false", bc.isDetectRecursions());
-		check("", bc.getExamples());
 		check("false", bc.isFluentSetters());
 		check("false", bc.isIgnoreInvocationExceptionsOnGetters());
 		check("false", bc.isIgnoreInvocationExceptionsOnSetters());
@@ -271,7 +268,6 @@ public class BeanConfigAnnotationTest {
 		check("_type", bc.getBeanTypePropertyName());
 		check("false", bc.isDebug());
 		check("false", bc.isDetectRecursions());
-		check("", bc.getExamples());
 		check("false", bc.isFluentSetters());
 		check("false", bc.isIgnoreInvocationExceptionsOnGetters());
 		check("false", bc.isIgnoreInvocationExceptionsOnSetters());
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
index 43ea903..547fa50 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
@@ -916,13 +916,11 @@ public class JsonSchemaGeneratorTest {
 	@Test
 	public void addExample_STRING_wDefault() throws Exception {
 		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("string")
-			.exampleJson(String.class, "bar1")
-			.example(StringBuilder.class, new StringBuilder("bar2"))
+			.example(StringBuilder.class, new StringBuilder("foo"))
 			.example(Character.class, 'b')
 			.example(char.class, 'c')
 			.build().createSession();
-		assertObject(s.getSchema(String.class)).json().is("{type:'string','x-example':'bar1'}");
-		assertObject(s.getSchema(StringBuilder.class)).json().is("{type:'string','x-example':'bar2'}");
+		assertObject(s.getSchema(StringBuilder.class)).json().is("{type:'string','x-example':'foo'}");
 		assertObject(s.getSchema(Character.class)).json().is("{type:'string','x-example':'b'}");
 		assertObject(s.getSchema(char.class)).json().is("{type:'string','x-example':'c'}");
 	}
@@ -939,13 +937,11 @@ public class JsonSchemaGeneratorTest {
 	@Test
 	public void addExample_STRING_2darray_wDefault() throws Exception {
 		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().addExamplesTo("string")
-			.exampleJson(String.class, "bar1")
-			.example(StringBuilder.class, new StringBuilder("bar2"))
+			.example(StringBuilder.class, new StringBuilder("foo"))
 			.example(Character.class, 'b')
 			.example(char.class, 'c')
 			.build().createSession();
-		assertObject(s.getSchema(String[][].class)).json().is("{type:'array',items:{type:'array',items:{type:'string','x-example':'bar1'}}}");
-		assertObject(s.getSchema(StringBuilder[][].class)).json().is("{type:'array',items:{type:'array',items:{type:'string','x-example':'bar2'}}}");
+		assertObject(s.getSchema(StringBuilder[][].class)).json().is("{type:'array',items:{type:'array',items:{type:'string','x-example':'foo'}}}");
 		assertObject(s.getSchema(Character[][].class)).json().is("{type:'array',items:{type:'array',items:{type:'string','x-example':'b'}}}");
 		assertObject(s.getSchema(char[][].class)).json().is("{type:'array',items:{type:'array',items:{type:'string','x-example':'c'}}}");
 	}
@@ -980,7 +976,7 @@ public class JsonSchemaGeneratorTest {
 
 	@Test
 	public void addExample_ENUM_wDefault_useEnumNames() throws Exception {
-		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useEnumNames().addExamplesTo("enum").example(TestEnumToString.class, TestEnumToString.TWO).build().createSession();
+		JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().useEnumNames().addExamplesTo("enum").example(TestEnumToString.class, "'TWO'").build().createSession();
 		assertObject(s.getSchema(TestEnumToString.class)).json().is("{type:'string','enum':['ONE','TWO','THREE'],'x-example':'TWO'}");
 	}
 
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/testutils/pojos/TestEnumToString.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/testutils/pojos/TestEnumToString.java
index 66b224d..e6cb5f3 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/testutils/pojos/TestEnumToString.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/testutils/pojos/TestEnumToString.java
@@ -22,6 +22,13 @@ public enum TestEnumToString {
 		this.val = val;
 	}
 
+	public static TestEnumToString fromString(String val) {
+		for (TestEnumToString e : values())
+			if (e.val.equals(val))
+				return e;
+		return null;
+	}
+
 	@Override
 	public String toString() {
 		return val;
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
index fd59882..f038c44 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
@@ -1057,8 +1057,8 @@ public class RdfParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> RdfParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> RdfParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
index f5efaaf..d0aeb57 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
@@ -1217,8 +1217,8 @@ public class RdfSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> RdfSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> RdfSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 7daec07..fd3fe9c 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
@@ -1096,64 +1096,6 @@ public class BeanContext extends Context implements MetaProvider {
 	public static final String BEAN_typePropertyName = PREFIX + ".typePropertyName.s";
 
 	/**
-	 * Configuration property:  POJO examples.
-	 *
-	 * <h5 class='section'>Property:</h5>
-	 * <ul class='spaced-list'>
-	 * 	<li><b>ID:</b>  {@link org.apache.juneau.BeanContext#BEAN_examples BEAN_examples}
-	 * 	<li><b>Name:</b>  <js>"BeanContext.examples.smo"</js>
-	 * 	<li><b>Data type:</b>  <c>Map&lt;String,Object&gt;</c>
-	 * 	<li><b>Default:</b>  <c>{}</c>
-	 * 	<li><b>Session property:</b>  <jk>false</jk>
-	 * 	<li><b>Annotations:</b>
-	 * 		<ul>
-	 * 			<li class='ja'>{@link org.apache.juneau.annotation.Example}
-	 * 			<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#example()}
-	 * 			<li class='ja'>{@link org.apache.juneau.annotation.BeanConfig#examples()}
-	 * 		</ul>
-	 * 	<li><b>Methods:</b>
-	 * 		<ul>
-	 * 			<li class='jm'>{@link org.apache.juneau.BeanContextBuilder#example(Class,Object)}
-	 * 		</ul>
-	 * </ul>
-	 *
-	 * <h5 class='section'>Description:</h5>
-	 *
-	 * <p>
-	 * Specifies an example of the specified class.
-	 *
-	 * <p>
-	 * Examples are used in cases such as POJO examples in Swagger documents.
-	 *
-	 * <p>
-	 * Setting applies to specified class and all subclasses.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jc>// Create a serializer that excludes the 'foo' and 'bar' properties on the MyBean class.</jc>
-	 * 	WriterSerializer s = JsonSerializer
-	 * 		.<jsm>create</jsm>()
-	 * 		.example(MyBean.<jk>class</jk>, <jk>new</jk> MyBean().foo(<js>"foo"</js>).bar(123))
-	 * 		.build();
-	 *
-	 * 	<jc>// Same, but use property.</jc>
-	 * 	WriterSerializer s = JsonSerializer
-	 * 		.<jsm>create</jsm>()
-	 * 		.addTo(<jsf>BEAN_examples</jsf>, MyBean.<jk>class</jk>.getName(), <jk>new</jk> MyBean().foo(<js>"foo"</js>).bar(123))
-	 * 		.build();
-	 * </p>
-	 *
-	 * <p>
-	 * POJO examples can also be defined on classes via the following:
-	 * <ul class='spaced-list'>
-	 * 	<li>A static field annotated with {@link Example @Example}.
-	 * 	<li>A static method annotated with {@link Example @Example} with zero arguments or one {@link BeanSession} argument.
-	 * 	<li>A static method with name <c>example</c> with no arguments or one {@link BeanSession} argument.
-	 * </ul>
-	 */
-	public static final String BEAN_examples = PREFIX + ".examples.smo";
-
-	/**
 	 * Configuration property:  Find fluent setters.
 	 *
 	 * <h5 class='section'>Property:</h5>
@@ -2242,7 +2184,6 @@ public class BeanContext extends Context implements MetaProvider {
 	private final List<Class<?>> beanDictionaryClasses;
 	private final String[] notBeanPackageNames, notBeanPackagePrefixes;
 	private final PojoSwap<?,?>[] swaps;
-	private final Map<String,?> examples;
 	private final BeanRegistry beanRegistry;
 	private final Map<String,ClassInfo> implClasses;
 	private final PropertyNamer propertyNamer;
@@ -2355,8 +2296,6 @@ public class BeanContext extends Context implements MetaProvider {
 		}
 		swaps = lpf.toArray(new PojoSwap[lpf.size()]);
 
-		examples = getMapProperty(BEAN_examples, Object.class);
-
 		AMap<String,ClassInfo> icm = AMap.of();
 		for (Map.Entry<String,Class<?>> e : getClassMapProperty(BEAN_implClasses).entrySet())
 			icm.put(e.getKey(), ClassInfo.of(e.getValue()));
@@ -2364,8 +2303,8 @@ public class BeanContext extends Context implements MetaProvider {
 
 		if (! cmCacheCache.containsKey(beanHashCode)) {
 			ConcurrentHashMap<Class,ClassMeta> cm = new ConcurrentHashMap<>();
-			cm.putIfAbsent(String.class, new ClassMeta(String.class, this, null, findPojoSwaps(String.class), findChildPojoSwaps(String.class), findExample(String.class)));
-			cm.putIfAbsent(Object.class, new ClassMeta(Object.class, this, null, findPojoSwaps(Object.class), findChildPojoSwaps(Object.class), findExample(Object.class)));
+			cm.putIfAbsent(String.class, new ClassMeta(String.class, this, null, findPojoSwaps(String.class), findChildPojoSwaps(String.class)));
+			cm.putIfAbsent(Object.class, new ClassMeta(Object.class, this, null, findPojoSwaps(Object.class), findChildPojoSwaps(Object.class)));
 			cmCacheCache.putIfAbsent(beanHashCode, cm);
 		}
 		cmCache = cmCacheCache.get(beanHashCode);
@@ -2582,7 +2521,7 @@ public class BeanContext extends Context implements MetaProvider {
 				// Make sure someone didn't already set it while this thread was blocked.
 				cm = cmCache.get(type);
 				if (cm == null)
-					cm = new ClassMeta<>(type, this, findImplClass(type), findPojoSwaps(type), findChildPojoSwaps(type), findExample(type));
+					cm = new ClassMeta<>(type, this, findImplClass(type), findPojoSwaps(type), findChildPojoSwaps(type));
 			}
 		}
 		if (waitForInit)
@@ -2906,26 +2845,6 @@ public class BeanContext extends Context implements MetaProvider {
 		return null;
 	}
 
-	private final Object findExample(Class<?> c) {
-		if (c != null) {
-			Object o = examples.get(c.getName());
-			if (o != null)
-				return o;
-			o = examples.get(c.getSimpleName());
-			if (o != null)
-				return o;
-			Class<?> c2 = findImplClass(c);
-			if (c2 == null)
-				return null;
-			o = examples.get(c2.getName());
-			if (o != null)
-				return o;
-			o = examples.get(c2.getSimpleName());
-			return o;
-		}
-		return null;
-	}
-
 	/**
 	 * Checks whether a class has a {@link PojoSwap} associated with it in this bean context.
 	 *
@@ -3602,17 +3521,6 @@ public class BeanContext extends Context implements MetaProvider {
 	}
 
 	/**
-	 * POJO examples.
-	 *
-	 * @see #BEAN_examples
-	 * @return
-	 * 	A map of POJO examples keyed by class name.
-	 */
-	protected final Map<String,?> getExamples() {
-		return examples;
-	}
-
-	/**
 	 * Find fluent setters.
 	 *
 	 * <h5 class='section'>Description:</h5>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
index a89ff1f..6ce6124 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
@@ -25,7 +25,6 @@ import org.apache.juneau.annotation.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.marshall.*;
-import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
 import org.apache.juneau.transform.*;
@@ -1642,7 +1641,7 @@ public class BeanContextBuilder extends ContextBuilder {
 	}
 
 	/**
-	 * <i><l>BeanContext</l> configuration property:&emsp;</i>  POJO example.
+	 * POJO example.
 	 *
 	 * <p>
 	 * Specifies an example of the specified class.
@@ -1650,47 +1649,47 @@ public class BeanContextBuilder extends ContextBuilder {
 	 * <p>
 	 * Examples are used in cases such as POJO examples in Swagger documents.
 	 *
-	 * <p>
-	 * Setting applies to specified class and all subclasses.
-	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode w800'>
 	 * 	<jc>// Create a serializer that excludes the 'foo' and 'bar' properties on the MyBean class.</jc>
-	 * 	WriterSerializer s = JsonSerializer
+	 * 	WriterSerializer <jv>serializer</jv> = JsonSerializer
 	 * 		.<jsm>create</jsm>()
 	 * 		.example(MyBean.<jk>class</jk>, <jk>new</jk> MyBean().foo(<js>"foo"</js>).bar(123))
 	 * 		.build();
-	 *
-	 * 	<jc>// Same, but use property.</jc>
-	 * 	WriterSerializer s = JsonSerializer
-	 * 		.<jsm>create</jsm>()
-	 * 		.addTo(<jsf>BEAN_examples</jsf>, MyBean.<jk>class</jk>.getName(), <jk>new</jk> MyBean().foo(<js>"foo"</js>).bar(123))
-	 * 		.build();
+	 * </p>
+	 * 
+	 * <p>
+	 * This is a shorthand method for the following code:
+	 * <p class='bcode w800'>
+	 * 		<jv>builder</jv>.annotations(<jk>new</jk> MarshalledAnnotation().onClass(<jv>pojoClass</jv>).example(SimpleJson.<jsf>DEFAULT</jsf>.toString(<jv>o</jv>)))
 	 * </p>
 	 *
+	 * <ul class='notes'>
+	 * 	<li>Using this method assumes the serialized form of the object is the same as that produced
+	 * 		by the default serializer.  This may not be true based on settings or swaps on the constructed serializer.
+	 * </ul>
+	 * 
 	 * <p>
 	 * POJO examples can also be defined on classes via the following:
 	 * <ul class='spaced-list'>
+	 * 	<li>The {@link Marshalled#example()} annotation on the class itself.
 	 * 	<li>A static field annotated with {@link Example @Example}.
 	 * 	<li>A static method annotated with {@link Example @Example} with zero arguments or one {@link BeanSession} argument.
 	 * 	<li>A static method with name <c>example</c> with no arguments or one {@link BeanSession} argument.
 	 * </ul>
 	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link BeanContext#BEAN_examples}
-	 * </ul>
-	 *
 	 * @param pojoClass The POJO class.
-	 * @param o An instance of the POJO class used for examples.
+	 * @param o
+	 * 	An instance of the POJO class used for examples.
 	 * @return This object (for method chaining).
 	 */
 	@FluentSetter
 	public <T> BeanContextBuilder example(Class<T> pojoClass, T o) {
-		return putTo(BEAN_examples, pojoClass.getName(), o);
+		return annotations(new MarshalledAnnotation().onClass(pojoClass).example(SimpleJson.DEFAULT.toString(o)));
 	}
 
 	/**
-	 * <i><l>BeanContext</l> configuration property:&emsp;</i>  POJO example.
+	 * POJO example.
 	 *
 	 * <p>
 	 * Specifies an example in JSON of the specified class.
@@ -1704,13 +1703,19 @@ public class BeanContextBuilder extends ContextBuilder {
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode w800'>
 	 * 	<jc>// Create a serializer that excludes the 'foo' and 'bar' properties on the MyBean class.</jc>
-	 * 	WriterSerializer s = JsonSerializer
+	 * 	WriterSerializer <jv>serializer</jv> = JsonSerializer
 	 * 		.<jsm>create</jsm>()
 	 * 		.example(MyBean.<jk>class</jk>, <js>"{foo:'bar'}"</js>)
 	 * 		.build();
 	 * </p>
 	 *
 	 * <p>
+	 * This is a shorthand method for the following code:
+	 * <p class='bcode w800'>
+	 * 		<jv>builder</jv>.annotations(<jk>new</jk> MarshalledAnnotation().onClass(<jv>pojoClass</jv>).example(<jv>json</jv>))
+	 * </p>
+	 *
+	 * <p>
 	 * POJO examples can also be defined on classes via the following:
 	 * <ul class='spaced-list'>
 	 * 	<li>A static field annotated with {@link Example @Example}.
@@ -1719,7 +1724,7 @@ public class BeanContextBuilder extends ContextBuilder {
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link BeanContext#BEAN_examples}
+	 * 	<li class='ja'>{@link Marshalled#example()}
 	 * </ul>
 	 *
 	 * @param <T> The POJO class type.
@@ -1728,12 +1733,8 @@ public class BeanContextBuilder extends ContextBuilder {
 	 * @return This object (for method chaining).
 	 */
 	@FluentSetter
-	public <T> BeanContextBuilder exampleJson(Class<T> pojoClass, String json) {
-		try {
-			return putTo(BEAN_examples, pojoClass.getName(), SimpleJson.DEFAULT.read(json, pojoClass));
-		} catch (ParseException e) {
-			throw new RuntimeException(e);
-		}
+	public <T> BeanContextBuilder example(Class<T> pojoClass, String json) {
+		return annotations(new MarshalledAnnotation().onClass(pojoClass).example(json));
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
index c66802e..a93a50f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
@@ -38,9 +38,9 @@ public final class BeanFilter {
 	private final Class<?> beanClass;
 	private final Set<String> bpi, bpx, bpro, bpwo;
 	private final PropertyNamer propertyNamer;
-	private final Class<?> interfaceClass, stopClass;
+	private final Class<?> implClass, interfaceClass, stopClass;
 	private final boolean sortProperties, fluentSetters;
-	private final String typeName;
+	private final String typeName, example;
 	private final Class<?>[] beanDictionary;
 	@SuppressWarnings("rawtypes")
 	private final BeanInterceptor interceptor;
@@ -55,6 +55,8 @@ public final class BeanFilter {
 		this.bpx = new LinkedHashSet<>(builder.bpx);
 		this.bpro = new LinkedHashSet<>(builder.bpro);
 		this.bpwo = new LinkedHashSet<>(builder.bpwo);
+		this.example = builder.example;
+		this.implClass = builder.implClass;
 		this.interfaceClass = builder.interfaceClass;
 		this.stopClass = builder.stopClass;
 		this.sortProperties = builder.sortProperties;
@@ -178,6 +180,15 @@ public final class BeanFilter {
 	}
 
 	/**
+	 * Returns the implementation class associated with this class.
+	 *
+	 * @return The implementation class associated with this class, or <jk>null</jk> if no implementation class is associated.
+	 */
+	public Class<?> getImplClass() {
+		return implClass;
+	}
+
+	/**
 	 * Returns the interface class associated with this class.
 	 *
 	 * @return The interface class associated with this class, or <jk>null</jk> if no interface class is associated.
@@ -196,6 +207,15 @@ public final class BeanFilter {
 	}
 
 	/**
+	 * Returns the example associated with this class.
+	 *
+	 * @return The example associated with this class, or <jk>null</jk> if no example is associated.
+	 */
+	public String getExample() {
+		return example;
+	}
+
+	/**
 	 * Calls the {@link BeanInterceptor#readProperty(Object, String, Object)} method on the registered property filters.
 	 *
 	 * @param bean The bean from which the property was read.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
index a13844d..576ef1b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilterBuilder.java
@@ -30,13 +30,13 @@ import org.apache.juneau.transform.*;
 public class BeanFilterBuilder {
 
 	Class<?> beanClass;
-	String typeName;
+	String typeName, example;
 	ASet<String>
 		bpi = ASet.of(),
 		bpx = ASet.of(),
 		bpro = ASet.of(),
 		bpwo = ASet.of();
-	Class<?> interfaceClass, stopClass;
+	Class<?> implClass, interfaceClass, stopClass;
 	boolean sortProperties, fluentSetters;
 	Object propertyNamer;
 	List<Class<?>> dictionary;
@@ -96,6 +96,12 @@ public class BeanFilterBuilder {
 
 			if (b.interceptor() != BeanInterceptor.Default.class)
 				interceptor(b.interceptor());
+
+			if (b.implClass() != Null.class)
+				implClass(b.implClass());
+
+			if (! b.example().isEmpty())
+				example(b.example());
 		}
 		return this;
 	}
@@ -138,7 +144,18 @@ public class BeanFilterBuilder {
 	}
 
 	/**
-	 * Configuration property:  Bean interface class.
+	 * Bean implementation class.
+	 *
+	 * @param value The new value for this setting.
+	 * @return This object (for method chaining).
+	 */
+	public BeanFilterBuilder implClass(Class<?> value) {
+		this.implClass = value;
+		return this;
+	}
+
+	/**
+	 * Bean interface class.
 	 *
 	 * Identifies a class to be used as the interface class for this and all subclasses.
 	 *
@@ -633,6 +650,18 @@ public class BeanFilterBuilder {
 	}
 
 	/**
+	 * Example.
+	 *
+	 * @param value
+	 * 	The new value for this property.
+	 * @return This object (for method chaining).
+	 */
+	public BeanFilterBuilder example(String value) {
+		this.example = value;
+		return this;
+	}
+
+	/**
 	 * Configuration property:  Bean interceptor.
 	 *
 	 * <p>
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 5710b9a..2e22a36 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
@@ -1298,17 +1298,6 @@ public class BeanSession extends Session {
 	}
 
 	/**
-	 * Configuration property:  POJO examples.
-	 *
-	 * @see BeanContext#BEAN_examples
-	 * @return
-	 * 	A map of POJO examples keyed by class name.
-	 */
-	protected final Map<String,?> getExamples() {
-		return ctx.getExamples();
-	}
-
-	/**
 	 * Configuration property:  Find fluent setters.
 	 *
 	 * <h5 class='section'>Description:</h5>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
index fd43aca..f94aaea 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
@@ -499,8 +499,8 @@ public class BeanTraverseBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> BeanTraverseBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> BeanTraverseBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 2a955f8..c64a3a3 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
@@ -32,7 +32,6 @@ import java.util.concurrent.locks.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.http.*;
-import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.transform.*;
@@ -108,7 +107,7 @@ public final class ClassMeta<T> implements Type {
 	private final InvocationHandler invocationHandler;      // The invocation handler for this class (if it has one).
 	private final BeanRegistry beanRegistry;                // The bean registry of this class meta (if it has one).
 	private final ClassMeta<?>[] args;                      // Arg types if this is an array of args.
-	private final Object example;                          // Example object.
+	private final String example;                           // Example JSON.
 	private final Map<Class<?>,Mutater<?,T>> fromMutaters = new ConcurrentHashMap<>();
 	private final Map<Class<?>,Mutater<T,?>> toMutaters = new ConcurrentHashMap<>();
 	private final Mutater<String,T> stringMutater;
@@ -136,7 +135,7 @@ public final class ClassMeta<T> implements Type {
 	 * 	Used for delayed initialization when the possibility of class reference loops exist.
 	 */
 	@SuppressWarnings({ "rawtypes", "unchecked" })
-	ClassMeta(Class<T> innerClass, BeanContext beanContext, Class<? extends T> implClass, PojoSwap<T,?>[] swaps, PojoSwap<?,?>[] childPojoSwaps, Object example) {
+	ClassMeta(Class<T> innerClass, BeanContext beanContext, Class<? extends T> implClass, PojoSwap<T,?>[] swaps, PojoSwap<?,?>[] childPojoSwaps) {
 		this.innerClass = innerClass;
 		this.info = ClassInfo.of(innerClass);
 		this.beanContext = beanContext;
@@ -148,7 +147,7 @@ public final class ClassMeta<T> implements Type {
 			if (beanContext != null && beanContext.cmCache != null && isCacheable(innerClass))
 				beanContext.cmCache.put(innerClass, this);
 
-			ClassMetaBuilder<T> builder = new ClassMetaBuilder(innerClass, beanContext, implClass, swaps, childPojoSwaps, example);
+			ClassMetaBuilder<T> builder = new ClassMetaBuilder(innerClass, beanContext, implClass, swaps, childPojoSwaps);
 
 			this.cc = builder.cc;
 			this.isDelegate = builder.isDelegate;
@@ -340,10 +339,10 @@ public final class ClassMeta<T> implements Type {
 			childUnswapMap;
 		Method exampleMethod;
 		Field exampleField;
-		Object example;
+		String example;
 		Mutater<String,T> stringMutater;
 
-		ClassMetaBuilder(Class<T> innerClass, BeanContext beanContext, Class<? extends T> implClass, PojoSwap<T,?>[] swaps, PojoSwap<?,?>[] childPojoSwaps, Object example) {
+		ClassMetaBuilder(Class<T> innerClass, BeanContext beanContext, Class<? extends T> implClass, PojoSwap<T,?>[] swaps, PojoSwap<?,?>[] childPojoSwaps) {
 			this.innerClass = innerClass;
 			this.beanContext = beanContext;
 			BeanContext bc = beanContext;
@@ -534,6 +533,7 @@ public final class ClassMeta<T> implements Type {
 			}
 
 			BeanFilter beanFilter = findBeanFilter(bc);
+			MarshalledFilter marshalledFilter = findMarshalledFilter(bc);
 
 			if (swaps != null)
 				this.swaps.a(swaps);
@@ -616,6 +616,12 @@ public final class ClassMeta<T> implements Type {
 				}
 			}
 
+			if (beanFilter != null)
+				example = beanFilter.getExample();
+
+			if (example == null && marshalledFilter != null)
+				example = marshalledFilter.getExample();
+
 			if (example == null && bc != null)
 				for (Example e : bc.getAnnotations(Example.class, c))
 					if (! e.value().isEmpty())
@@ -624,10 +630,10 @@ public final class ClassMeta<T> implements Type {
 			if (example == null) {
 				switch(cc) {
 					case BOOLEAN:
-						example = true;
+						example = "true";
 						break;
 					case CHAR:
-						example = 'a';
+						example = "a";
 						break;
 					case CHARSEQ:
 					case STR:
@@ -635,22 +641,22 @@ public final class ClassMeta<T> implements Type {
 						break;
 					case DECIMAL:
 						if (isFloat())
-							example = new Float(1f);
+							example = "1.0";
 						else if (isDouble())
-							example = new Double(1d);
+							example = "1.0";
 						break;
 					case ENUM:
 						Iterator<? extends Enum> i = EnumSet.allOf((Class<? extends Enum>)c).iterator();
 						if (i.hasNext())
-							example = i.next();
+							example = beanContext.isUseEnumNames() ? i.next().name() : i.next().toString();
 						break;
 					case NUMBER:
 						if (isShort())
-							example = new Short((short)1);
+							example = "1";
 						else if (isInteger())
-							example = new Integer(1);
+							example = "1";
 						else if (isLong())
-							example = new Long(1l);
+							example = "1";
 						break;
 					case URI:
 					case ARGS:
@@ -671,8 +677,6 @@ public final class ClassMeta<T> implements Type {
 				}
 			}
 
-			this.example = example;
-
 			this.stringMutater = Mutaters.get(String.class, c);
 		}
 
@@ -687,6 +691,17 @@ public final class ClassMeta<T> implements Type {
 			return null;
 		}
 
+		private MarshalledFilter findMarshalledFilter(BeanContext bc) {
+			try {
+				List<Marshalled> ba = info.getAnnotations(Marshalled.class, bc);
+				if (! ba.isEmpty())
+					return MarshalledFilter.create(innerClass).applyAnnotations(ba).build();
+			} catch (Exception e) {
+				throw new RuntimeException(e);
+			}
+			return null;
+		}
+
 		private void findSwaps(List<PojoSwap> l, BeanContext bc) {
 
 			if (bc != null) {
@@ -950,25 +965,8 @@ public final class ClassMeta<T> implements Type {
 	@BeanIgnore
 	public T getExample(BeanSession session) {
 		try {
-			if (example != null) {
-				if (isInstance(example))
-					return (T)example;
-				if (example instanceof String) {
-					if (isCharSequence())
-						return (T)example;
-					String s = example.toString();
-					if (isMapOrBean() && StringUtils.isJsonObject(s, false))
-						return JsonParser.DEFAULT.parse(s, this);
-					if (isCollectionOrArray() && StringUtils.isJsonArray(s, false))
-						return JsonParser.DEFAULT.parse(s, this);
-				}
-				if (example instanceof Map && isMapOrBean()) {
-					return JsonParser.DEFAULT.parse(SimpleJsonSerializer.DEFAULT_READABLE.toString(example), this);
-				}
-				if (example instanceof Collection && isCollectionOrArray()) {
-					return JsonParser.DEFAULT.parse(SimpleJsonSerializer.DEFAULT_READABLE.serialize(example), this);
-				}
-			}
+			if (example != null)
+				return session.getContext().getContext(JsonParser.class).parse(example, this);
 			if (exampleMethod != null)
 				return (T)MethodInfo.of(exampleMethod).invokeFuzzy(null, session);
 			if (exampleField != null)
@@ -1723,7 +1721,7 @@ public final class ClassMeta<T> implements Type {
 	@SuppressWarnings({ "unchecked", "rawtypes" })
 	public T newInstanceFromString(Object outer, String arg) throws ExecutableException {
 
-		if (isEnum() && beanContext.isUseEnumNames() && fromStringMethod != null)
+		if (isEnum() && beanContext.isUseEnumNames())
 			return (T)Enum.valueOf((Class<? extends Enum>)this.innerClass, arg);
 
 		Method m = fromStringMethod;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
index 2fd3b90..a7e014f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
@@ -762,6 +762,17 @@ public abstract class Context {
 	}
 
 	/**
+	 * Constructs the specified context class using the property store of this context class.
+	 * 
+	 * @param c The context class to instantiate.
+	 * @param <T> The context class to instantiate.
+	 * @return The instantiated context class.
+	 */
+	public <T extends Context> T getContext(Class<T> c) {
+		return ContextCache.INSTANCE.create(c, propertyStore);
+	}
+
+	/**
 	 * Create a new bean session based on the properties defined on this context.
 	 *
 	 * <p>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilter.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilter.java
new file mode 100644
index 0000000..6bfba67
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilter.java
@@ -0,0 +1,80 @@
+// ***************************************************************************************************************************
+// * 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 org.apache.juneau.annotation.*;
+
+/**
+ * Parent class for all non-bean filters.
+ *
+ * <p>
+ * Marshall filters are used to control aspects of how POJOs are handled during serialization and parsing.
+ *
+ * <p>
+ * Marshall filters are created by {@link MarshalledFilterBuilder} which is the programmatic equivalent to the {@link Marshalled @Marshalled}
+ * annotation.
+ */
+public final class MarshalledFilter {
+
+	private final Class<?> marshalledClass;
+
+	private final Class<?> implClass;
+	private final String example;
+
+	/**
+	 * Constructor.
+	 */
+	MarshalledFilter(MarshalledFilterBuilder builder) {
+		this.marshalledClass = builder.marshalledClass;
+		this.implClass = builder.implClass;
+		this.example = builder.example;
+	}
+
+	/**
+	 * Create a new instance of this POJO filter.
+	 *
+	 * @param <T> The POJO class being filtered.
+	 * @param marshalledClass The POJO class being filtered.
+	 * @return A new {@link MarshalledFilterBuilder} object.
+	 */
+	public static <T> MarshalledFilterBuilder create(Class<T> marshalledClass) {
+		return new MarshalledFilterBuilder(marshalledClass);
+	}
+
+	/**
+	 * Returns the class that this filter applies to.
+	 *
+	 * @return The class that this filter applies to.
+	 */
+	public Class<?> getMarshalledClass() {
+		return marshalledClass;
+	}
+
+	/**
+	 * Returns the implementation class associated with this class.
+	 *
+	 * @return The implementation class associated with this class, or <jk>null</jk> if no implementation class is associated.
+	 */
+	public Class<?> getImplClass() {
+		return implClass;
+	}
+
+	/**
+	 * Returns the example string with this class.
+	 *
+	 * @return The example string associated with this class, or <jk>null</jk> if no example string is associated.
+	 */
+	public String getExample() {
+		return example;
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilterBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilterBuilder.java
new file mode 100644
index 0000000..d6d5f9f
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MarshalledFilterBuilder.java
@@ -0,0 +1,90 @@
+// ***************************************************************************************************************************
+// * 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.util.*;
+
+import org.apache.juneau.annotation.*;
+
+/**
+ * Builder class for {@link MarshalledFilter} objects.
+ *
+ * <p>
+ * This class is the programmatic equivalent to the aggregation of one or more {@link Marshalled @Marshalled} annotations.
+ */
+public class MarshalledFilterBuilder {
+
+	Class<?> marshalledClass;
+
+	Class<?> implClass;
+	String example;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param marshalledClass The class that this filter applies to.
+	 */
+	public MarshalledFilterBuilder(Class<?> marshalledClass) {
+		this.marshalledClass = marshalledClass;
+	}
+
+	/**
+	 * Applies the information in the specified list of {@link Marshalled @Marshalled} annotations to this filter.
+	 *
+	 * @param annotations The annotations to apply.
+	 * @return This object (for method chaining).
+	 */
+	public MarshalledFilterBuilder applyAnnotations(List<Marshalled> annotations) {
+
+		for (Marshalled b : annotations) {
+
+			if (b.implClass() != Null.class)
+				implClass(b.implClass());
+
+			if (! b.example().isEmpty())
+				example(b.example());
+		}
+		return this;
+	}
+
+	/**
+	 * Implementation class.
+	 *
+	 * @param value The new value for this setting.
+	 * @return This object (for method chaining).
+	 */
+	public MarshalledFilterBuilder implClass(Class<?> value) {
+		this.implClass = value;
+		return this;
+	}
+
+	/**
+	 * POJO example in Simplified JSON format.
+	 *
+	 * @param value The new value for this annotation.
+	 * @return This object (for method chaining).
+	 */
+	public MarshalledFilterBuilder example(String value) {
+		this.example = value;
+		return this;
+	}
+
+	/**
+	 * Creates a {@link MarshalledFilter} with settings in this builder class.
+	 *
+	 * @return A new {@link MarshalledFilter} instance.
+	 */
+	public MarshalledFilter build() {
+		return new MarshalledFilter(this);
+	}
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
index 29c0844..20c8cb7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Session.java
@@ -40,6 +40,7 @@ public abstract class Session {
 	private Map<String,Object> cache;
 	private List<String> warnings;                 // Any warnings encountered.
 
+	private final Context ctx;
 	private final boolean debug;
 	private final Locale locale;
 	private final TimeZone timeZone;
@@ -54,6 +55,7 @@ public abstract class Session {
 	 * 	Runtime arguments.
 	 */
 	protected Session(Context ctx, SessionArgs args) {
+		this.ctx = ctx;
 		this.properties = args.properties == null ? OMap.EMPTY_MAP : args.properties;
 		debug = getProperty(CONTEXT_debug, Boolean.class, ctx.isDebug());
 		locale = getProperty(CONTEXT_locale, Locale.class, ctx.getDefaultLocale());
@@ -199,6 +201,15 @@ public abstract class Session {
 		return properties.keySet();
 	}
 
+	/**
+	 * Returns the context that created this session.
+	 *
+	 * @return The context that created this session.
+	 */
+	public Context getContext() {
+		return ctx;
+	}
+
 	@SuppressWarnings("unchecked")
 	private <T> T newInstance(Class<T> type, Object o, Object def) {
 		T t = null;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
index a3e3e37..a60631d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Bean.java
@@ -149,6 +149,44 @@ public @interface Bean {
 	Class<?>[] dictionary() default {};
 
 	/**
+	 * POJO example.
+	 *
+	 * <p>
+	 * Specifies an example of the specified class in Simplified JSON format.
+	 *
+	 * <p>
+	 * Examples are used in cases such as POJO examples in Swagger documents.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<ja>@Bean</ja>(example=<js>"{foo:'bar'}"</js>)
+	 * 	<jk>public class</jk> MyClass {...}
+	 * </p>
+	 *
+	 * <ul class='notes'>
+	 * 	<li>
+	 * 		Setting applies to specified class and all subclasses.
+	 * 	<li>
+	 * 		Keys are the class of the example.
+	 * 		<br>Values are Simple-JSON representation of that class.
+	 * 	<li>
+	 * 		POJO examples can also be defined on classes via the following:
+	 * 		<ul class='spaced-list'>
+	 * 			<li>A static field annotated with {@link Example @Example}.
+	 * 			<li>A static method annotated with {@link Example @Example} with zero arguments or one {@link BeanSession} argument.
+	 * 			<li>A static method with name <c>example</c> with no arguments or one {@link BeanSession} argument.
+	 * 		</ul>
+	 * 	<li>
+	 * 		Supports {@doc DefaultVarResolver} (e.g. <js>"$C{myConfigVar}"</js>).
+	 * </ul>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='ja'>{@link Example}
+	 * </ul>
+	 */
+	String example() default "";
+
+	/**
 	 * Find fluent setters.
 	 *
 	 * <p>
@@ -182,6 +220,22 @@ public @interface Bean {
 	boolean fluentSetters() default false;
 
 	/**
+	 * Implementation class.
+	 *
+	 * <p>
+	 * For interfaces and abstract classes this method can be used to specify an implementation class for the
+	 * interface/abstract class so that instances of the implementation class are used when instantiated (e.g. during a
+	 * parse).
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<ja>@Bean</ja>(implClass=MyInterfaceImpl.<jk>class</jk>)
+	 * 	<jk>public class</jk> MyInterface {...}
+	 * <p>
+	 */
+	Class<?> implClass() default Null.class;
+
+	/**
 	 * Identifies a class to be used as the interface class for this and all subclasses.
 	 *
 	 * <p>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java
index 7216191..0c4e43c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanAnnotation.java
@@ -29,6 +29,7 @@ public class BeanAnnotation extends TargetedAnnotation.OnClass implements Bean {
 	private Class<?>[]
 		dictionary = new Class[0];
 	private Class<?>
+		implClass = Object.class,
 		interfaceClass = Object.class,
 		stopClass = Object.class;
 	private Class<? extends BeanInterceptor<?>>
@@ -40,6 +41,7 @@ public class BeanAnnotation extends TargetedAnnotation.OnClass implements Bean {
 		bpx = "",
 		bpro = "",
 		bpwo = "",
+		example = "",
 		typeName = "",
 		typePropertyName = "";
 	boolean
@@ -145,6 +147,22 @@ public class BeanAnnotation extends TargetedAnnotation.OnClass implements Bean {
 	}
 
 	@Override
+	public String example() {
+		return example;
+	}
+
+	/**
+	 * Sets the <c>example</c> property on this annotation.
+	 *
+	 * @param value The new value for this property.
+	 * @return This object (for method chaining).
+	 */
+	public BeanAnnotation example(String value) {
+		this.example = value;
+		return this;
+	}
+
+	@Override
 	public boolean fluentSetters() {
 		return fluentSetters;
 	}
@@ -161,6 +179,22 @@ public class BeanAnnotation extends TargetedAnnotation.OnClass implements Bean {
 	}
 
 	@Override
+	public Class<?> implClass() {
+		return implClass;
+	}
+
+	/**
+	 * Sets the <c>implClass</c> property on this annotation.
+	 *
+	 * @param value The new value for this property.
+	 * @return This object (for method chaining).
+	 */
+	public BeanAnnotation implClass(Class<?> value) {
+		this.implClass = value;
+		return this;
+	}
+
+	@Override
 	public Class<?> interfaceClass() {
 		return interfaceClass;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
index 33a0447..ca4c36a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfig.java
@@ -116,6 +116,19 @@ public @interface BeanConfig {
 	Example[] applyExample() default {};
 
 	/**
+	 * Dynamically applies {@link Marshalled Marshalled} annotations to specified classes.
+	 *
+	 * <p>
+	 * Provides an alternate approach for applying annotations using {@link Marshalled#on() Marshalled.on} to specify the names
+	 * to apply the annotation to.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='link'>{@doc DynamicallyAppliedAnnotations}
+	 * </ul>
+	 */
+	Marshalled[] applyMarshalled() default {};
+
+	/**
 	 * Dynamically applies {@link NameProperty @NameProperty} annotations to specified methods/fields.
 	 *
 	 * <p>
@@ -726,79 +739,6 @@ public @interface BeanConfig {
 	Class<?>[] dictionary_remove() default {};
 
 	/**
-	 * Configuration property:  POJO examples.
-	 *
-	 * <p>
-	 * Specifies an example of the specified class.
-	 *
-	 * <p>
-	 * Examples are used in cases such as POJO examples in Swagger documents.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<ja>@BeanConfig</ja>(
-	 * 		examples={
-	 * 			<ja>@CS</ja>(key=MyBean.<jk>class</jk>, value=<js>"{foo:'bar'}"</js>)
-	 * 		}
-	 * 	)
-	 * </p>
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Setting applies to specified class and all subclasses.
-	 * 	<li>
-	 * 		Keys are the class of the example.
-	 * 		<br>Values are Simple-JSON representation of that class.
-	 * 	<li>
-	 * 		POJO examples can also be defined on classes via the following:
-	 * 		<ul class='spaced-list'>
-	 * 			<li>A static field annotated with {@link Example @Example}.
-	 * 			<li>A static method annotated with {@link Example @Example} with zero arguments or one {@link BeanSession} argument.
-	 * 			<li>A static method with name <c>example</c> with no arguments or one {@link BeanSession} argument.
-	 * 		</ul>
-	 * 	<li>
-	 * 		Supports {@doc DefaultVarResolver} (e.g. <js>"$C{myConfigVar}"</js>).
-	 * </ul>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link BeanContext#BEAN_examples}
-	 * </ul>
-	 */
-	CS[] example() default {};
-
-	/**
-	 * Configuration property:  POJO examples.
-	 *
-	 * <p>
-	 * Same as {@link #example()} but allows you to define examples as a Simple-JSON string.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<ja>@BeanConfig</ja>(
-	 * 		examples={
-	 * 			<js>"MyBean: {foo:'bar'}"</js>  <jc>// Could also be "{MyBean: {foo:'bar'}}"</jc>
-	 * 		}
-	 * 	)
-	 * </p>
-	 *
-	 * <ul class='notes'>
-	 * 	<li>
-	 * 		Keys are the class of the example and can be the fully-qualified name or simple name.
-	 * 		<br>Values are Simple-JSON representation of that class.
-	 *	<li>
-	 * 		The individual strings are concatenated together and the whole string is treated as a JSON Object.
-	 * 		<br>The leading and trailing <js>'{'</js> and <js>'}'</js> characters are optional.
-	 * 	<li>
-	 * 		Supports {@doc DefaultVarResolver} (e.g. <js>"$C{myConfigVar}"</js>).
-	 * </ul>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link BeanContext#BEAN_examples}
-	 * </ul>
-	 */
-	String[] examples() default {};
-
-	/**
 	 * Configuration property:  Find fluent setters.
 	 *
 	 * <p>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigApply.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigApply.java
index 8491cf9..4c20f7b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigApply.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConfigApply.java
@@ -19,8 +19,6 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.http.*;
-import org.apache.juneau.marshall.*;
-import org.apache.juneau.parser.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.svl.*;
 
@@ -71,10 +69,6 @@ public class BeanConfigApply extends ConfigApply<BeanConfig> {
 			psb.set(BEAN_typePropertyName, string(a.typePropertyName()));
 		if (! a.debug().isEmpty())
 			psb.set(CONTEXT_debug, bool(a.debug()));
-		for (CS e : a.example())
-			psb.putTo(BEAN_examples, e.k().getName(), parse(e.k(), e.v(), "example"));
-		if (a.examples().length > 0)
-			psb.putAllTo(BEAN_examples, omap(a.examples(), "examples"));
 		if (! a.fluentSetters().isEmpty())
 			psb.set(BEAN_fluentSetters, bool(a.fluentSetters()));
 		if (! a.ignoreInvocationExceptionsOnGetters().isEmpty())
@@ -146,6 +140,8 @@ public class BeanConfigApply extends ConfigApply<BeanConfig> {
 			psb.prependTo(BEAN_annotations, a.applyBeanIgnore());
 		if (a.applyExample().length > 0)
 			psb.prependTo(BEAN_annotations, a.applyExample());
+		if (a.applyMarshalled().length > 0)
+			psb.prependTo(BEAN_annotations, a.applyMarshalled());
 		if (a.applyNameProperty().length > 0)
 			psb.prependTo(BEAN_annotations, a.applyNameProperty());
 		if (a.applyParentProperty().length > 0)
@@ -184,12 +180,4 @@ public class BeanConfigApply extends ConfigApply<BeanConfig> {
 	private TimeZone timeZone(String in) {
 		return TimeZone.getTimeZone(string(in));
 	}
-
-	private <T> T parse(Class<T> c, String in, String loc) {
-		try {
-			return SimpleJson.DEFAULT.read(string(in), c);
-		} catch (ParseException e) {
-			throw new ConfigException("Invalid syntax for visibility on annotation @BeanConfig({0}): {1}", loc, in);
-		}
-	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Marshalled.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Marshalled.java
new file mode 100644
index 0000000..90d0cb6
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/Marshalled.java
@@ -0,0 +1,154 @@
+// ***************************************************************************************************************************
+// * 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.annotation;
+
+import org.apache.juneau.*;
+
+/**
+ * Annotation that can be applied to classes to control how they are marshalled.
+ *
+ * <p>
+ * This annotation is typically only applied to non-bean classes.  The {@link Bean @Bean} annotation contains equivalent
+ * functionality for bean classes.
+ */
+public @interface Marshalled {
+
+	/**
+	 * Dynamically apply this annotation to the specified classes.
+	 *
+	 * <p>
+	 * Used in conjunction with the {@link BeanConfig#applyMarshalled()}.
+	 * It is ignored when the annotation is applied directly to classes.
+	 *
+	 * <p>
+	 * The following example shows the equivalent methods for applying the {@link Bean @Bean} annotation to REST methods:
+	 * <p class='bpcode w800'>
+	 * 	<jc>// Class with explicit annotation.</jc>
+	 * 	<ja>@Marshalled</ja>(example=<js>"{foo:'bar'}"</js>)
+	 * 	<jk>public class</jk> A {...}
+	 *
+	 * 	<jc>// Class with annotation applied via @BeanConfig</jc>
+	 * 	<jk>public class</jk> B {...}
+	 *
+	 * 	<jc>// Java REST method with @BeanConfig annotation.</jc>
+	 * 	<ja>@RestMethod</ja>(...)
+	 * 	<ja>@BeanConfig</ja>(
+	 * 		applyMarshalled={
+	 * 			<ja>@Marshalled</ja>(on=<js>"B"</js>, example=<js>"{foo:'bar'}"</js>)
+	 * 		}
+	 * 	)
+	 * 	<jk>public void</jk> doFoo() {...}
+	 * </p>
+	 *
+	 * <h5 class='section'>Valid patterns:</h5>
+	 * <ul class='spaced-list'>
+	 *  <li>Classes:
+	 * 		<ul>
+	 * 			<li>Fully qualified:
+	 * 				<ul>
+	 * 					<li><js>"com.foo.MyClass"</js>
+	 * 				</ul>
+	 * 			<li>Fully qualified inner class:
+	 * 				<ul>
+	 * 					<li><js>"com.foo.MyClass$Inner1$Inner2"</js>
+	 * 				</ul>
+	 * 			<li>Simple:
+	 * 				<ul>
+	 * 					<li><js>"MyClass"</js>
+	 * 				</ul>
+	 * 			<li>Simple inner:
+	 * 				<ul>
+	 * 					<li><js>"MyClass$Inner1$Inner2"</js>
+	 * 					<li><js>"Inner1$Inner2"</js>
+	 * 					<li><js>"Inner2"</js>
+	 * 				</ul>
+	 * 		</ul>
+	 * 	<li>A comma-delimited list of anything on this list.
+	 * </ul>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='link'>{@doc DynamicallyAppliedAnnotations}
+	 * </ul>
+	 */
+	String[] on() default {};
+
+	/**
+	 * Dynamically apply this annotation to the specified classes.
+	 *
+	 * <p>
+	 * Identical to {@link #on()} except allows you to specify class objects instead of a strings.
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='link'>{@doc DynamicallyAppliedAnnotations}
+	 * </ul>
+	 */
+	Class<?>[] onClass() default {};
+
+	/**
+	 * Implementation class.
+	 *
+	 * <p>
+	 * For interfaces and abstract classes this method can be used to specify an implementation class for the
+	 * interface/abstract class so that instances of the implementation class are used when instantiated (e.g. during a
+	 * parse).
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<ja>@Marshalled</ja>(implClass=MyInterfaceImpl.<jk>class</jk>)
+	 * 	<jk>public class</jk> MyInterface {...}
+	 * <p>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='jf'>{@link BeanContext#BEAN_implClasses}
+	 * </ul>
+	 */
+	Class<?> implClass() default Null.class;
+
+	/**
+	 * POJO example.
+	 *
+	 * <p>
+	 * Specifies an example of the specified class in Simplified JSON format.
+	 *
+	 * <p>
+	 * Examples are used in cases such as POJO examples in Swagger documents.
+	 *
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode w800'>
+	 * 	<ja>@Marshalled</ja>(example=<js>"{foo:'bar'}"</js>)
+	 * 	<jk>public class</jk> MyClass {...}
+	 * </p>
+	 *
+	 * <ul class='notes'>
+	 * 	<li>
+	 * 		Setting applies to specified class and all subclasses.
+	 * 	<li>
+	 * 		Keys are the class of the example.
+	 * 		<br>Values are Simple-JSON representation of that class.
+	 * 	<li>
+	 * 		POJO examples can also be defined on classes via the following:
+	 * 		<ul class='spaced-list'>
+	 * 			<li>A static field annotated with {@link Example @Example}.
+	 * 			<li>A static method annotated with {@link Example @Example} with zero arguments or one {@link BeanSession} argument.
+	 * 			<li>A static method with name <c>example</c> with no arguments or one {@link BeanSession} argument.
+	 * 		</ul>
+	 * 	<li>
+	 * 		Supports {@doc DefaultVarResolver} (e.g. <js>"$C{myConfigVar}"</js>).
+	 * </ul>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='ja'>{@link Example}
+	 * </ul>
+	 */
+	String example() default "";
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/MarshalledAnnotation.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/MarshalledAnnotation.java
new file mode 100644
index 0000000..d8b0a26
--- /dev/null
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/MarshalledAnnotation.java
@@ -0,0 +1,84 @@
+// ***************************************************************************************************************************
+// * 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.annotation;
+
+import java.lang.annotation.*;
+
+import org.apache.juneau.*;
+
+/**
+ * A concrete implementation of the {@link Marshalled} annotation.
+ *
+ * <ul class='seealso'>
+ * 	<li class='jm'>{@link BeanContextBuilder#annotations(Annotation...)}
+ * </ul>
+ */
+public class MarshalledAnnotation extends TargetedAnnotation.OnClass implements Marshalled {
+
+	private Class<?> implClass = Null.class;
+	private String example = "";
+
+	@Override
+	public Class<?> implClass() {
+		return implClass;
+	}
+
+	/**
+	 * Sets the <c>implClass</c> property on this annotation.
+	 *
+	 * @param value The new value for this property.
+	 * @return This object (for method chaining).
+	 */
+	public MarshalledAnnotation implClass(Class<?> value) {
+		this.implClass = value;
+		return this;
+	}
+
+	@Override
+	public String example() {
+		return example;
+	}
+
+	/**
+	 * Sets the <c>example</c> property on this annotation.
+	 *
+	 * @param value The new value for this property.
+	 * @return This object (for method chaining).
+	 */
+	public MarshalledAnnotation example(String value) {
+		this.example = value;
+		return this;
+	}
+
+	// <FluentSetters>
+
+	@Override /* GENERATED - TargetedAnnotation */
+	public MarshalledAnnotation on(String...value) {
+		super.on(value);
+		return this;
+	}
+
+	@Override /* GENERATED - OnClass */
+	public MarshalledAnnotation on(java.lang.Class<?>...value) {
+		super.on(value);
+		return this;
+	}
+
+	@Override /* GENERATED - OnClass */
+	public MarshalledAnnotation onClass(java.lang.Class<?>...value) {
+		super.onClass(value);
+		return this;
+	}
+
+	// </FluentSetters>
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
index d14da51..eb831d7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
@@ -338,8 +338,8 @@ public class CsvParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> CsvParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> CsvParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 82261d0..9ef4133 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
@@ -338,8 +338,8 @@ public class CsvSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> CsvSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> CsvSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
index 0817548..9e3c979 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
@@ -864,8 +864,8 @@ public class HtmlDocSerializerBuilder extends HtmlStrippedDocSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> HtmlDocSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> HtmlDocSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
index 8b640e3..84b1855 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
@@ -341,8 +341,8 @@ public class HtmlParserBuilder extends XmlParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> HtmlParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> HtmlParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
index 117ddf6..2f61eb9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
@@ -91,7 +91,7 @@ public class HtmlSchemaSerializerBuilder extends HtmlSerializerBuilder {
 	 * from the following:
 	 * <ul class='javatree'>
 	 * 	<li class='ja'>{@link Example}
-	 * 	<li class='jf'>{@link BeanContext#BEAN_examples}
+	 * 	<li class='ja'>{@link Marshalled#example() Marshalled(example)}
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
@@ -517,8 +517,8 @@ public class HtmlSchemaSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> HtmlSchemaSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> HtmlSchemaSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 9ce0718..166c303 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
@@ -434,8 +434,8 @@ public class HtmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> HtmlSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> HtmlSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
index ae6f70e..dcf2f5f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
@@ -338,8 +338,8 @@ public class HtmlStrippedDocSerializerBuilder extends HtmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> HtmlStrippedDocSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> HtmlStrippedDocSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Body.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Body.java
index 06a82e8..298c5e8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Body.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Body.java
@@ -18,7 +18,6 @@ import static java.lang.annotation.RetentionPolicy.*;
 import java.lang.annotation.*;
 
 import org.apache.juneau.jsonschema.annotation.Schema;
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.json.*;
@@ -346,15 +345,13 @@ public @interface Body {
 	 * </p>
 	 *
 	 * <p>
-	 * Examples can also be specified via generic properties as well using the {@link BeanContext#BEAN_examples} property at either the class or method level.
+	 * Examples can also be specified via generic properties as well using the {@link Marshalled#example() @Marshalled(example)} annotation.
 	 * <p class='bcode w800'>
 	 * 	<jc>// Examples defined at class level.</jc>
-	 * 	<ja>@Rest</ja>(
-	 * 		properties={
-	 * 			<ja>@Property</ja>(
-	 * 				name=<jsf>BEAN_examples</jsf>,
-	 * 				value=<js>"{'org.apache.juneau.examples.rest.petstore.PetCreate': {name:'Doggie',price:9.99,species:'Dog',tags:['friendly','cute']}}"</js>
-	 * 			)
+	 * 	<ja>@Rest</ja>
+	 * 	<ja>@BeanConfig</ja>(
+	 * 		applyMarshalled={
+	 * 			<ja>@Marshalled</ja>(on=<js>"PetCreate"</js>,example=<js>"{name:'Doggie',price:9.99,species:'Dog',tags:['friendly','cute']}"</js>)
 	 * 		}
 	 * 	)
 	 * </p>
@@ -367,10 +364,7 @@ public @interface Body {
 	 *
 	 * <ul class='seealso'>
 	 * 	<li class='ja'>{@link Example}
-	 * 	<li class='jc'>{@link BeanContext}
-	 * 	<ul>
-	 * 		<li class='jf'>{@link BeanContext#BEAN_examples BEAN_examples}
-	 * 	</ul>
+	 * 	<li class='ja'>{@link Marshalled#example() Marshalled(example)}
 	 * 	<li class='jc'>{@link JsonSchemaSerializer}
 	 * 	<ul>
 	 * 		<li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_addExamplesTo JSONSCHEMA_addExamplesTo}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormData.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormData.java
index bdb4ea8..b4b392a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormData.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/FormData.java
@@ -19,7 +19,6 @@ import java.lang.annotation.*;
 import java.util.*;
 
 import org.apache.juneau.jsonschema.annotation.Items;
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.httppart.*;
@@ -1009,7 +1008,7 @@ public @interface FormData {
 	 * 		name=<js>"status"</js>,
 	 * 		type=<js>"array"</js>,
 	 * 		collectionFormat=<js>"csv"</js>,
-	 * 		example=<js>"AVALIABLE,PENDING"</js>
+	 * 		example=<js>"AVAILIABLE,PENDING"</js>
 	 * 	)
 	 * 	PetStatus[] status
 	 * </p>
@@ -1027,10 +1026,7 @@ public @interface FormData {
 	 *
 	 * <ul class='seealso'>
 	 * 	<li class='ja'>{@link Example}
-	 * 	<li class='jc'>{@link BeanContext}
-	 * 	<ul>
-	 * 		<li class='jf'>{@link BeanContext#BEAN_examples BEAN_examples}
-	 * 	</ul>
+	 * 	<li class='ja'>{@link Marshalled#example() Marshalled(example)}
 	 * 	<li class='jc'>{@link JsonSchemaSerializer}
 	 * 	<ul>
 	 * 		<li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_addExamplesTo JSONSCHEMA_addExamplesTo}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Header.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Header.java
index 06b8790..4e16ede 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Header.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Header.java
@@ -19,7 +19,6 @@ import java.lang.annotation.*;
 import java.util.*;
 
 import org.apache.juneau.jsonschema.annotation.Items;
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.httppart.*;
@@ -974,7 +973,7 @@ public @interface Header {
 	 * 		name=<js>"Status"</js>,
 	 * 		type=<js>"array"</js>,
 	 * 		collectionFormat=<js>"csv"</js>,
-	 * 		example=<js>"AVALIABLE,PENDING"</js>
+	 * 		example=<js>"AVAILIABLE,PENDING"</js>
 	 * 	)
 	 * 	PetStatus[] status
 	 * </p>
@@ -992,10 +991,7 @@ public @interface Header {
 	 *
 	 * <ul class='seealso'>
 	 * 	<li class='ja'>{@link Example}
-	 * 	<li class='jc'>{@link BeanContext}
-	 * 	<ul>
-	 * 		<li class='jf'>{@link BeanContext#BEAN_examples BEAN_examples}
-	 * 	</ul>
+	 * 	<li class='ja'>{@link Marshalled#example() Marshalled(example)}
 	 * 	<li class='jc'>{@link JsonSchemaSerializer}
 	 * 	<ul>
 	 * 		<li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_addExamplesTo JSONSCHEMA_addExamplesTo}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Path.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Path.java
index 75ea8b4..83a8c6a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Path.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Path.java
@@ -19,7 +19,6 @@ import java.lang.annotation.*;
 import java.util.*;
 
 import org.apache.juneau.jsonschema.annotation.Items;
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.httppart.*;
@@ -953,10 +952,8 @@ public @interface Path {
 	 *
 	 * <ul class='seealso'>
 	 * 	<li class='ja'>{@link Example}
-	 * 	<li class='jc'>{@link BeanContext}
-	 * 	<ul>
-	 * 		<li class='jf'>{@link BeanContext#BEAN_examples BEAN_examples}
-	 * 	</ul>
+	 * 	<li class='ja'>{@link Bean#example() Bean(example)}
+	 * 	<li class='ja'>{@link Marshalled#example() Marshalled(example)}
 	 * 	<li class='jc'>{@link JsonSchemaSerializer}
 	 * 	<ul>
 	 * 		<li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_addExamplesTo JSONSCHEMA_addExamplesTo}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Query.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Query.java
index 12544e5..242ec71 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Query.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Query.java
@@ -19,7 +19,6 @@ import java.lang.annotation.*;
 import java.util.*;
 
 import org.apache.juneau.jsonschema.annotation.Items;
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.httppart.*;
@@ -1006,10 +1005,8 @@ public @interface Query {
 	 *
 	 * <ul class='seealso'>
 	 * 	<li class='ja'>{@link Example}
-	 * 	<li class='jc'>{@link BeanContext}
-	 * 	<ul>
-	 * 		<li class='jf'>{@link BeanContext#BEAN_examples BEAN_examples}
-	 * 	</ul>
+	 * 	<li class='ja'>{@link Bean#example() Bean(example)}
+	 * 	<li class='ja'>{@link Marshalled#example() Marshalled(example)}
 	 * 	<li class='jc'>{@link JsonSchemaSerializer}
 	 * 	<ul>
 	 * 		<li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_addExamplesTo JSONSCHEMA_addExamplesTo}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Response.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Response.java
index 27f92d6..d95a013 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Response.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/annotation/Response.java
@@ -18,7 +18,6 @@ import static java.lang.annotation.RetentionPolicy.*;
 import java.lang.annotation.*;
 
 import org.apache.juneau.jsonschema.annotation.Schema;
-import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.httppart.*;
 import org.apache.juneau.json.*;
@@ -219,15 +218,13 @@ public @interface Response {
 	 * </p>
 	 *
 	 * <p>
-	 * Examples can also be specified via generic properties as well using the {@link BeanContext#BEAN_examples} property at either the class or method level.
+	 * Examples can also be specified via generic properties as well using the {@link Marshalled#example() @Marshalled(example)} annotation at either the class or method level.
 	 * <p class='bcode w800'>
 	 * 	<jc>// Examples defined at class level.</jc>
-	 * 	<ja>@Rest</ja>(
-	 * 		properties={
-	 * 			<ja>@Property</ja>(
-	 * 				name=<jsf>BEAN_examples</jsf>,
-	 * 				value=<js>"{'org.apache.juneau.examples.rest.petstore.PetCreate': {name:'Doggie',price:9.99,species:'Dog',tags:['friendly','cute']}}"</js>
-	 * 			)
+	 * 	<ja>@Rest</ja>
+	 * 	<ja>@BeanConfig</ja>(
+	 * 		applyMarshalled={
+	 * 			<ja>@Marshalled</ja>(on=<js>"PetCreate"</js>,example=<js>"{name:'Doggie',price:9.99,species:'Dog',tags:['friendly','cute']}"</js>)
 	 * 		}
 	 * 	)
 	 * </p>
@@ -240,10 +237,8 @@ public @interface Response {
 	 *
 	 * <ul class='seealso'>
 	 * 	<li class='ja'>{@link Example}
-	 * 	<li class='jc'>{@link BeanContext}
-	 * 	<ul>
-	 * 		<li class='jf'>{@link BeanContext#BEAN_examples BEAN_examples}
-	 * 	</ul>
+	 * 	<li class='ja'>{@link Bean#example() Bean(example)}
+	 * 	<li class='ja'>{@link Marshalled#example() Marshalled(example)}
 	 * 	<li class='jc'>{@link JsonSchemaSerializer}
 	 * 	<ul>
 	 * 		<li class='jf'>{@link JsonSchemaGenerator#JSONSCHEMA_addExamplesTo JSONSCHEMA_addExamplesTo}
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 7d58be0..dbb00c6 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
@@ -337,8 +337,8 @@ public class JsoParserBuilder extends InputStreamParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> JsoParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> JsoParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 43ae6a3..4233165 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
@@ -337,8 +337,8 @@ public class JsoSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> JsoSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> JsoSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
index 511262e..74a1529 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
@@ -358,8 +358,8 @@ public class JsonParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> JsonParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> JsonParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 7833226..4851a0e 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
@@ -90,7 +90,7 @@ public class JsonSchemaSerializerBuilder extends JsonSerializerBuilder {
 	 * from the following:
 	 * <ul class='javatree'>
 	 * 	<li class='ja'>{@link Example}
-	 * 	<li class='jf'>{@link BeanContext#BEAN_examples}
+	 * 	<li class='ja'>{@link Marshalled#example() Marshalled(example)}
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
@@ -516,8 +516,8 @@ public class JsonSchemaSerializerBuilder extends JsonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> JsonSchemaSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> JsonSchemaSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 1b3d15b..df28335 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
@@ -394,8 +394,8 @@ public class JsonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> JsonSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> JsonSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java
index 6923049..1711abb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonParserBuilder.java
@@ -337,8 +337,8 @@ public class SimpleJsonParserBuilder extends JsonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> SimpleJsonParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> SimpleJsonParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
index a314c2f..69a02f2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/SimpleJsonSerializerBuilder.java
@@ -337,8 +337,8 @@ public class SimpleJsonSerializerBuilder extends JsonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> SimpleJsonSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> SimpleJsonSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
index 4df34c1..bd6dc59 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
@@ -109,7 +109,7 @@ public class JsonSchemaGenerator extends BeanTraverseContext implements JsonSche
 	 * from the following:
 	 * <ul class='javatree'>
 	 * 	<li class='ja'>{@link Example}
-	 * 	<li class='jf'>{@link BeanContext#BEAN_examples}
+	 * 	<li class='ja'>{@link Marshalled#example() Marshalled(example)}
 	 * </ul>
 	 *
 	 * <p>
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
index c88b1e6..8ca07c3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
@@ -88,7 +88,7 @@ public class JsonSchemaGeneratorBuilder extends BeanTraverseBuilder {
 	 * from the following:
 	 * <ul class='javatree'>
 	 * 	<li class='ja'>{@link Example}
-	 * 	<li class='jf'>{@link BeanContext#BEAN_examples}
+	 * 	<li class='ja'>{@link Marshalled#example() Marshalled(example)}
 	 * </ul>
 	 *
 	 * <ul class='seealso'>
@@ -546,8 +546,8 @@ public class JsonSchemaGeneratorBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> JsonSchemaGeneratorBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> JsonSchemaGeneratorBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfig.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfig.java
index 800b2fc..432e0e6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfig.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfig.java
@@ -90,7 +90,7 @@ public @interface JsonSchemaConfig {
 	 * from the following:
 	 * <ul class='javatree'>
 	 * 	<li class='ja'>{@link Example}
-	 * 	<li class='jf'>{@link BeanContext#BEAN_examples}
+	 * 	<li class='ja'>{@link Marshalled#example() Marshalled(example)}
 	 * </ul>
 	 *
 	 * <ul class='notes'>
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 4e9aae5..95172b8 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
@@ -337,8 +337,8 @@ public class MsgPackParserBuilder extends InputStreamParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> MsgPackParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> MsgPackParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 fac832e..09601ef 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
@@ -337,8 +337,8 @@ public class MsgPackSerializerBuilder extends OutputStreamSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> MsgPackSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> MsgPackSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
index 561e7fc..ec2ecc5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
@@ -453,8 +453,8 @@ public class OpenApiParserBuilder extends UonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> OpenApiParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> OpenApiParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
index e125f46..d9e1d5c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
@@ -464,8 +464,8 @@ public class OpenApiSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> OpenApiSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> OpenApiSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
index 6aecc9d..9b43b54 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
@@ -368,8 +368,8 @@ public class InputStreamParserBuilder extends ParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> InputStreamParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> InputStreamParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 c4b94a7..59c885e 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
@@ -616,8 +616,8 @@ public class ParserBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> ParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> ParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
index cd78dc8..ce0a2fb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
@@ -655,8 +655,8 @@ public class ParserGroupBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> ParserGroupBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> ParserGroupBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 1063dec..3fd7485 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
@@ -405,8 +405,8 @@ public abstract class ReaderParserBuilder extends ParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> ReaderParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> ReaderParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
index 9742b78..80df196 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
@@ -338,8 +338,8 @@ public class PlainTextParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> PlainTextParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> PlainTextParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 702ad11..39a4610 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
@@ -338,8 +338,8 @@ public class PlainTextSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> PlainTextSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> PlainTextSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
index 25ea161..d096b7a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
@@ -371,8 +371,8 @@ public class OutputStreamSerializerBuilder extends SerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> OutputStreamSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> OutputStreamSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 6e9f37e..acaa853 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
@@ -836,8 +836,8 @@ public class SerializerBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> SerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> SerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 e96e7e0..5c4d451 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
@@ -793,8 +793,8 @@ public class SerializerGroupBuilder extends BeanTraverseBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> SerializerGroupBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> SerializerGroupBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 adc7e3c..f9dcb9d 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
@@ -585,8 +585,8 @@ public class WriterSerializerBuilder extends SerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> WriterSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> WriterSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 d260b30..1faf56b 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
@@ -358,8 +358,8 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> SoapXmlSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> SoapXmlSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
index 3f5e245..85ccb17 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
@@ -397,8 +397,8 @@ public class UonParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> UonParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> UonParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 436ce77..b02e3eb 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
@@ -518,8 +518,8 @@ public class UonSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> UonSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> UonSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
index 12c90fc..d9e805d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
@@ -358,8 +358,8 @@ public class UrlEncodingParserBuilder extends UonParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> UrlEncodingParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> UrlEncodingParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 e9a244a..2857729 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
@@ -358,8 +358,8 @@ public class UrlEncodingSerializerBuilder extends UonSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> UrlEncodingSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> UrlEncodingSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
index 99ec600..884bed4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
@@ -486,8 +486,8 @@ public class XmlParserBuilder extends ReaderParserBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> XmlParserBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> XmlParserBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
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 47f4fe6..8323a13 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
@@ -465,8 +465,8 @@ public class XmlSerializerBuilder extends WriterSerializerBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> XmlSerializerBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> XmlSerializerBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-doc/docs/ReleaseNotes/9.0.0.html b/juneau-doc/docs/ReleaseNotes/9.0.0.html
new file mode 100644
index 0000000..e38f3e8
--- /dev/null
+++ b/juneau-doc/docs/ReleaseNotes/9.0.0.html
@@ -0,0 +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.
+ ***************************************************************************************************************************/
+ -->
+
+9.0.0 (TBD)
+
+<p>
+Juneau 9.0.0 is a major release. 
+</p>
+
+<h5 class='topic w800'>juneau-marshall</h5>
+<ul class='spaced-list'>
+	<li>
+		New {@link aoj.annotation.Marshalled @Marshalled} annotation for non-bean classes.
+	<li>
+		New {@link aoj.annotation.Bean#example() @Bean(example)} annotation.
+</ul>
+
+<h5 class='topic w800'>juneau-rest-server</h5>
+<ul class='spaced-list'>
+	<li>
+		Removed deprecated APIs.
+</ul>
+
+<h5 class='topic w800'>juneau-rest-server-springboot</h5>
+<ul class='spaced-list'>
+</ul>
+
+<h5 class='topic w800'>juneau-rest-client</h5>
+<ul class='spaced-list'>
+	<li>
+		Replaced deprecated APIs with new RestClient API introduced in 8.2.0.
+</ul>
+
+<h5 class='topic w800'>juneau-rest-mock</h5>
+<ul class='spaced-list'>
+	<li>
+		Replaced deprecated APIs with new RestClient API introduced in 8.2.0.
+</ui>
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/AtomFeedResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/AtomFeedResource.java
index 08fb8df..22e093d 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/AtomFeedResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/AtomFeedResource.java
@@ -71,7 +71,7 @@ import org.apache.juneau.serializer.annotation.*;
 	addRootProperty="true"
 )
 @BeanConfig(
-	examples="Feed: $F{AtomFeedResource_example.json}"
+	applyMarshalled=@Marshalled(onClass=Feed.class,example="$F{AtomFeedResource_example.json}")
 )
 public class AtomFeedResource extends BasicRestServletJena {
 	private static final long serialVersionUID = 1L;
diff --git a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/JsonSchemaResource.java b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/JsonSchemaResource.java
index 6bd236c..3c367c9 100644
--- a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/JsonSchemaResource.java
+++ b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/dto/JsonSchemaResource.java
@@ -62,7 +62,7 @@ import org.apache.juneau.rest.widget.*;
 	}
 )
 @BeanConfig(
-	examples="Schema: $F{JsonSchemaResource_example.json}"
+	applyMarshalled=@Marshalled(on="Schema",example="$F{JsonSchemaResource_example.json}")
 )
 public class JsonSchemaResource extends BasicRestServletJena {
 	private static final long serialVersionUID = 1L;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index 0474b6f..266b097 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -2550,8 +2550,8 @@ public class RestContextBuilder extends BeanContextBuilder implements ServletCon
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> RestContextBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> RestContextBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
index 9b5f5af..685000f 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContextBuilder.java
@@ -362,8 +362,8 @@ public class RestMethodContextBuilder extends BeanContextBuilder {
 	}
 
 	@Override /* GENERATED - BeanContextBuilder */
-	public <T> RestMethodContextBuilder exampleJson(Class<T> pojoClass, String json) {
-		super.exampleJson(pojoClass, json);
+	public <T> RestMethodContextBuilder example(Class<T> pojoClass, String json) {
+		super.example(pojoClass, json);
 		return this;
 	}