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 2018/01/13 22:12:01 UTC

[2/4] juneau git commit: Update javadocs.

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
----------------------------------------------------------------------
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 7b5b921..a0b090f 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
@@ -531,6 +531,32 @@ public class SerializerBuilder extends BeanContextBuilder {
 	}
 
 	/**
+	 * Configuration property:  URI context bean.
+	 *
+	 * <p>
+	 * Same as {@link #uriContext(UriContext)} but allows you to pass in a JSON string.
+	 * 
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode'>
+	 * 	WriterSerializer s = JsonSerializer
+	 * 		.<jsm>create</jsm>()
+	 * 		.uriContext(<js>"{authority:'http://localhost:10000',contextRoot:'/myContext',servletPath:'/myServlet',pathInfo:'/foo'}"</js>)
+	 * 		.build();
+	 * </p>
+	 *
+	 * <h5 class='section'>See Also:</h5>
+	 * <ul>
+	 * 	<li class='jf'>{@link Serializer#SERIALIZER_uriContext}
+	 * </ul>
+	 * 
+	 * @param value The new value for this property.
+	 * @return This object (for method chaining).
+	 */
+	public SerializerBuilder uriContext(String value) {
+		return set(SERIALIZER_uriContext, value);
+	}
+
+	/**
 	 * Configuration property:  URI relativity.
 	 *
 	 * <p>
@@ -551,6 +577,34 @@ public class SerializerBuilder extends BeanContextBuilder {
 	}
 
 	/**
+	 * Configuration property:  URI relativity.
+	 *
+	 * <p>
+	 * Same as {@link #uriRelativity(UriRelativity)} but allows you to pass in a string.
+	 * 
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode'>
+	 * 	WriterSerializer s = JsonSerializer
+	 * 		.<jsm>create</jsm>()
+	 * 		.uriRelativity(<js>"PATH_INFO"</js>)
+	 * 		.build();
+	 * </p>
+	 *
+	 * <h5 class='section'>See Also:</h5>
+	 * <ul>
+	 * 	<li class='jf'>{@link Serializer#SERIALIZER_uriRelativity}
+	 * </ul>
+	 * 
+	 * @param value 
+	 * 	The new value for this property.
+	 * 	<br>The default is {@link UriRelativity#RESOURCE}
+	 * @return This object (for method chaining).
+	 */
+	public SerializerBuilder uriRelativity(String value) {
+		return set(SERIALIZER_uriRelativity, value);
+	}
+	
+	/**
 	 * Configuration property:  URI resolution.
 	 *
 	 * <p>
@@ -571,6 +625,34 @@ public class SerializerBuilder extends BeanContextBuilder {
 	}
 
 	/**
+	 * Configuration property:  URI resolution.
+	 *
+	 * <p>
+	 * Same as {@link #uriResolution(UriResolution)} but allows you to pass in a string.
+	 * 
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode'>
+	 * 	WriterSerializer s = JsonSerializer
+	 * 		.<jsm>create</jsm>()
+	 * 		.uriResolution(<js>"ROOT_RELATIVE"</js>)
+	 * 		.build();
+	 * </p>
+	 *
+	 * <h5 class='section'>See Also:</h5>
+	 * <ul>
+	 * 	<li class='jf'>{@link Serializer#SERIALIZER_uriResolution}
+	 * </ul>
+	 * 
+	 * @param value 
+	 * 	The new value for this property.
+	 * 	<br>The default is {@link UriResolution#NONE}
+	 * @return This object (for method chaining).
+	 */
+	public SerializerBuilder uriResolution(String value) {
+		return set(SERIALIZER_uriResolution, value);
+	}
+
+	/**
 	 * Configuration property:  Use whitespace.
 	 *
 	 * <p>

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
index c4a1b0e..b55768b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
@@ -672,7 +672,7 @@ public abstract class SerializerSession extends BeanSession {
 	 * 		<li><js>"context:/foo"</js> - Context-root-relative URI.
 	 * 		<li><js>"context:/"</js> - Context-root URI.
 	 * 		<li><js>"servlet:/foo"</js> - Servlet-path-relative URI.
-	 *			<li><js>"servlet:/"</js> - Servlet-path URI.
+	 * 		<li><js>"servlet:/"</js> - Servlet-path URI.
 	 * 		<li><js>"request:/foo"</js> - Request-path-relative URI.
 	 * 		<li><js>"request:/"</js> - Request-path URI.
 	 * 		<li><js>"foo"</js> - Path-info-relative URI.
@@ -791,8 +791,8 @@ public abstract class SerializerSession extends BeanSession {
 	 *
 	 * @return A map, typically containing something like <code>{line:123,column:456,currentProperty:"foobar"}</code>
 	 */
-	protected final Map<String,Object> getLastLocation() {
-		Map<String,Object> m = new LinkedHashMap<>();
+	protected final ObjectMap getLastLocation() {
+		ObjectMap m = new ObjectMap();
 		if (currentClass != null)
 			m.put("currentClass", currentClass);
 		if (currentProperty != null)
@@ -897,4 +897,25 @@ public abstract class SerializerSession extends BeanSession {
 	public Map<String,String> getResponseHeaders() {
 		return Collections.emptyMap();
 	}
+	
+	
+	/**
+	 * Returns the listener associated with this session.
+	 * 
+	 * @return The listener associated with this session, or <jk>null</jk> if there is no listener.
+	 */
+	public SerializerListener getListener() {
+		return listener;
+	}
+
+	/**
+	 * Returns the listener associated with this session.
+	 * 
+	 * @param c The listener class to cast to. 
+	 * @return The listener associated with this session, or <jk>null</jk> if there is no listener.
+	 */
+	@SuppressWarnings("unchecked")
+	public <T extends SerializerListener> T getListener(Class<T> c) {
+		return (T)listener;
+	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java
index e1c2928..3edf746 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSessionArgs.java
@@ -26,35 +26,90 @@ import org.apache.juneau.http.*;
  */
 public final class SerializerSessionArgs extends BeanSessionArgs {
 
-	final Method javaMethod;
-	final UriContext uriContext;
+	Method javaMethod;
+	UriContext uriContext;
+
+	/**
+	 * Constructor
+	 */
+	public SerializerSessionArgs() {}
 
 	/**
 	 * Constructor.
 	 *
 	 * @param properties
 	 * 	Session-level properties.
-	 * 	These override context-level properties.
-	 * 	Can be <jk>null</jk>.
+	 * 	<br>These override context-level properties.
+	 * 	<br>Can be <jk>null</jk>.
 	 * @param javaMethod
 	 * 	The java method that called this serializer, usually the method in a REST servlet.
-	 * 	Can be <jk>null</jk>.
+	 * 	<br>Can be <jk>null</jk>.
 	 * @param locale
 	 * 	The session locale.
-	 * 	If <jk>null</jk>, then the locale defined on the context is used.
+	 * 	<br>If <jk>null</jk>, then the locale defined on the context is used.
 	 * @param timeZone
 	 * 	The session timezone.
-	 * 	If <jk>null</jk>, then the timezone defined on the context is used.
+	 * 	<br>If <jk>null</jk>, then the timezone defined on the context is used.
 	 * @param mediaType
 	 * 	The session media type (e.g. <js>"application/json"</js>).
-	 * 	Can be <jk>null</jk>.
+	 * 	<br>Can be <jk>null</jk>.
 	 * @param uriContext
 	 * 	The URI context.
-	 * 	Identifies the current request URI used for resolution of URIs to absolute or root-relative form.
+	 * 	<br>Identifies the current request URI used for resolution of URIs to absolute or root-relative form.
 	 */
 	public SerializerSessionArgs(ObjectMap properties, Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType, UriContext uriContext) {
 		super(properties, locale, timeZone, mediaType);
 		this.javaMethod = javaMethod;
 		this.uriContext = uriContext;
 	}
+	
+	/**
+	 * The java method that called this serializer, usually the method in a REST servlet.
+	 *
+	 * @param javaMethod
+	 * 	The java method that called this serializer, usually the method in a REST servlet.
+	 * 	<br>Can be <jk>null</jk>.
+	 * @return This object (for method chaining).
+	 */
+	public SerializerSessionArgs javaMethod(Method javaMethod) {
+		this.javaMethod = javaMethod;
+		return this;
+	}
+
+	/**
+	 * The URI context.
+	 *
+	 * @param uriContext
+	 * 	The URI context.
+	 * 	<br>Identifies the current request URI used for resolution of URIs to absolute or root-relative form.
+	 * @return This object (for method chaining).
+	 */
+	public SerializerSessionArgs uriContext(UriContext uriContext) {
+		this.uriContext = uriContext;
+		return this;
+	}
+
+	@Override /* BeanSessionArgs */
+	public SerializerSessionArgs locale(Locale locale) {
+		super.locale(locale);
+		return this;
+	}
+	
+	@Override /* BeanSessionArgs */
+	public SerializerSessionArgs timeZone(TimeZone timeZone) {
+		super.timeZone(timeZone);
+		return this;
+	}
+	
+	@Override /* BeanSessionArgs */
+	public SerializerSessionArgs mediaType(MediaType mediaType) {
+		super.mediaType(mediaType);
+		return this;
+	}
+	
+	@Override /* SessionArgs */
+	public SerializerSessionArgs properties(ObjectMap properties) {
+		super.properties(properties);
+		return this;
+	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
index 3ba6ce8..e910294 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
@@ -41,7 +41,7 @@ public final class SoapXmlSerializer extends XmlSerializer {
 	/**
 	 * Configuration property:  The <code>SOAPAction</code> HTTP header value to set on responses.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"SoapXmlSerializer.SOAPAction.s"</js>
 	 * 	<li><b>Data type:</b>  <code>String</code>

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
index 7e56858..b583756 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
@@ -45,7 +45,7 @@ public final class AnnotationBeanFilterBuilder<T> extends BeanFilterBuilder<T> {
 			Bean b = li.previous();
 
 			if (! b.properties().isEmpty())
-				includeProperties(split(b.properties()));
+				properties(split(b.properties()));
 
 			if (! b.typeName().isEmpty())
 				typeName(b.typeName());

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
index 5ed83f7..54288a6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
@@ -50,9 +50,9 @@ import org.apache.juneau.annotation.*;
  * </p>		
  *
  * <h6 class='topic'>Documentation</h6>
- *	<ul>
- *		<li><a class="doclink" href="../../../../overview-summary.html#juneau-marshall.BeanFilters">Overview &gt; BeanFilters</a>
- *	</ul>
+ * <ul>
+ *.	<li><a class="doclink" href="../../../../overview-summary.html#juneau-marshall.BeanFilters">Overview &gt; BeanFilters</a>
+ *.</ul>
  *
  * @param <T> The bean type that this filter applies to. 
  */
@@ -94,7 +94,7 @@ public class BeanFilterBuilder<T> {
 	 *
 	 * <h5 class='section'>Example:</h5>
 	 * <p class='bcode'>
-	 *		<jc>// Define our filter.</jc>
+	 * 	<jc>// Define our filter.</jc>
 	 * 	<jk>public class</jk> MyFilter <jk>extends</jk> BeanFilterBuilder&lt;MyBean&gt; {
 	 * 		<jk>public</jk> MyFilter() {
 	 * 			typeName(<js>"mybean"</js>);
@@ -160,7 +160,7 @@ public class BeanFilterBuilder<T> {
 	 * 	<br>Values can contain comma-delimited list of property names.
 	 * @return This object (for method chaining).
 	 */
-	public BeanFilterBuilder<T> includeProperties(String...value) {
+	public BeanFilterBuilder<T> properties(String...value) {
 		this.includeProperties = value;
 		return this;
 	}
@@ -476,8 +476,8 @@ public class BeanFilterBuilder<T> {
 	 * <p>
 	 * The property filter to use for intercepting and altering getter and setter calls.
 	 *
-	 *	<h5 class='section'>Example:</h5>
-	 *	<p class='bcode'>
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode'>
 	 * 	<jc>// Define our filter.</jc>
 	 * 	<jk>public class</jk> MyFilter <jk>extends</jk> BeanFilterBuilder&lt;MyBean&gt; {
 	 * 		<jk>public</jk> MyFilter() {
@@ -491,7 +491,7 @@ public class BeanFilterBuilder<T> {
 	 * 		.<jsm>create</jsm>()
 	 * 		.beanFilters(MyFilter.<jk>class</jk>)
 	 * 		.build();
-	 *	</p>
+	 * </p>
 	 *
 	 * <h5 class='section'>See Also:</h5>
 	 * <ul>

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
index ae1eef0..6faff41 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
@@ -61,7 +61,7 @@ public class InterfaceBeanFilterBuilder<T> extends BeanFilterBuilder<T> {
 			Bean b = li.previous();
 
 			if (! b.properties().isEmpty())
-				includeProperties(split(b.properties()));
+				properties(split(b.properties()));
 
 			if (! b.typeName().isEmpty())
 				typeName(b.typeName());

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
index 6b6fa1c..4f46c6c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
@@ -152,9 +152,9 @@ public abstract class PojoSwap<T,S> {
 	 * This method is the programmatic equivalent to the {@link Swap#mediaTypes() @Swap.mediaTypes()} annotation.
 	 *
 	 * <h6 class='topic'>Documentation</h6>
-	 *	<ul>
-	 *		<li><a class="doclink" href="../../../../overview-summary.html#juneau-marshall.PerMediaTypePojoSwaps">Overview &gt; Per-media-type PojoSwaps</a>
-	 *	</ul>
+	 * <ul>
+	 * 	<li><a class="doclink" href="../../../../overview-summary.html#juneau-marshall.PerMediaTypePojoSwaps">Overview &gt; Per-media-type PojoSwaps</a>
+	 * </ul>
 	 * @return The media types that this swap is applicable to, or <jk>null</jk> if it's applicable for all media types.
 	 */
 	public MediaType[] forMediaTypes() {
@@ -173,10 +173,10 @@ public abstract class PojoSwap<T,S> {
 	 * <p>
 	 * This method is the programmatic equivalent to the {@link Swap#template() @Swap.template()} annotation.
 	 *
-	 *	<h5 class='section'>Documentation:</h5>
-	 *	<ul>
-	 *		<li><a class="doclink" href="../../../../overview-summary.html#juneau-marshall.TemplatedSwaps">Overview &gt; Templated Swaps</a>
-	 *	</ul>
+	 * <h5 class='section'>Documentation:</h5>
+	 * <ul>
+	 * 	<li><a class="doclink" href="../../../../overview-summary.html#juneau-marshall.TemplatedSwaps">Overview &gt; Templated Swaps</a>
+	 * </ul>
 	 *
 	 * @return Additional context information, or <jk>null</jk> if not specified.
 	 */
@@ -188,9 +188,9 @@ public abstract class PojoSwap<T,S> {
 	 * Sets the media types that this swap is associated with.
 	 *
 	 * <h6 class='topic'>Documentation</h6>
-	 *	<ul>
-	 *		<li><a class="doclink" href="../../../../overview-summary.html#juneau-marshall.PerMediaTypePojoSwaps">Overview &gt; Per-media-type PojoSwaps</a>
-	 *	</ul>
+	 * <ul>
+	 * 	<li><a class="doclink" href="../../../../overview-summary.html#juneau-marshall.PerMediaTypePojoSwaps">Overview &gt; Per-media-type PojoSwaps</a>
+	 * </ul>
 	 *
 	 * @param mediaTypes The media types that this swap is associated with.
 	 * @return This object (for method chaining).
@@ -203,10 +203,10 @@ public abstract class PojoSwap<T,S> {
 	/**
 	 * Sets the template string on this swap.
 	 *
-	 *	<h5 class='section'>Documentation:</h5>
-	 *	<ul>
-	 *		<li><a class="doclink" href="../../../../overview-summary.html#juneau-marshall.TemplatedSwaps">Overview &gt; Templated Swaps</a>
-	 *	</ul>
+	 * <h5 class='section'>Documentation:</h5>
+	 * <ul>
+	 * 	<li><a class="doclink" href="../../../../overview-summary.html#juneau-marshall.TemplatedSwaps">Overview &gt; Templated Swaps</a>
+	 * </ul>
 	 *
 	 * @param template The template string on this swap.
 	 * @return This object (for method chaining).

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PropertyFilter.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PropertyFilter.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PropertyFilter.java
index 18b7c32..16c641b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PropertyFilter.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PropertyFilter.java
@@ -87,18 +87,18 @@ public class PropertyFilter {
 	 * <p>
 	 * Subclasses can override this property to convert property values to some other object just before serialization.
 	 * 
-	 *	<h5 class='section'>Example:</h5>
-	 *	<p class='bcode'>
-	 *		<jc>// Address filter that strips out sensitive information.</jc>
-	 *		<jk>public class</jk> AddressPropertyFilter <jk>extends</jk> PropertyFilter {
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Address filter that strips out sensitive information.</jc>
+	 * 	<jk>public class</jk> AddressPropertyFilter <jk>extends</jk> PropertyFilter {
 	 *
-	 *			<jk>public</jk> Object readProperty(Object bean, String name, Object value) {
-	 *				<jk>if</jk> (<js>"taxInfo"</js>.equals(name))
-	 *					<jk>return</jk> <js>"redacted"</js>;
-	 *				<jk>return</jk> value;
-	 *			}
-	 *		}
-	 *	</p>	
+	 * 		<jk>public</jk> Object readProperty(Object bean, String name, Object value) {
+	 * 			<jk>if</jk> (<js>"taxInfo"</js>.equals(name))
+	 * 				<jk>return</jk> <js>"redacted"</js>;
+	 * 			<jk>return</jk> value;
+	 * 		}
+	 * 	}
+	 * </p>	
 	 *
 	 * @param bean The bean from which the property was read.
 	 * @param name The property name.
@@ -116,19 +116,19 @@ public class PropertyFilter {
 	 * Subclasses can override this property to convert property values to some other object just before calling the
 	 * bean setter.
 	 *
-	 *	<h5 class='section'>Example:</h5>
-	 *	<p class='bcode'>
-	 *		<jc>// Address filter that strips out sensitive information.</jc>
-	 *		<jk>public class</jk> AddressPropertyFilter <jk>extends</jk> PropertyFilter {
+	 * <h5 class='section'>Example:</h5>
+	 * <p class='bcode'>
+	 * 	<jc>// Address filter that strips out sensitive information.</jc>
+	 * 	<jk>public class</jk> AddressPropertyFilter <jk>extends</jk> PropertyFilter {
 	 *
-	 *			<jk>public</jk> Object writeProperty(Object bean, String name, Object value) {
-	 *				AddressBook a = (Address)bean;
-	 *				<jk>if</jk> (<js>"taxInfo"</js>.equals(name) && <js>"redacted"</js>.equals(value))
-	 *					<jk>return</jk> TaxInfoUtils.<jsm>lookup</jsm>(a.getStreet(), a.getCity(), a.getState());
-	 *				<jk>return</jk> value;
-	 *			}
-	 *		}
-	 *	</p>	
+	 * 		<jk>public</jk> Object writeProperty(Object bean, String name, Object value) {
+	 * 			AddressBook a = (Address)bean;
+	 * 			<jk>if</jk> (<js>"taxInfo"</js>.equals(name) && <js>"redacted"</js>.equals(value))
+	 * 				<jk>return</jk> TaxInfoUtils.<jsm>lookup</jsm>(a.getStreet(), a.getCity(), a.getState());
+	 * 			<jk>return</jk> value;
+	 * 		}
+	 * 	}
+	 * </p>	
 	 *
 	 * @param bean The bean from which the property was read.
 	 * @param name The property name.

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
index 122f033..ad8838e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
@@ -38,7 +38,7 @@ public class UonParser extends ReaderParser {
 	/**
 	 * Configuration property: Decode <js>"%xx"</js> sequences.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"UonParser.decoding.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -50,7 +50,7 @@ public class UonParser extends ReaderParser {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Specify <jk>true</jk> if URI encoded characters should be decoded, <jk>false</jk> if they've already been decoded
 	 * before being passed to this parser.

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
index 0f0ad07..1a93afe 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializer.java
@@ -125,7 +125,7 @@ public class UonSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Add <js>"_type"</js> properties when needed.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"UonSerializer.addBeanTypeProperties.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -137,7 +137,7 @@ public class UonSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
 	 * through reflection.
@@ -154,7 +154,7 @@ public class UonSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Encode non-valid URI characters.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"UonSerializer.encoding.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -167,7 +167,7 @@ public class UonSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Encode non-valid URI characters with <js>"%xx"</js> constructs.
 	 *
@@ -181,7 +181,7 @@ public class UonSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Format to use for query/form-data/header values.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"UrlEncodingSerializer.paramFormat.s"</js>
 	 * 	<li><b>Data type:</b>  <code>String</code> ({@link ParamFormat})
@@ -194,7 +194,7 @@ public class UonSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Specifies the format to use for URL GET parameter keys and values.
 	 */

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
index e7191cd..8dd9270 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
@@ -44,7 +44,7 @@ public class UrlEncodingParser extends UonParser {
 	/**
 	 * Configuration property:  Parser bean property collections/arrays as separate key/value pairs
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"UrlEncodingParser.expandedParams.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -56,7 +56,7 @@ public class UrlEncodingParser extends UonParser {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * This is the parser-side equivalent of the {@link #URLENC_expandedParams} setting.
 	 *

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
index cabb5b6..6482448 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java
@@ -120,7 +120,7 @@ public class UrlEncodingSerializer extends UonSerializer {
 	/**
 	 * Configuration property:  Serialize bean property collections/arrays as separate key/value pairs.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"UrlEncodingSerializer.expandedParams.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -133,7 +133,7 @@ public class UrlEncodingSerializer extends UonSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * If <jk>false</jk>, serializing the array <code>[1,2,3]</code> results in <code>?key=$a(1,2,3)</code>.
 	 * If <jk>true</jk>, serializing the same array results in <code>?key=1&amp;key=2&amp;key=3</code>.

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java
index ce1f34d..28df465 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/MessageBundle.java
@@ -351,7 +351,7 @@ public class MessageBundle extends ResourceBundle {
 	 *
 	 * <p>
 	 * Useful for debugging purposes.
-	 * Note that any class that implements a <code>toObjectMap()</code> method will automatically be serialized by
+	 * Note that any class that implements a <code>swap()</code> method will automatically be serialized by
 	 * calling this method and serializing the result.
 	 *
 	 * <p>
@@ -359,7 +359,7 @@ public class MessageBundle extends ResourceBundle {
 	 *
 	 * @return A new map containing all the keys and values in this bundle.
 	 */
-	public ObjectMap toObjectMap() {
+	public ObjectMap swap() {
 		ObjectMap om = new ObjectMap();
 		for (String k : allKeys)
 			om.put(k, getString(k));

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
index 96a3f8b..df6e8ef 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParser.java
@@ -40,7 +40,7 @@ public class XmlParser extends ReaderParser {
 	/**
 	 * Configuration property:  XML event allocator.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlParser.eventAllocator.c"</js>
 	 * 	<li><b>Data type:</b>  <code>Class&lt;? <jk>extends</jk> {@link XMLEventAllocator}&gt;</code>
@@ -52,7 +52,7 @@ public class XmlParser extends ReaderParser {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Associates an {@link XMLEventAllocator} with this parser.
 	 */
@@ -61,7 +61,7 @@ public class XmlParser extends ReaderParser {
 	/**
 	 * Configuration property:  Preserve root element during generalized parsing.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlParser.preserveRootElement.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -74,12 +74,12 @@ public class XmlParser extends ReaderParser {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * If <jk>true</jk>, when parsing into a generic {@link ObjectMap}, the map will contain a single entry whose key
 	 * is the root element name.
 	 *
-	 *	<h5 class='section'>Example:</h5>
+	 * <h5 class='section'>Example:</h5>
 	 * <table class='styled'>
 	 * 	<tr>
 	 * 		<td>XML</td>
@@ -98,7 +98,7 @@ public class XmlParser extends ReaderParser {
 	/**
 	 * Configuration property:  XML reporter.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlParser.reporter.c"</js>
 	 * 	<li><b>Data type:</b>  <code>Class&lt;? <jk>extends</jk> {@link XMLReporter}&gt;</code>
@@ -110,7 +110,7 @@ public class XmlParser extends ReaderParser {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Associates an {@link XMLReporter} with this parser.
 	 *
@@ -124,7 +124,7 @@ public class XmlParser extends ReaderParser {
 	/**
 	 * Configuration property:  XML resolver.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlParser.resolver.c"</js>
 	 * 	<li><b>Data type:</b>  <code>Class&lt;? <jk>extends</jk> {@link XMLResolver}&gt;</code>
@@ -136,7 +136,7 @@ public class XmlParser extends ReaderParser {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Associates an {@link XMLResolver} with this parser.
 	 */
@@ -145,7 +145,7 @@ public class XmlParser extends ReaderParser {
 	/**
 	 * Configuration property:  Enable validation.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlParser.validating.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -158,7 +158,7 @@ public class XmlParser extends ReaderParser {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * If <jk>true</jk>, XML document will be validated.
 	 * 

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index ea9a891..29cc1db 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -120,7 +120,7 @@ public class XmlSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Add <js>"_type"</js> properties when needed.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlSerializer.addBeanTypeProperties.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -132,7 +132,7 @@ public class XmlSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
 	 * through reflection.
@@ -149,7 +149,7 @@ public class XmlSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Add namespace URLs to the root element.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlSerializer.addNamespaceUrisToRoot.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -162,7 +162,7 @@ public class XmlSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Use this setting to add {@code xmlns:x} attributes to the root element for the default and all mapped namespaces.
 	 *
@@ -174,7 +174,7 @@ public class XmlSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Auto-detect namespace usage.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlSerializer.autoDetectNamespaces.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -186,7 +186,7 @@ public class XmlSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Detect namespace usage before serialization.
 	 *
@@ -213,7 +213,7 @@ public class XmlSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Default namespace.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlSerializer.defaultNamespace.s"</js>
 	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Namespace})
@@ -225,7 +225,7 @@ public class XmlSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Specifies the default namespace URI for this document.
 	 */
@@ -234,7 +234,7 @@ public class XmlSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Enable support for XML namespaces.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlSerializer.enableNamespaces.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -246,7 +246,7 @@ public class XmlSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * If not enabled, XML output will not contain any namespaces regardless of any other settings.
 	 */
@@ -255,7 +255,7 @@ public class XmlSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Default namespaces.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlSerializer.namespaces.ls"</js>
 	 * 	<li><b>Data type:</b>  <code>Set&lt;String&gt;</code> ({@link Namespace})
@@ -267,7 +267,7 @@ public class XmlSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * The default list of namespaces associated with this serializer.
 	 */
@@ -276,7 +276,7 @@ public class XmlSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  XMLSchema namespace.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"XmlSerializer.xsNamespace.s"</js>
 	 * 	<li><b>Data type:</b>  <code>String</code> ({@link Namespace})
@@ -288,7 +288,7 @@ public class XmlSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Specifies the namespace for the <code>XMLSchema</code> namespace, used by the schema generated by the
 	 * {@link XmlSchemaSerializer} class.

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlSerializer.java
index 8257bfb..e9e63fe 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/yaml/proto/YamlSerializer.java
@@ -87,7 +87,7 @@ public class YamlSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Add <js>"_type"</js> properties when needed.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"JsonSerializer.addBeanTypeProperties.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -99,7 +99,7 @@ public class YamlSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
 	 * through reflection.
@@ -116,7 +116,7 @@ public class YamlSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Prefix solidus <js>'/'</js> characters with escapes.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"JsonSerializer.escapeSolidus.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -128,7 +128,7 @@ public class YamlSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * If <jk>true</jk>, solidus (e.g. slash) characters should be escaped.
 	 * The JSON specification allows for either format.
@@ -140,7 +140,7 @@ public class YamlSerializer extends WriterSerializer {
 	/**
 	 * Configuration property:  Simple JSON mode.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"JsonSerializer.simpleMode.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -153,7 +153,7 @@ public class YamlSerializer extends WriterSerializer {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * If <jk>true</jk>, JSON attribute names will only be quoted when necessary.
 	 * Otherwise, they are always quoted.

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-doc/src/main/javadoc/overview.html
----------------------------------------------------------------------
diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html
index 903684b..d592213 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -105,11 +105,11 @@
 				<li><p><a class='doclink' href='#juneau-marshall.BeanIgnoreAnnotation'>@BeanIgnore Annotation</a></p>
 				<li><p><a class='doclink' href='#juneau-marshall.NamePropertyAnnotation'>@NameProperty Annotation</a></p>
 				<li><p><a class='doclink' href='#juneau-marshall.ParentPropertyAnnotation'>@ParentProperty Annotation</a></p>
-				<li><p><a class='doclink' href='#juneau-marshall.URIAnnotation'>@URI Annotation</a></p>
+				<li><p><a class='doclink' href='#juneau-marshall.URIs'>URIs</a></p>
 				<li><p><a class='doclink' href='#juneau-marshall.BeanFilters'>BeanFilters</a></p>
+				<li><p><a class='doclink' href='#juneau-marshall.InterfaceFilters'>Interface filters</a></p>
 				<li><p><a class='doclink' href='#juneau-marshall.StopClasses'>Stop Classes</a></p>
-				<li><p><a class='doclink' href='#juneau-marshall.SerializingToObjectMaps'>Serializing to ObjectMaps</a></p>
-				<li><p><a class='doclink' href='#juneau-marshall.SerializingReadersAndInputStreams'>Serializing Readers and InputStreams</a></p>
+				<li><p><a class='doclink' href='#juneau-marshall.BypassSerialization'>Bypass Serialization using Readers and InputStreams</a></p>
 			</ol>
 			<li><p><a class='doclink' href='#juneau-marshall.BeanDictionaries'>Bean Name and Dictionaries</a></p>
 			<ol>
@@ -2283,31 +2283,109 @@
 			</div>
 
 			<!-- =================================================================================================== -->
-			<a id="juneau-marshall.URIAnnotation"></a>
-			<h4 class='topic' onclick='toggle(this)'>2.1.7.14 - @URI Annotation</h4>
+			<a id="juneau-marshall.URIs"></a>
+			<h4 class='topic' onclick='toggle(this)'>2.1.7.14 - URIs</h4>
 			<div class='topic'>
 				<p>
-					The {@link org.apache.juneau.annotation.URI @URI} annotation is used to identify a class or bean 
-					property as a URI.
+					Juneau serializers have sophisticated support for transforming relative URIs to absolute form.
 				</p>
 				<p>
-					By default, instances of {@link java.net.URL} and {@link java.net.URI} are considered URIs during serialization and 
-					are handled differently depending on the serializer (e.g. <code>HtmlSerializer</code> creates a 
-					hyperlink, <code>RdfXmlSerializer</code> creates an <code>rdf:resource</code> object, etc...).
-					<br>This annotation allows you to identify other classes that return URIs via <code>toString()</code> 
-					as URI objects.
+					The following example shows a bean containing URIs of various forms and how they end up serialized. 
 				</p>
-				<p>
-					URIs are automatically resolved to absolute or root-relative form based on the serializer
-					{@link org.apache.juneau.serializer.Serializer#SERIALIZER_uriResolution} and 
-					{@link org.apache.juneau.serializer.Serializer#SERIALIZER_uriRelativity}
-					configuration settings, and the URI context defined by the {@link org.apache.juneau.UriContext} that's part of the 
-					serializer session.
-					<br>Refer to the {@link org.apache.juneau.UriResolver} class for information about the types of URIs that can be 
-					resolved during serialization.
+				<p class='bcode'>
+	<jc>// Our bean with properties containing various kinds of URIs.</jc>
+	<jk>public class</jk> TestURIs {
+		<jk>public</jk> URI
+			<jf>f1a</jf> = URI.<jsm>create</jsm>(<js>"http://www.apache.org/f1a"</js>),
+			<jf>f1b</jf> = URI.<jsm>create</jsm>(<js>"/f1b"</js>),
+			<jf>f1c</jf> = URI.<jsm>create</jsm>(<js>"/f1c/x/y"</js>),
+			<jf>f1d</jf> = URI.<jsm>create</jsm>(<js>"f1d"</js>),
+			<jf>f1e</jf> = URI.<jsm>create</jsm>(<js>"f1e/x/y"</js>),
+			<jf>f1f</jf> = URI.<jsm>create</jsm>(<js>""</js>),
+			<jf>f2a</jf> = URI.<jsm>create</jsm>(<js>"context:/f2a/x"</js>),
+			<jf>f2b</jf> = URI.<jsm>create</jsm>(<js>"context:/f2b"</js>),
+			<jf>f2c</jf> = URI.<jsm>create</jsm>(<js>"context:/"</js>),
+			<jf>f2d</jf> = URI.<jsm>create</jsm>(<js>"context:/.."</js>),
+			<jf>f3a</jf> = URI.<jsm>create</jsm>(<js>"servlet:/f3a/x"</js>),
+			<jf>f3b</jf> = URI.<jsm>create</jsm>(<js>"servlet:/f3b"</js>),
+			<jf>f3c</jf> = URI.<jsm>create</jsm>(<js>"servlet:/"</js>),
+			<jf>f3d</jf> = URI.<jsm>create</jsm>(<js>"servlet:/.."</js>),
+			<jf>f4a</jf> = URI.<jsm>create</jsm>(<js>"request:/f4a/x"</js>),
+			<jf>f4b</jf> = URI.<jsm>create</jsm>(<js>"request:/f4b"</js>),
+			<jf>f4c</jf> = URI.<jsm>create</jsm>(<js>"request:/"</js>),
+			<jf>f4d</jf> = URI.<jsm>create</jsm>(<js>"request:/.."</js>),
+			<jf>f5 </jf> = <jk>null</jk>;
+	}	
+	
+	<jc>// Create a serializer.</jc>
+	WriterSerializer s = JsonSerializer
+		<jsm>create</jsm>()
+		.simple()
+		.uriContext(<js>"{authority:'http://foo.com:123',contextRoot:'/myContext',servletPath:'/myServlet',pathInfo:'/myPath'}"</js>)
+		.uriResolution(<jsf>ABSOLUTE</jsf>)
+		.uriRelativity(<jsf>RESOURCE</jsf>)
+		.build();
+		
+	<jc>// Produces:</jc>
+	<jc>// {</jc>
+	<jc>//	f1a:'http://www.apache.org/f1a',</jc>
+	<jc>//	f1b:'http://foo.com:123/f1b',</jc>
+	<jc>//	f1c:'http://foo.com:123/f1c/x/y',</jc>
+	<jc>//	f1d:'http://foo.com:123/myContext/myServlet/f1d',</jc>
+	<jc>//	f1e:'http://foo.com:123/myContext/myServlet/f1e/x/y',</jc>
+	<jc>//	f1f:'http://foo.com:123/myContext/myServlet',</jc>
+	<jc>//	f2a:'http://foo.com:123/myContext/f2a/x',</jc>
+	<jc>//	f2b:'http://foo.com:123/myContext/f2b',</jc>
+	<jc>//	f2c:'http://foo.com:123/myContext',</jc>
+	<jc>//	f2d:'http://foo.com:123'</jc>
+	<jc>//	f3a:'http://foo.com:123/myContext/myServlet/f3a/x',</jc>
+	<jc>//	f3b:'http://foo.com:123/myContext/myServlet/f3b',</jc>
+	<jc>//	f3c:'http://foo.com:123/myContext/myServlet',</jc>
+	<jc>//	f3d:'http://foo.com:123/myContext',</jc>
+	<jc>//	f4a:'http://foo.com:123/myContext/myServlet/myPath/f4a/x',</jc>
+	<jc>//	f4b:'http://foo.com:123/myContext/myServlet/myPath/f4b',</jc>
+	<jc>//	f4c:'http://foo.com:123/myContext/myServlet/myPath',</jc>
+	<jc>//	f4d:'http://foo.com:123/myContext/myServlet',</jc>
+	<jc>// }</jc>
+	String json = s.serialize(<jk>new</jk> TestURIs());
+				</p>
+				<p>
+					URI resolution is controlled by the following settings:
 				</p>
+				<ul class='doctree'>
+					<li class='jf'>{@link org.apache.juneau.serializer.Serializer#SERIALIZER_uriContext}
+						<br>Setting that defines the URI contextual information used to resolve relative URIs.
+					<li class='jf'>{@link org.apache.juneau.serializer.Serializer#SERIALIZER_uriRelativity}
+						<br>Setting that defines how relative URIs should be interpreted.
+						<br>Possible values:
+						<ul>
+							<li class='jf'>{@link org.apache.juneau.UriRelativity#RESOURCE}
+								<br>Relative URIs should be considered relative to the servlet URI.
+								<br>(e.g. <js>"http://host:port/context-root/servlet-path"</js>).
+							<li class='jf'>{@link org.apache.juneau.UriRelativity#PATH_INFO}
+								<br>Relative URIs should be considered relative to the request URI.
+								<br>(e.g. <js>"http://host:port/context-root/servlet-path/path-info"</js>).
+						</ul>
+					<li class='jf'>{@link org.apache.juneau.serializer.Serializer#SERIALIZER_uriResolution}
+						<br>Setting that defines the final format of serialized URIs.
+						<br>Possible values:
+						<ul>
+							<li class='jf'>{@link org.apache.juneau.UriResolution#ABSOLUTE}
+								<br>Resolve to an absolute URL.
+								<br>(e.g. <js>"http://host:port/context-root/servlet-path/path-info"</js>).
+							<li class='jf'>{@link org.apache.juneau.UriResolution#ROOT_RELATIVE}
+								<br>Resolve to a root-relative URL.
+								<br>(e.g. <js>"/context-root/servlet-path/path-info"</js>).
+							<li class='jf'>{@link org.apache.juneau.UriResolution#NONE}
+								<br>Don't do any URL resolution.
+						</ul>
+				</ul>
 				<p>
-					This annotation can be applied to classes, interfaces, or bean property methods for fields.
+					Juneau automatically interprets any {@link java.net.URL} and {@link java.net.URI} objects as URIs and will
+					resolve them accordingly.
+					<br>The {@link org.apache.juneau.annotation.URI @URI} annotation can be used to extend that to other bean 
+					properties and class types so that they also get interpreted as URIs.
+					<br>For example:
 				</p>
 				<p class='bcode'>
 	<jc>// Applied to a class whose toString() method returns a URI.</jc>
@@ -2423,133 +2501,163 @@
 			</div>
 
 			<!-- =================================================================================================== -->
-			<a id="juneau-marshall.StopClasses"></a>
-			<h4 class='topic' onclick='toggle(this)'>2.1.7.16 - Stop Classes</h4>
+			<a id="juneau-marshall.InterfaceFilters"></a>
+			<h4 class='topic' onclick='toggle(this)'>2.1.7.16 - Interface Filters</h4>
 			<div class='topic'>
 				<p>
 					Occasionally, you may want to limit bean properties to only those defined on a parent class or interface.  
-					<br>There are a couple of ways of doing this.
+					<br>This is accomplished through interface filters.
 				</p>
 				<p>
-					For example, let's define the following parent class and subclass:
+					Interface filters are defined through the following:
+				</p>
+				<ul>
+					<li class='jf'>{@link org.apache.juneau.BeanContext#BEAN_beanFilters}
+					<li class='ja'>{@link org.apache.juneau.annotation.Bean#interfaceClass() @Bean.interfaceClass()}
+					<li class='jm'>{@link org.apache.juneau.transform.BeanFilterBuilder#interfaceClass(Class)}
+				</ul>
+				<p>
+					For example, let's define the following interface and implementation:
 				</p>
 				<p class='bcode'>
-	<jc>// Abstract parent class</jc>
-	<jk>public abstract class</jk> MyClass {
-		<jk>public</jk> String <jf>foo</jf>=<js>"foo"</js>;
+	<jc>// Interface</jc>
+	<jk>public class</jk> MyInterface {
+		<jk>public</jk> String getFoo();
 	}
 
-	<jc>// Subclass</jc>
-	<jk>public class</jk> MyClassBar <jk>extends</jk> MyClass {
-		<jk>public</jk> String <jf>bar</jf>=<js>"bar"</js>;
+	<jc>// Implementation</jc>
+	<jk>public class</jk> MyInterfaceImpl <jk>implements</jk> MyInterface {
+		<jk>public</jk> String getFoo() {...}
+		<jk>public</jk> String getBar() {...}
 	}
 				</p>
 				<p>
-					Suppose we only want to render the properties defined on <code>MyClass</code>, not those defined on 
-					child classes. 
+					Suppose we only want to render the properties defined on our interface, not the implementation. 
 					<br>To do so, we can define the following bean filter:
 				</p>
 				<p class='bcode'>
 	<jc>// Define transform that limits properties to only those defined on MyClass</jc>
-	<jk>public class</jk> MyBeanFilter <jk>extends</jk> BeanFilter&lt;MyClass&gt; {
-		<jk>public</jk> MyBeanFilter() {
-			interfaceClass(MyClass.<jk>class</jk>);
+	<jk>public class</jk> MyInterfaceFilter <jk>extends</jk> BeanFilter&lt;MyInterface&gt; {
+		<jk>public</jk> MyInterfaceFilter() {
+			interfaceClass(MyInterface.<jk>class</jk>);
 		}
 	}
 				</p>
 				<p>
-					When serialized, the serialized bean will only include properties defined on the parent class.
+					When serialized, the serialized bean will only include properties defined on the interface.
 				</p>
 				<p class='bcode'>
 	WriterSerializer s = JsonSerializer
 		.<jsm>create</jsm>()
 		.simple()
-		.beanFilters(MyBeanFilter.<jk>class</jk>)
+		.beanFilters(MyInterfaceFilter.<jk>class</jk>)
 		.build();
 		
-	MyClass c = <jk>new</jk> MyClassBar();
-	String json = s.serialize(p);  <jc>// Prints "{foo:'foo'}"</jc>
+	MyInterface o = <jk>new</jk> MyInterfaceImpl();
+	
+	<jc>// Prints "{foo:'foo'}"</jc>
+	<jc>// bar is ignored because it's not on the interface</jc>
+	String json = s.serialize(o);  
 				</p>	
 				<p>
-					The equivalent can be done through an annotation on the parent class, which applies to all child classes:
+					The {@link org.apache.juneau.BeanContextBuilder#beanFilters(Object...)} method will automatically interpret any 
+					non-<code>BeanFilter</code> classes passed in as meaning interface classes. 
+					<br>So in the previous example, the <code>BeanFilter</code> class could have been avoided altogether by just 
+					passing in <code>MyInterface.<jk>class</jk></code> to the serializer, like so:
 				</p>
 				<p class='bcode'>
-	<jc>// All subclasses of MyClass should only show the 'foo' property.</jc>
-	<ja>@Bean</ja>(interfaceClass=MyClass.<jk>class</jk>)
-	<jk>public abstract class</jk> MyClass {
-		<jk>public</jk> String <jf>foo</jf>=<js>"foo"</js>;
-	}
+	WriterSerializer s = JsonSerializer
+		.<jsm>create</jsm>()
+		.beanFilters(MyInterface.<jk>class</jk>)  <jc>Shortcut!</jc>
+		.build();
 				</p>
 				<p>
-					The annotation can also be applied on the individual child classes, like so...
+					The annotation equivalent is {@link org.apache.juneau.annotation.Bean#interfaceClass() Bean#interfaceClass()}.
 				</p>
 				<p class='bcode'>
-	<jc>// Only serialize 'foo' property from parent class.</jc>
-	<ja>@Bean</ja>(interfaceClass=MyClass.<jk>class</jk>)
-	<jk>public class</jk> MyClassBar <jk>extends</jk> MyClass {
-		<jk>public</jk> String <jf>bar</jf>=<js>"bar"</js>;
+	<ja>@Bean</ja>(interfaceClass=MyInterface.<jk>class</jk>)
+	<jk>public class</jk> MyInterfaceImpl <jk>implements</jk> MyInterface {
+		<jk>public</jk> String getFoo() {...}
+		<jk>public</jk> String getBar() {...}
 	}
 				</p>
 				<p>
-					Also, the <code>beanFilters()</code> methods will automatically interpret any non-<code>BeanFilter</code> 
-					classes passed in as meaning interface classes. 
-					<br>So in the previous example, the <code>BeanFilter</code> class could have been avoided altogether by just 
-					passing in <code>MyClass.<jk>class</jk></code> to the serializer, like so:
+					The annotation can be used in a couple of ways.
+				</p>
+				<p>
+					Using the annotation on an interface will be inherited by all children.
 				</p>
 				<p class='bcode'>
-	WriterSerializer s = JsonSerializer
-		.<jsm>create</jsm>()
-		.beanFilters(MyClass.<jk>class</jk>)  <jc>Shortcut!</jc>
-		.build();
+	<ja>@Bean</ja>(interfaceClass=MyInterface.<jk>class</jk>)
+	<jk>public class</jk> MyInterface {
+		<jk>public</jk> String getFoo();
+	}
 				</p>
 				<p>
-					The {@link org.apache.juneau.transform.BeanFilterBuilder#stopClass(Class)} method and 
-					{@link org.apache.juneau.annotation.Bean#stopClass() @Bean.stopClass()} annotation are equivalent,
-					but filters from the other direction.
-					<br>(i.e. filter out properties found on parent classes and interfaces)
+					The annotation can be used on parent classes as well.
+					<br>Child beans will only serialize properties defined on the parent class.
+				<p class='bcode'>
+	<ja>@Bean</ja>(interfaceClass=MyAbstractClass.<jk>class</jk>)
+	<jk>public abstract class</jk> MyAbstractClass {
+		<jk>public</jk> String getFoo() {...};
+	}
+				</p>
 			</div>
-
+			
 			<!-- =================================================================================================== -->
-			<a id="juneau-marshall.SerializingToObjectMaps"></a>
-			<h4 class='topic' onclick='toggle(this)'>2.1.7.17 - Serializing to ObjectMaps</h4>
+			<a id="juneau-marshall.StopClasses"></a>
+			<h4 class='topic' onclick='toggle(this)'>2.1.7.17 - Stop Classes</h4>
 			<div class='topic'>
 				<p>
-					A shortcut method for transforming is provided that can often be simpler than defining transforms.
-					In this case, we add methods to our class to serialize to {@link org.apache.juneau.ObjectMap ObjectMaps}
+					Whereas interface filters limit properties defined on child classes, stop filters 
+					do the opposite and limit properties defined on parent classes.
 				</p>
 				<p>
-				<p class='bcode'>
-	<jk>public class</jk> MyClass {
-		<jk>private</jk> String <jf>f1</jf>;
-		
-		<jc>// Constructor that takes in an ObjectMap</jc>
-		<jk>public</jk> MyClass(ObjectMap m) {
-			<jf>f1</jf> = m.getString(<js>"f1"</js>);
-		}
-		
-		<jc>// Method that converts object to an ObjectMap</jc>
-		<jk>public</jk> ObjectMap toObjectMap() {
-			<jk>return new</jk> ObjectMap().append(<js>"f1"</js>, <jf>f1</jf>);
-		}
+					Stop classes are defined through the following:
 				</p>
+				<ul>
+					<li class='ja'>{@link org.apache.juneau.annotation.Bean#stopClass() @Bean.stopClass()}
+					<li class='jf'>{@link org.apache.juneau.transform.BeanFilterBuilder#stopClass(Class)}
+				</ul>
 				<p>
-					The <code>toObjectMap()</code> method will automatically be used during serialization, and 
-					the constructor will automatically be used during parsing.
-					This will work for all serializers and parsers.
+					Stop classes are identical in purpose to the stop class specified by {@link java.beans.Introspector#getBeanInfo(Class, Class)}.
+					<br>Any properties in the stop class or in its base classes will be ignored during serialization.
+				</p>
+				<p>
+					For example, in the following class hierarchy, instances of <code>C3</code> will include property <code>p3</code>,
+					but not <code>p1</code> or <code>p2</code>.
+				</p>
+				<p class='bcode'>
+	<jk>public class</jk> C1 {
+		<jk>public int</jk> getP1();
+	}
+
+	<jk>public class</jk> C2 <jk>extends</jk> C1 {
+		<jk>public int</jk> getP2();
+	}
+
+	<ja>@Bean</ja>(stopClass=C2.<jk>class</jk>)
+	<jk>public class</jk> C3 <jk>extends</jk> C2 {
+		<jk>public int</jk> getP3();
+	}
+	
+	<jc>// Serializes property 'p3', but NOT 'p1' or 'p2'.</jc>
+	String json = JsonSerializer.<jsf>DEFAULT</jsf>.serialize(<jk>new</jk> C3());
 				</p>
 			</div>
 
 			<!-- =================================================================================================== -->
-			<a id="juneau-marshall.SerializingReadersAndInputStreams"></a>
-			<h4 class='topic' onclick='toggle(this)'>2.1.7.18 - Serializing Readers and InputStreams</h4>
+			<a id="juneau-marshall.BypassSerialization"></a>
+			<h4 class='topic' onclick='toggle(this)'>2.1.7.18 - Bypass Serialization using Readers and InputStreams</h4>
 			<div class='topic'>
 				<p>
 					Juneau serializers treat instances of <code>Readers</code> and <code>InputStreams</code> special by 
 					simply serializing their contents directly to the output stream or writer.
-					This allows you to embed fully customized serializer output.
+					<br>This allows you to embed fully customized serializer output.
 				</p>
 				<p class='bcode'>
 	<jk>public class</jk> MyBean {
+		<jc>// A bean property that produces raw JSON.</jc>
 		<jk>public</jk> Reader f1 = <jk>new</jk> StringReader(<js>"{'foo':'bar'}"</js>);	
 	}	
 	
@@ -2570,6 +2678,8 @@
 	<ja>@Swap</ja>(MyBeanSwapSometimes.<jk>class</jk>)
 	<jk>public class</jk> MyBean {...}
 	
+	<jc>// A swap that produces specialized output for JSON, but default serialization for</jc>
+	<jc>// all other media types.</jc>
 	<jk>public class</jk> MyBeanSwapSometimes <jk>extends</jk> PojoSwap&lt;MyBean,Object&gt; {
 		<jk>public</jk> Object swap(BeanSession session, MyPojo o) <jk>throws</jk> Exception {
 			MediaType mt = session.getMediaType();
@@ -9028,14 +9138,27 @@
 				Code for marshalling of parts have been removed from the URL-Encoding serializers and parsers.
 			<li>	
 				<code>ContextBuilder.property(String,Object)</code> renamed to {@link org.apache.juneau.ContextBuilder#set(String,Object)}.
-			<li><code>ResourceFinder</code> class has been replaced with the following:
+			<li>
+				<code>ResourceFinder</code> class has been replaced with the following:
 				<ul>
 					<li>{@link org.apache.juneau.utils.ClasspathResourceFinder}
 					<li>{@link org.apache.juneau.utils.ClasspathResourceFinderSimple}
 					<li>{@link org.apache.juneau.utils.ClasspathResourceFinderBasic}
 					<li>{@link org.apache.juneau.utils.ClasspathResourceFinderRecursive}
 					<li>{@link org.apache.juneau.utils.ClasspathResourceManager}
-				</ul>	
+				</ul>
+			<li>
+				New methods on {@link org.apache.juneau.serializer.SerializerSession}:
+				<ul>
+					<li>{@link org.apache.juneau.serializer.SerializerSession#getListener() getListener()}
+					<li>{@link org.apache.juneau.serializer.SerializerSession#getListener(Class) getListener(Class)}
+				</ul>
+			<li>
+				New methods on {@link org.apache.juneau.parser.ParserSession}:
+				<ul>
+					<li>{@link org.apache.juneau.parser.ParserSession#getListener() getListener()}
+					<li>{@link org.apache.juneau.parser.ParserSession#getListener(Class) getListener(Class)}
+				</ul>
 		</ul>
 
 		<h6 class='topic'>juneau-rest-server</h6>

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java
----------------------------------------------------------------------
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java
index ba064a2..b0e91e5 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java
@@ -124,12 +124,12 @@ public final class RestCall extends BeanSession {
 	 *
 	 * <p>
 	 * Can be any of the following types:
-	 *	<ul>
-	 *		<li>{@link URI}
-	 *		<li>{@link URL}
-	 *		<li>{@link URIBuilder}
-	 *		<li>Anything else converted to a string using {@link Object#toString()}.
-	 *	</ul>
+	 * <ul>
+	 * 	<li>{@link URI}
+	 * 	<li>{@link URL}
+	 * 	<li>{@link URIBuilder}
+	 * 	<li>Anything else converted to a string using {@link Object#toString()}.
+	 * </ul>
 	 *
 	 * <p>
 	 * Relative URL strings will be interpreted as relative to the root URL defined on the client.

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
----------------------------------------------------------------------
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 2d62063..30ff8c6 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -73,7 +73,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Debug.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.debug.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -84,7 +84,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Enable debug mode.
 	 */
@@ -93,7 +93,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Executor service.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.executorService.o"</js>
 	 * 	<li><b>Data type:</b>  <code>Class&lt;? <jk>implements</jk> ExecutorService&gt;</code> or {@link ExecutorService}.
@@ -104,8 +104,8 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 * 
-	 *	<h5 class='section'>Description:</h5>
-	 *	<p>
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
 	 * Defines the executor service to use when calling future methods on the {@link RestCall} class.
 	 *
 	 * <p>
@@ -126,7 +126,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Shut down executor service on close.</b>  
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.executorServiceShutdownOnClose.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -137,7 +137,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Call {@link ExecutorService#shutdown()} when {@link RestClient#close()} is called.
 	 */
@@ -146,7 +146,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Request headers.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.requestHeader.sms"</js>
 	 * 	<li><b>Data type:</b>  <code>Map&lt;String,String&gt;</code>
@@ -158,7 +158,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Headers to add to every request.
 	 */
@@ -167,7 +167,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Call interceptors.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.interceptors.lo"</js>
 	 * 	<li><b>Data type:</b>  <code>List&lt;Class&lt;? <jk>implements</jk> RestCallInterceptor | RestCallInterceptor</code>&gt;</code>
@@ -178,8 +178,8 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 * 
-	 *	<h5 class='section'>Description:</h5>
-	 *	<p>
+	 * <h5 class='section'>Description:</h5>
+	 * <p>
 	 * Interceptors that get called immediately after a connection is made.
 	 */
 	public static final String RESTCLIENT_interceptors = PREFIX + "interceptors.lo";
@@ -192,7 +192,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Keep HttpClient open.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.keepHttpClientOpen.b"</js>
 	 * 	<li><b>Data type:</b>  <code>Boolean</code>
@@ -203,7 +203,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Don't close this client when the {@link RestClient#close()} method is called.
 	 */
@@ -212,7 +212,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Parser.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.parser.o"</js>
 	 * 	<li><b>Data type:</b>  <code>Class&lt;? <jk>extends</jk> Parser&gt;</code> or {@link Parser}.
@@ -224,7 +224,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 * 
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * The parser to use for parsing POJOs in response bodies.
 	 */
@@ -233,7 +233,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Part serializer.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.urlEncodingSerializer.o"</js>
 	 * 	<li><b>Data type:</b>  <code>Class&lt;? <jk>implements</jk> HttpPartSerializer&gt;</code> or {@link HttpPartSerializer}.
@@ -245,7 +245,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 * 
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * The serializer to use for serializing POJOs in form data, query parameters, headers, and path variables.
 	 */
@@ -254,7 +254,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Request query parameters.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.query.sms"</js>
 	 * 	<li><b>Data type:</b>  <code>Map&lt;String,String&gt;</code>
@@ -265,7 +265,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Query parameters to add to every request.
 	 */
@@ -274,7 +274,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Number of retries to attempt.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.retries.i"</js>
 	 * 	<li><b>Data type:</b>  <code>Integer</code>
@@ -285,7 +285,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * The number of retries to attempt when the connection cannot be made or a <code>&gt;400</code> response is received.
 	 */
@@ -294,7 +294,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  The time in milliseconds between retry attempts.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.retryInterval.i"</js>
 	 * 	<li><b>Data type:</b>  <code>Integer</code>
@@ -305,7 +305,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * The time in milliseconds between retry attempts.
 	 * <code>-1</code> means retry immediately.
@@ -315,7 +315,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Retry-on determination object.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.retryOn.o"</js>
 	 * 	<li><b>Data type:</b>  <code>Class&lt;? extends {@link RetryOn}</code> or {@link RetryOn}
@@ -326,7 +326,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * Object used for determining whether a retry should be attempted.
 	 */
@@ -335,7 +335,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Root URI.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.rootUri.s"</js>
 	 * 	<li><b>Data type:</b>  <code>String</code>
@@ -346,7 +346,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 *
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * When set, relative URL strings passed in through the various rest call methods (e.g. {@link RestClient#doGet(Object)}
 	 * will be prefixed with the specified root.
@@ -358,7 +358,7 @@ public class RestClient extends BeanContext {
 	/**
 	 * Configuration property:  Serializer.
 	 *
-	 *	<h5 class='section'>Property:</h5>
+	 * <h5 class='section'>Property:</h5>
 	 * <ul>
 	 * 	<li><b>Name:</b>  <js>"RestClient.serializer.o"</js>
 	 * 	<li><b>Data type:</b>  <code>Class&lt;? <jk>extends</jk> Serializer&gt;</code> or {@link Serializer}.
@@ -370,7 +370,7 @@ public class RestClient extends BeanContext {
 	 * 		</ul>
 	 * </ul>
 	 * 
-	 *	<h5 class='section'>Description:</h5>
+	 * <h5 class='section'>Description:</h5>
 	 * <p>
 	 * The serializer to use for serializing POJOs in request bodies.
 	 */

http://git-wip-us.apache.org/repos/asf/juneau/blob/0ab0b231/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ReaderResource.java
----------------------------------------------------------------------
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ReaderResource.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ReaderResource.java
index a085127..c187616 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ReaderResource.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/ReaderResource.java
@@ -72,7 +72,7 @@ public class ReaderResource implements Writable {
 	 * 		<li><code>Reader</code> - Converted to UTF-8 bytes.
 	 * 		<li><code>File</code>
 	 * 		<li><code>CharSequence</code> - Converted to UTF-8 bytes.
-	 *		</ul>
+	 * 	</ul>
 	 * @throws IOException
 	 */
 	public ReaderResource(MediaType mediaType, Map<String,String> headers, VarResolverSession varSession, Object...contents) throws IOException {
@@ -149,7 +149,7 @@ public class ReaderResource implements Writable {
 		 * 		<li><code>Reader</code> - Converted to UTF-8 bytes.
 		 * 		<li><code>File</code>
 		 * 		<li><code>CharSequence</code> - Converted to UTF-8 bytes.
-		 *		</ul>
+		 * 	</ul>
 		 * @return This object (for method chaining).
 		 */
 		public Builder contents(Object...contents) {