http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java 
b/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
index aefcb6e..e84e593 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
@@ -40,6 +40,14 @@ import org.apache.juneau.annotation.*;
  */
 public abstract class WriterSerializer extends Serializer {
 
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       protected WriterSerializer(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
        @Override /* Serializer */
        public boolean isWriterSerializer() {
                return true;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/serializer/package.html
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/serializer/package.html 
b/juneau-core/src/main/java/org/apache/juneau/serializer/package.html
index 06fcb84..00e5568 100644
--- a/juneau-core/src/main/java/org/apache/juneau/serializer/package.html
+++ b/juneau-core/src/main/java/org/apache/juneau/serializer/package.html
@@ -125,7 +125,7 @@
        }
        </p>
        <p>
-               Serializer that take advantage of the entire {@link 
org.apache.juneau.CoreApi} interface to be able to serialize arbitrary beans 
and POJOs is
+               Serializer that take advantage of the entire {@link 
org.apache.juneau.CoreObject} interface to be able to serialize arbitrary beans 
and POJOs is
                        considerably more complex and outside the scope of this 
document.<br>  
                If developing such a serializer, the best course of action 
would be to replicate what occurs in the {@link 
org.apache.juneau.json.JsonSerializer} class.
        </p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java 
b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
index a3a94b5..707402e 100644
--- a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
@@ -43,6 +43,15 @@ import org.apache.juneau.xml.*;
 @Produces(value="text/xml+soap",contentType="text/xml")
 public final class SoapXmlSerializer extends XmlSerializer {
 
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       public SoapXmlSerializer(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+
        
//--------------------------------------------------------------------------------
        // Overridden methods
        
//--------------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
 
b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
new file mode 100644
index 0000000..cbf8e36
--- /dev/null
+++ 
b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
@@ -0,0 +1,590 @@
+// 
***************************************************************************************************************************
+// * 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.soap;
+
+import static org.apache.juneau.soap.SoapXmlSerializerContext.*;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.xml.*;
+
+/**
+ * Builder class for building instances of soap/xml serializers.
+ */
+public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
+
+       /**
+        * Constructor, default settings.
+        */
+       public SoapXmlSerializerBuilder() {
+               super();
+       }
+
+       /**
+        * Constructor.
+        * @param propertyStore The initial configuration settings for this 
builder.
+        */
+       public SoapXmlSerializerBuilder(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializer build() {
+               return new SoapXmlSerializer(propertyStore);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Properties
+       
//--------------------------------------------------------------------------------
+
+       /**
+        * <b>Configuration property:</b>  The <code>SOAPAction</code> HTTP 
header value to set on responses.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"SoapXmlSerializer.SOAPAction"</js>
+        *      <li><b>Data type:</b> <code>String</code>
+        *      <li><b>Default:</b> 
<js>"http://www.w3.org/2003/05/soap-envelope";</js>
+        * </ul>
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>SOAPXML_SOAPAction</jsf>, value)</code>.
+        *      <li>This introduces a slight performance penalty.
+        * </ul>
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see SoapXmlSerializerContext#SOAPXML_SOAPAction
+        */
+       public SoapXmlSerializerBuilder uriAnchorText(String value) {
+               return property(SOAPXML_SOAPAction, value);
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public SoapXmlSerializerBuilder enableNamespaces(boolean value) {
+               super.enableNamespaces(value);
+               return this;
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public SoapXmlSerializerBuilder autoDetectNamespaces(boolean value) {
+               super.autoDetectNamespaces(value);
+               return this;
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public SoapXmlSerializerBuilder addNamespaceUrisToRoot(boolean value) {
+               super.addNamespaceUrisToRoot(value);
+               return this;
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public SoapXmlSerializerBuilder defaultNamespace(String value) {
+               super.defaultNamespace(value);
+               return this;
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public SoapXmlSerializerBuilder xsNamespace(Namespace value) {
+               super.xsNamespace(value);
+               return this;
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public SoapXmlSerializerBuilder namespaces(Namespace...values) {
+               super.namespaces(values);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder maxDepth(int value) {
+               super.maxDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder initialDepth(int value) {
+               super.initialDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder detectRecursions(boolean value) {
+               super.detectRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder ignoreRecursions(boolean value) {
+               super.ignoreRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder useWhitespace(boolean value) {
+               super.useWhitespace(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder ws() {
+               super.ws();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder addBeanTypeProperties(boolean value) {
+               super.addBeanTypeProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder quoteChar(char value) {
+               super.quoteChar(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder sq() {
+               super.sq();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder trimNullProperties(boolean value) {
+               super.trimNullProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder trimEmptyCollections(boolean value) {
+               super.trimEmptyCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder trimEmptyMaps(boolean value) {
+               super.trimEmptyMaps(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder trimStrings(boolean value) {
+               super.trimStrings(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder relativeUriBase(String value) {
+               super.relativeUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder absolutePathUriBase(String value) {
+               super.absolutePathUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder sortCollections(boolean value) {
+               super.sortCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public SoapXmlSerializerBuilder sortMaps(boolean value) {
+               super.sortMaps(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beansRequireDefaultConstructor(boolean 
value) {
+               super.beansRequireDefaultConstructor(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beansRequireSerializable(boolean value) 
{
+               super.beansRequireSerializable(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beansRequireSettersForGetters(boolean 
value) {
+               super.beansRequireSettersForGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beansRequireSomeProperties(boolean 
value) {
+               super.beansRequireSomeProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beanMapPutReturnsOldValue(boolean 
value) {
+               super.beanMapPutReturnsOldValue(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beanConstructorVisibility(Visibility 
value) {
+               super.beanConstructorVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beanClassVisibility(Visibility value) {
+               super.beanClassVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beanFieldVisibility(Visibility value) {
+               super.beanFieldVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder methodVisibility(Visibility value) {
+               super.methodVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder useJavaBeanIntrospector(boolean value) {
+               super.useJavaBeanIntrospector(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder useInterfaceProxies(boolean value) {
+               super.useInterfaceProxies(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder ignoreUnknownBeanProperties(boolean 
value) {
+               super.ignoreUnknownBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder ignoreUnknownNullBeanProperties(boolean 
value) {
+               super.ignoreUnknownNullBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder ignorePropertiesWithoutSetters(boolean 
value) {
+               super.ignorePropertiesWithoutSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder 
ignoreInvocationExceptionsOnGetters(boolean value) {
+               super.ignoreInvocationExceptionsOnGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder 
ignoreInvocationExceptionsOnSetters(boolean value) {
+               super.ignoreInvocationExceptionsOnSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder sortProperties(boolean value) {
+               super.sortProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder notBeanPackages(String...values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder notBeanPackages(Collection<String> 
values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder setNotBeanPackages(String...values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder setNotBeanPackages(Collection<String> 
values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder removeNotBeanPackages(String...values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder 
removeNotBeanPackages(Collection<String> values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder notBeanClasses(Class<?>...values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder notBeanClasses(Collection<Class<?>> 
values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder setNotBeanClasses(Class<?>...values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder setNotBeanClasses(Collection<Class<?>> 
values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder removeNotBeanClasses(Class<?>...values) 
{
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder 
removeNotBeanClasses(Collection<Class<?>> values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beanFilters(Class<?>...values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beanFilters(Collection<Class<?>> 
values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder setBeanFilters(Class<?>...values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder setBeanFilters(Collection<Class<?>> 
values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder removeBeanFilters(Class<?>...values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder removeBeanFilters(Collection<Class<?>> 
values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder pojoSwaps(Class<?>...values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder pojoSwaps(Collection<Class<?>> values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder setPojoSwaps(Class<?>...values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder setPojoSwaps(Collection<Class<?>> 
values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder removePojoSwaps(Class<?>...values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder removePojoSwaps(Collection<Class<?>> 
values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder implClasses(Map<Class<?>,Class<?>> 
values) {
+               super.implClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public <T> SoapXmlSerializerBuilder implClass(Class<T> interfaceClass, 
Class<? extends T> implClass) {
+               super.implClass(interfaceClass, implClass);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beanDictionary(Class<?>...values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beanDictionary(Collection<Class<?>> 
values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder setBeanDictionary(Class<?>...values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder setBeanDictionary(Collection<Class<?>> 
values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder 
removeFromBeanDictionary(Class<?>...values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder 
removeFromBeanDictionary(Collection<Class<?>> values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder beanTypePropertyName(String value) {
+               super.beanTypePropertyName(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder defaultParser(Class<?> value) {
+               super.defaultParser(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder locale(Locale value) {
+               super.locale(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder timeZone(TimeZone value) {
+               super.timeZone(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder mediaType(MediaType value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder debug(boolean value) {
+               super.debug(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder property(String name, Object value) {
+               super.property(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder properties(Map<String,Object> 
properties) {
+               super.properties(properties);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder addToProperty(String name, Object 
value) {
+               super.addToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder putToProperty(String name, Object key, 
Object value) {
+               super.putToProperty(name, key, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder putToProperty(String name, Object 
value) {
+               super.putToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder removeFromProperty(String name, Object 
value) {
+               super.removeFromProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder classLoader(ClassLoader classLoader) {
+               super.classLoader(classLoader);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public SoapXmlSerializerBuilder apply(PropertyStore copyFrom) {
+               super.apply(copyFrom);
+               return this;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/MapVar.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/MapVar.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/MapVar.java
index c9561e6..85b830f 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/MapVar.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/MapVar.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.svl;
 
 import static org.apache.juneau.internal.ThrowableUtils.*;
+
 import java.util.*;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/Var.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/Var.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/Var.java
index 026d515..29dc5f2 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/Var.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/Var.java
@@ -27,7 +27,7 @@ import java.io.*;
  *     <li>{@link #resolve(VarResolverSession,String)} - For simple vars.
  *     <li>{@link #resolveTo(VarResolverSession,Writer,String)} - For streamed 
vars.
  * </ul>
- * Subclasses MUST implement a no-arg constructor so that class names can be 
passed to the {@link VarResolver#addVars(Class...)} method.
+ * Subclasses MUST implement a no-arg constructor so that class names can be 
passed to the {@link VarResolverBuilder#vars(Class...)} method.
  * They must also be thread safe!
  * <p>
  * Two direct abstract subclasses are provided to differentiated between 
simple and streamed vars:

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java
index 55ef915..deb3eb3 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java
@@ -12,13 +12,10 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.svl;
 
-import static java.text.MessageFormat.*;
-import static org.apache.juneau.svl.VarResolverContext.*;
 
 import java.io.*;
 import java.util.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.ini.*;
 import org.apache.juneau.svl.vars.*;
 
@@ -28,7 +25,7 @@ import org.apache.juneau.svl.vars.*;
  * Variables are of the form <code>$X{key}</code>, where <code>X</code> can 
consist of zero or more ASCII characters.<br>
  *     The variable key can contain anything, even nested variables that get 
recursively resolved.
  * <p>
- * Variables are defined through the {@link #addVars(Class[])} method.
+ * Variables are defined through the {@link VarResolverBuilder#vars(Class[])} 
method.
  * <p>
  * The {@link Var} interface defines how variables are converted to values.
  * <p>
@@ -60,7 +57,6 @@ import org.apache.juneau.svl.vars.*;
  * <p>
  * Context objects are arbitrary objects associated with this var resolver, 
such as
  *     a {@link ConfigFile} object.
- * They are set through the {@link #setContextObject(String, Object)} method.
  * They can be any class type.
  * <p>
  * Context objects can be retrieved by {@link Var} classes through the {@link 
VarResolverSession#getSessionObject(Class, String)} method.
@@ -78,22 +74,22 @@ import org.apache.juneau.svl.vars.*;
  *     that are identical to {@link VarResolver#resolve(String)} and {@link 
VarResolver#resolveTo(String, Writer)} except that the <code>Var</code> objects
  *     have access to the session objects through the {@link 
VarResolverSession#getSessionObject(Class, String)} method.
  * <p>
- * Session objects are specified through either the {@link 
#createSession(Map)} method or the {@link 
VarResolverSession#setSessionObject(String, Object)} methods.
+ * Session objects are specified through either the {@link 
#createSession(Map)} method or the {@link 
VarResolverSession#sessionObject(String, Object)} methods.
  *
  * <h6 class='topic'>Cloning</h6>
  * <p>
- * Var resolvers can be cloned by using the {@link #clone()} method.
+ * Var resolvers can be cloned by using the {@link #builder()} method.
  * Cloning a resolver will copy it's {@link Var} class names and context 
objects.
  * <p>
  * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  *     <jc>// Create a resolver that copies the default resolver and adds $C 
and $ARG vars.</jc>
- *     VarResolver myVarResolver = 
VarResolver.<jsf>DEFAULT</jsf>.clone().addVars(ConfigVar.<jk>class</jk>, 
ArgsVar.<jk>class</jk>);
+ *     VarResolver myVarResolver = 
VarResolver.<jsf>DEFAULT</jsf>.builder().vars(ConfigVar.<jk>class</jk>, 
ArgsVar.<jk>class</jk>).build();
  * </p>
  *
  * @see org.apache.juneau.svl
  */
-public class VarResolver extends CoreApi {
+public class VarResolver {
 
        /**
         * Default string variable resolver with support for system properties 
and environment variables:
@@ -108,59 +104,47 @@ public class VarResolver extends CoreApi {
         * @see SystemPropertiesVar
         * @see EnvVariablesVar
         */
-       public static final VarResolver DEFAULT = new 
VarResolver().addVars(SystemPropertiesVar.class, EnvVariablesVar.class, 
SwitchVar.class, IfVar.class).lock();
+       public static final VarResolver DEFAULT = new 
VarResolverBuilder().defaultVars().build();
+
+       final VarResolverContext ctx;
 
        /**
-        * Construct an empty var resolver with no vars.
+        * Constructor.
+        * @param vars The var classes
+        * @param contextObjects
         */
-       public VarResolver() {}
+       public VarResolver(Class<? extends Var>[] vars, Map<String,Object> 
contextObjects) {
+               this.ctx = new VarResolverContext(vars, contextObjects);
+       }
 
        /**
-        * Register new variables with this resolver.
+        * Returns a new builder object using the settings in this resolver as 
a base.
         *
-        * @param vars The variable resolver classes.
-        * These classes must subclass from {@link Var} and have no-arg 
constructors.
-        * @return This object (for method chaining).
+        * @return A new var resolver builder.
         */
-       public VarResolver addVars(Class<?>...vars) {
-               checkLock();
-               ContextFactory cf = getContextFactory();
-               for (Class<?> v : vars) {
-                       try {
-                               v.newInstance();
-                       } catch (InstantiationException e) {
-                               throw new 
UnsupportedOperationException(format("Cannot instantiate variable class {0}.  
Must have a public no-arg constructor.", v.getName()));
-                       } catch (RuntimeException e) {
-                               throw e;
-                       } catch (Exception e) {
-                               throw new RuntimeException(e);
-                       }
-                       cf.addToProperty(SVL_vars, v);
-               }
-               return this;
+       public VarResolverBuilder builder() {
+               return new VarResolverBuilder()
+                       .vars(ctx.getVars())
+                       .contextObjects(ctx.getContextObjects());
        }
 
        /**
-        * Associates a context object with this resolver.
-        *
-        * @param name The name of the context object.
-        * @param object The context object.
-        * @return This object (for method chaining).
+        * Returns the read-only properties on this variable resolver.
+        * @return The read-only properties on this variable resolver.
         */
-       public VarResolver setContextObject(String name, Object object) {
-               getContextFactory().putToProperty(SVL_context, name, object);
-               return this;
+       public VarResolverContext getContext() {
+               return ctx;
        }
 
        /**
         * Creates a new resolver session with no session objects.
         * <p>
-        * Session objects can be associated with the specified session using 
the {@link VarResolverSession#setSessionObject(String, Object)} method.
+        * Session objects can be associated with the specified session using 
the {@link VarResolverSession#sessionObject(String, Object)} method.
         *
         * @return A new resolver session.
         */
        public VarResolverSession createSession() {
-               return new 
VarResolverSession(getContext(VarResolverContext.class), null);
+               return new VarResolverSession(ctx, null);
        }
 
        /**
@@ -170,7 +154,7 @@ public class VarResolver extends CoreApi {
         * @return A new resolver session.
         */
        public VarResolverSession createSession(Map<String,Object> 
sessionObjects) {
-               return new 
VarResolverSession(getContext(VarResolverContext.class), sessionObjects);
+               return new VarResolverSession(ctx, sessionObjects);
        }
 
        /**
@@ -199,25 +183,4 @@ public class VarResolver extends CoreApi {
        public void resolveTo(String s, Writer w) throws IOException {
                createSession(null).resolveTo(s, w);
        }
-
-
-       
//--------------------------------------------------------------------------------
-       // Overridden methods
-       
//--------------------------------------------------------------------------------
-
-       @Override /* Lockable */
-       public VarResolver lock() {
-               super.lock();
-               return this;
-       }
-
-       @Override /* Lockable */
-       public VarResolver clone() {
-               try {
-                       return (VarResolver)super.clone();
-               } catch (CloneNotSupportedException e) {
-                       throw new RuntimeException(e);
-               }
-       }
-}
-
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
new file mode 100644
index 0000000..9d6428a
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java
@@ -0,0 +1,109 @@
+// 
***************************************************************************************************************************
+// * 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.svl;
+
+import static java.text.MessageFormat.*;
+
+import java.util.*;
+
+import org.apache.juneau.svl.vars.*;
+
+/**
+ * Builder class for building instances of {@link VarResolver}.
+ */
+@SuppressWarnings("hiding")
+public class VarResolverBuilder {
+
+       private final List<Class<? extends Var>> vars = new ArrayList<Class<? 
extends Var>>();
+       private final Map<String,Object> contextObjects = new 
HashMap<String,Object>();
+
+       /**
+        * Create a new var resolver using the settings in this builder.
+        *
+        * @return A new var resolver.
+        */
+       @SuppressWarnings("unchecked")
+       public VarResolver build() {
+               return new VarResolver(vars.toArray(new Class[vars.size()]), 
contextObjects);
+       }
+
+       /**
+        * Register new variables with this resolver.
+        *
+        * @param vars The variable resolver classes.
+        * These classes must subclass from {@link Var} and have no-arg 
constructors.
+        * @return This object (for method chaining).
+        */
+       @SuppressWarnings("unchecked")
+       public VarResolverBuilder vars(Class<?>...vars) {
+               for (Class<?> v : vars) {
+                       try {
+                               v.newInstance();
+                       } catch (InstantiationException e) {
+                               throw new 
UnsupportedOperationException(format("Cannot instantiate variable class {0}.  
Must have a public no-arg constructor.", v.getName()));
+                       } catch (RuntimeException e) {
+                               throw e;
+                       } catch (Exception e) {
+                               throw new RuntimeException(e);
+                       }
+                       this.vars.add((Class<? extends Var>)v);
+               }
+               return this;
+       }
+
+       /**
+        * Adds the default variables to this builder.
+        * <p>
+        * The default variables are:
+        * <ul>
+        *      <li>{@link SystemPropertiesVar}
+        *      <li>{@link EnvVariablesVar}
+        *      <li>{@link SwitchVar}
+        *      <li>{@link IfVar}
+        * </ul>
+        *
+        * @return This object (for method chaining).
+        */
+       public VarResolverBuilder defaultVars() {
+               return vars(SystemPropertiesVar.class, EnvVariablesVar.class, 
SwitchVar.class, IfVar.class);
+       }
+
+       /**
+        * Associates a context object with this resolver.
+        * <p>
+        * A context object is essentially some environmental object that 
doesn't change
+        * but is used by vars to customize output.
+        *
+        * @param name The name of the context object.
+        * @param object The context object.
+        * @return This object (for method chaining).
+        */
+       public VarResolverBuilder contextObject(String name, Object object) {
+               contextObjects.put(name, object);
+               return this;
+       }
+
+       /**
+        * Associates multiple context objects with this resolver.
+        * <p>
+        * A context object is essentially some environmental object that 
doesn't change
+        * but is used by vars to customize output.
+        *
+        * @param map A map of context objects keyed by their name.
+        * @return This object (for method chaining).
+        */
+       public VarResolverBuilder contextObjects(Map<String,Object> map) {
+               contextObjects.putAll(map);
+               return this;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverContext.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverContext.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverContext.java
index 2767154..b3d0e18 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverContext.java
@@ -15,67 +15,32 @@ package org.apache.juneau.svl;
 import java.util.*;
 import java.util.concurrent.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.internal.*;
 
 /**
  * Configurable properties on the {@link VarResolver} class.
  * <p>
  * Used to associate {@link Var Vars} and context objects with {@link 
VarResolver VarResolvers}.
- * <p>
- * See {@link ContextFactory} for more information about context properties.
  *
  * @see org.apache.juneau.svl
  */
-public class VarResolverContext extends Context {
-
-       /**
-        * An explicit list of Java classes to be excluded from consideration 
as being beans (<code>Set&lt;Class&gt;</code>).
-        * <p>
-        * Not-bean classes are typically converted to <code>Strings</code> 
during serialization even if they
-        * appear to be bean-like.
-        */
-       public static final String SVL_vars = "Svl.vars.set";
-
-       /**
-        * Add to the list of packages whose classes should not be considered 
beans.
-        */
-       public static final String SVL_vars_add = "Svl.vars.set.add";
-
-       /**
-        * Remove from the list of packages whose classes should not be 
considered beans.
-        */
-       public static final String SVL_vars_remove = "Svl.vars.set.remove";
-
-       /**
-        * Context objects associated with the resolver 
(<code>Map$lt;String,Object&gt;</code>).
-        */
-       public static final String SVL_context = "Svl.context.map";
-
-       /**
-        * Adds a new map entry to the {@link #SVL_context} property.
-        */
-       public static final String SVL_context_put = "Svl.context.map.put";
-
-
-       // Map of Vars added through addVar() method.
-       private final Map<String,Var> stringVars;
+public class VarResolverContext {
 
+       private final Class<?>[] vars;
+       private final Map<String,Var> varMap;
        private final Map<String,Object> contextObjects;
 
-
        /**
         * Constructor.
-        *
-        * @param cf The context factory to copy from.
+        * @param vars The Var classes used for resolving string variables.
+        * @param contextObjects Read-only context objects.
         */
-       public VarResolverContext(ContextFactory cf) {
-               super(cf);
-               ContextFactory.PropertyMap pm = cf.getPropertyMap("Svl");
+       public VarResolverContext(Class<? extends Var>[] vars, 
Map<String,Object> contextObjects) {
+
+               this.vars = Arrays.copyOf(vars, vars.length);
 
-               Class<?>[] varClasses = pm.get(SVL_vars, Class[].class, new 
Class[0]);
                Map<String,Var> m = new ConcurrentSkipListMap<String,Var>();
-               for (Class<?> c : varClasses) {
+               for (Class<?> c : vars) {
                        if (! ClassUtils.isParentClass(Var.class, c))
                                throw new RuntimeException("Invalid variable 
class.  Must extend from Var");
                        try {
@@ -85,9 +50,9 @@ public class VarResolverContext extends Context {
                                throw new RuntimeException(e);
                        }
                }
-               this.stringVars = Collections.unmodifiableMap(m);
 
-               this.contextObjects = 
Collections.unmodifiableMap(pm.getMap(SVL_context, String.class, Object.class, 
Collections.<String,Object>emptyMap()));
+               this.varMap = Collections.unmodifiableMap(m);
+               this.contextObjects = contextObjects == null ? null : 
Collections.unmodifiableMap(new 
ConcurrentHashMap<String,Object>(contextObjects));
        }
 
        /**
@@ -95,8 +60,17 @@ public class VarResolverContext extends Context {
         *
         * @return A map whose keys are var names (e.g. <js>"S"</js>) and 
values are {@link Var} instances.
         */
-       protected Map<String,Var> getVars() {
-               return stringVars;
+       protected Map<String,Var> getVarMap() {
+               return varMap;
+       }
+
+       /**
+        * Returns an array of variables define in this variable resolver 
context.
+        *
+        * @return A new array containing the variables in this context.
+        */
+       protected Class<?>[] getVars() {
+               return Arrays.copyOf(vars, vars.length);
        }
 
        /**
@@ -106,6 +80,15 @@ public class VarResolverContext extends Context {
         * @return The context object, or <jk>null</jk> if no context object is 
specified with that name.
         */
        protected Object getContextObject(String name) {
-               return contextObjects.get(name);
+               return contextObjects == null ? null : contextObjects.get(name);
+       }
+
+       /**
+        * Returns the context map of this variable resolver context.
+        *
+        * @return An unmodifiable map of the context objects of this variable 
resolver context.
+        */
+       protected Map<String,Object> getContextObjects() {
+               return contextObjects;
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverSession.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverSession.java 
b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverSession.java
index 419fd2a..824e0e2 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverSession.java
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverSession.java
@@ -18,8 +18,6 @@ import static org.apache.juneau.internal.StringUtils.*;
 import java.io.*;
 import java.util.*;
 
-import org.apache.juneau.*;
-
 /**
  * A var resolver session that combines a {@link VarResolver} with one or more 
session objects.
  * <p>
@@ -34,21 +32,22 @@ import org.apache.juneau.*;
  *
  * @see org.apache.juneau.svl
  */
-public class VarResolverSession extends Session {
+public class VarResolverSession {
 
        private final VarResolverContext context;
+       private final Map<String,Object> sessionObjects;
 
        /**
         * Constructor.
         *
         * @param context The {@link VarResolver} context object that contains 
the {@link Var Vars} and
         *      context objects associated with that resolver.
-        * @param sessionObjects
+        * @param sessionObjects The session objects.
+        *
         */
        public VarResolverSession(VarResolverContext context, 
Map<String,Object> sessionObjects) {
-               super(context, null);
                this.context = context;
-               addToCache(sessionObjects);
+               this.sessionObjects = sessionObjects != null ? sessionObjects : 
new HashMap<String,Object>();
        }
 
        /**
@@ -58,8 +57,8 @@ public class VarResolverSession extends Session {
         * @param o The session object.
         * @return This method (for method chaining).
         */
-       public VarResolverSession setSessionObject(String name, Object o) {
-               addToCache(name, o);
+       public VarResolverSession sessionObject(String name, Object o) {
+               sessionObjects.put(name, o);
                return this;
        }
 
@@ -266,16 +265,17 @@ public class VarResolverSession extends Session {
         * @return The session object.  Never <jk>null</jk>.
         * @throws RuntimeException If session object with specified name does 
not exist.
         */
+       @SuppressWarnings("unchecked")
        public <T> T getSessionObject(Class<T> c, String name) {
                T t = null;
                try {
-                       t = getFromCache(c, name);
+                       t = (T)sessionObjects.get(name);
                        if (t == null) {
-                               addToCache(name, 
this.context.getContextObject(name));
-                               t = getFromCache(c, name);
+                               sessionObjects.put(name, 
this.context.getContextObject(name));
+                               t = (T)sessionObjects.get(name);
                        }
                } catch (Exception e) {
-                       throw new RuntimeException(format("Session object 
''{0}'' or context object ''SvlContext.{0}'' could not be converted to type 
''{1}''.", name, c.getName()));
+                       throw new RuntimeException(format("Session object 
''{0}'' or context object ''SvlContext.{0}'' could not be converted to type 
''{1}''.", name, c.getName()), e);
                }
                if (t == null)
                        throw new RuntimeException(format("Session object 
''{0}'' or context object ''SvlContext.{0}'' not found.", name));
@@ -289,6 +289,6 @@ public class VarResolverSession extends Session {
         * @return The {@link Var} instance, or <jk>null</jk> if no 
<code>Var</code> is associated with the specified name.
         */
        protected Var getVar(String name) {
-               return this.context.getVars().get(name);
+               return this.context.getVarMap().get(name);
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/package.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/package.html 
b/juneau-core/src/main/java/org/apache/juneau/svl/package.html
index fe61c42..9ef51ef 100644
--- a/juneau-core/src/main/java/org/apache/juneau/svl/package.html
+++ b/juneau-core/src/main/java/org/apache/juneau/svl/package.html
@@ -125,7 +125,7 @@
        
        <jc>// Next create a var resolver that extends the existing DEFAULT 
resolver
        // that supports resolving system properties.</jc>
-       VarResolver r = 
VarResolver.<jsf>DEFAULT</jsf>.clone().addVars(UrlEncodeVar.<jk>class</jk>);
+       VarResolver r = 
VarResolver.<jsf>DEFAULT</jsf>.builder().vars(UrlEncodeVar.<jk>class</jk>).build();
        
        <jc>// Retrieve a system property and URL-encode it if necessary.</jc>
        String myProperty = r.resolve(<js>"$URLEncode{$S{my.property}}"</js>);
@@ -191,7 +191,7 @@
                        These object dependencies are made by setting context 
objects on the var resolver.
                </p>
                <p>
-                       Context objects are set through the {@link 
org.apache.juneau.svl.VarResolver#setContextObject(String,Object)} method.
+                       Context objects are set through the {@link 
org.apache.juneau.svl.VarResolverBuilder#contextObject(String,Object)} method.
                        They can be any class type.
                </p>
                <p>
@@ -209,19 +209,19 @@
                                of a {@link 
org.apache.juneau.svl.VarResolverSession} object that contains {@link 
org.apache.juneau.svl.VarResolverSession#resolve(String)} and {@link 
org.apache.juneau.svl.VarResolverSession#resolveTo(String,Writer)} methods
                                that are identical to {@link 
org.apache.juneau.svl.VarResolver#resolve(String)} and {@link 
org.apache.juneau.svl.VarResolver#resolveTo(String, Writer)} except that the 
<code>Var</code> objects
                                have access to the session objects through the 
{@link org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, 
String)} method.
-                       Session objects are specified through either the {@link 
org.apache.juneau.svl.VarResolver#createSession(Map)} method or the {@link 
org.apache.juneau.svl.VarResolverSession#setSessionObject(String, Object)} 
methods.
+                       Session objects are specified through either the {@link 
org.apache.juneau.svl.VarResolver#createSession(Map)} method or the {@link 
org.apache.juneau.svl.VarResolverSession#sessionObject(String, Object)} methods.
                </p>
                <p>
                        Like Context object, Session objects are used by {@link 
org.apache.juneau.svl.Var Vars} by calling the {@link 
org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, String)} 
method.
                </p>
                <p>
-                       Var resolvers can be cloned and extended by using the 
{@link org.apache.juneau.svl.VarResolver#clone()} method.
+                       Var resolvers can be cloned and extended by using the 
{@link org.apache.juneau.svl.VarResolver#builder()} method.
                        Cloning a resolver will copy it's {@link 
org.apache.juneau.svl.Var} class names and context objects.
                </p>
                <h6 class='topic'>Example:</h6>
                <p class='bcode'>
                        <jc>// Create a resolver that copies the default 
resolver and adds $C and $ARG vars.</jc>
-                       VarResolver myVarResolver = 
VarResolver.<jsf>DEFAULT</jsf>.clone().addVars(ConfigFileVar.<jk>class</jk>, 
ArgsVar.<jk>class</jk>);
+                       VarResolver myVarResolver = 
VarResolver.<jsf>DEFAULT</jsf>.builder().vars(ConfigFileVar.<jk>class</jk>, 
ArgsVar.<jk>class</jk>).build();
                </p>
        </div>  
        

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
 
b/juneau-core/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
index 76c8dc0..10fc8be 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
@@ -40,28 +40,28 @@ public final class AnnotationBeanFilterBuilder extends 
BeanFilterBuilder {
                        Bean b = li.previous();
 
                        if (! b.properties().isEmpty())
-                               setProperties(StringUtils.split(b.properties(), 
','));
+                               properties(StringUtils.split(b.properties(), 
','));
 
                        if (! b.typeName().isEmpty())
-                               setTypeName(b.typeName());
+                               typeName(b.typeName());
 
                        if (b.sort())
-                               setSortProperties(true);
+                               sortProperties(true);
 
                        if (! b.excludeProperties().isEmpty())
-                               
setExcludeProperties(StringUtils.split(b.excludeProperties(), ','));
+                               
excludeProperties(StringUtils.split(b.excludeProperties(), ','));
 
                        if (b.propertyNamer() != PropertyNamerDefault.class)
-                               setPropertyNamer(b.propertyNamer());
+                               propertyNamer(b.propertyNamer());
 
                        if (b.interfaceClass() != Object.class)
-                               setInterfaceClass(b.interfaceClass());
+                               interfaceClass(b.interfaceClass());
 
                        if (b.stopClass() != Object.class)
-                               setStopClass(b.stopClass());
+                               stopClass(b.stopClass());
 
                        if (b.beanDictionary().length > 0)
-                               addToBeanDictionary(b.beanDictionary());
+                               beanDictionary(b.beanDictionary());
                }
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java 
b/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
index b44da60..bf30f3f 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java
@@ -26,7 +26,7 @@ import org.apache.juneau.*;
  * <h5 class='section'>Example:</h5>
  * <p class='bcode'>
  *     <jc>// Create our serializer with a bean filter.</jc>
- *     WriterSerializer s = <jk>new</jk> 
JsonSerializer().addBeanFilters(AddressFilter.<jk>class</jk>);
+ *     WriterSerializer s = <jk>new</jk> 
JsonSerializerBuilder().beanFilters(AddressFilter.<jk>class</jk>).build();
  *
  *     Address a = <jk>new</jk> Address();
  *     String json = s.serialize(a); <jc>// Serializes only street, city, 
state.</jc>
@@ -43,6 +43,7 @@ import org.apache.juneau.*;
  * <h5 class='section'>Additional information:</h5>
  * See <a class='doclink' 
href='package-summary.html#TOC'>org.apache.juneau.transform</a> for more 
information.
  */
+@SuppressWarnings("hiding")
 public abstract class BeanFilterBuilder {
 
        Class<?> beanClass;
@@ -68,7 +69,7 @@ public abstract class BeanFilterBuilder {
         * @param typeName The dictionary name associated with this bean.
         * @return This object (for method chaining).
         */
-       public BeanFilterBuilder setTypeName(String typeName) {
+       public BeanFilterBuilder typeName(String typeName) {
                this.typeName = typeName;
                return this;
        }
@@ -81,7 +82,7 @@ public abstract class BeanFilterBuilder {
         * @param properties The properties associated with the bean class.
         * @return This object (for method chaining).
         */
-       public BeanFilterBuilder setProperties(String...properties) {
+       public BeanFilterBuilder properties(String...properties) {
                this.properties = properties;
                return this;
        }
@@ -92,7 +93,7 @@ public abstract class BeanFilterBuilder {
         * @param excludeProperties The list of properties to ignore on a bean.
         * @return This object (for method chaining).
         */
-       public BeanFilterBuilder 
setExcludeProperties(String...excludeProperties) {
+       public BeanFilterBuilder excludeProperties(String...excludeProperties) {
                this.excludeProperties = excludeProperties;
                return this;
        }
@@ -121,7 +122,7 @@ public abstract class BeanFilterBuilder {
         *              }
         *      }
         *
-        *      JsonSerializer s = new 
JsonSerializer().addBeanFilters(AFilter.<jk>class</jk>);
+        *      JsonSerializer s = new 
JsonSerializerBuilder().beanFilters(AFilter.<jk>class</jk>).build();
         *      A1 a1 = <jk>new</jk> A1();
         *      String r = s.serialize(a1);
         *      <jsm>assertEquals</jsm>(<js>"{f0:'f0'}"</js>, r);  <jc>// Note 
f1 is not serialized</jc>
@@ -133,7 +134,7 @@ public abstract class BeanFilterBuilder {
         * @param interfaceClass The interface class to use for this bean class.
         * @return This object (for method chaining).
         */
-       public BeanFilterBuilder setInterfaceClass(Class<?> interfaceClass) {
+       public BeanFilterBuilder interfaceClass(Class<?> interfaceClass) {
                this.interfaceClass = interfaceClass;
                return this;
        }
@@ -164,7 +165,7 @@ public abstract class BeanFilterBuilder {
         * @param stopClass
         * @return This object (for method chaining).
         */
-       public BeanFilterBuilder setStopClass(Class<?> stopClass) {
+       public BeanFilterBuilder stopClass(Class<?> stopClass) {
                this.stopClass = stopClass;
                return this;
        }
@@ -175,7 +176,7 @@ public abstract class BeanFilterBuilder {
         * @param sortProperties
         * @return This object (for method chaining).
         */
-       public BeanFilterBuilder setSortProperties(boolean sortProperties) {
+       public BeanFilterBuilder sortProperties(boolean sortProperties) {
                this.sortProperties = sortProperties;
                return this;
        }
@@ -186,7 +187,7 @@ public abstract class BeanFilterBuilder {
         * @param propertyNamer The property namer instance.
         * @return This object (for method chaining).
         */
-       public BeanFilterBuilder setPropertyNamer(PropertyNamer propertyNamer) {
+       public BeanFilterBuilder propertyNamer(PropertyNamer propertyNamer) {
                this.propertyNamer = propertyNamer;
                return this;
        }
@@ -198,18 +199,29 @@ public abstract class BeanFilterBuilder {
         * @return This object (for method chaining).
         * @throws Exception Thrown from constructor method.
         */
-       public BeanFilterBuilder setPropertyNamer(Class<? extends 
PropertyNamer> c) throws Exception {
+       public BeanFilterBuilder propertyNamer(Class<? extends PropertyNamer> 
c) throws Exception {
                this.propertyNamer = c.newInstance();
                return this;
        }
 
        /**
-        * Adds a class to this bean's bean dictionary.
+        * Sets the contents of this bean's bean dictionary.
         *
-        * @param c The class to add to this bean dictionary.
+        * @param c The classes to set on this bean's bean dictionary.
         * @return This object (for method chaining).
         */
-       public BeanFilterBuilder addToBeanDictionary(Class<?>...c) {
+       public BeanFilterBuilder setBeanDictionary(Class<?>...c) {
+               beanDictionary = new ArrayList<Class<?>>(Arrays.asList(c));
+               return this;
+       }
+
+       /**
+        * Adds classes to this bean's bean dictionary.
+        *
+        * @param c The classes to add to this bean's bean dictionary.
+        * @return This object (for method chaining).
+        */
+       public BeanFilterBuilder beanDictionary(Class<?>...c) {
                if (beanDictionary == null)
                        beanDictionary = new 
ArrayList<Class<?>>(Arrays.asList(c));
                else for (Class<?> cc : c)

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
 
b/juneau-core/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
index 0ccafaf..70300c0 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
@@ -18,7 +18,7 @@ import org.apache.juneau.*;
  * Simple bean filter that simply identifies a class to be used as an interface
  *     class for all child classes.
  * <p>
- * These objects are created when you pass in 
non-<code>BeanFilterBuilder</code> classes to {@link 
ContextFactory#addToProperty(String,Object)},
+ * These objects are created when you pass in 
non-<code>BeanFilterBuilder</code> classes to {@link 
PropertyStore#addToProperty(String,Object)},
  *     and are equivalent to adding a 
<code><ja>@Bean</ja>(interfaceClass=Foo.<jk>class</jk>)</code> annotation on 
the <code>Foo</code> class.
  */
 public class InterfaceBeanFilterBuilder extends BeanFilterBuilder {
@@ -30,6 +30,6 @@ public class InterfaceBeanFilterBuilder extends 
BeanFilterBuilder {
         */
        public InterfaceBeanFilterBuilder(Class<?> interfaceClass) {
                super(interfaceClass);
-               setInterfaceClass(interfaceClass);
+               interfaceClass(interfaceClass);
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java 
b/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
index 7c36e7b..477a37a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
@@ -33,7 +33,7 @@ import org.apache.juneau.serializer.*;
  * Swaps MUST declare a public no-arg constructor so that the bean context can 
instantiate them.
  * <p>
  *     <code>PojoSwaps</code> are associated with instances of {@link 
BeanContext BeanContexts} by passing the swap class to
- *     the {@link CoreApi#addPojoSwaps(Class...)} method.<br>
+ *     the {@link CoreObjectBuilder#pojoSwaps(Class...)} method.<br>
  * When associated with a bean context, fields of the specified type will 
automatically be converted when the
  *     {@link BeanMap#get(Object)} or {@link BeanMap#put(String, Object)} 
methods are called.<br>
  * <p>

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java 
b/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
index b8e4991..d6bdd39 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
@@ -59,12 +59,12 @@ import org.apache.juneau.serializer.*;
  *             can be instantiated by the parser before being converted into 
the normal class by the untransform method).
  * </ul>
  * <p>
- * Surrogate classes are associated with serializers and parsers using the 
{@link CoreApi#addPojoSwaps(Class...)} method.
+ * Surrogate classes are associated with serializers and parsers using the 
{@link CoreObjectBuilder#pojoSwaps(Class...)} method.
  * <p class='bcode'>
  *     <ja>@Test</ja>
  *     <jk>public void</jk> test() <jk>throws</jk> Exception {
- *             JsonSerializer s = <jk>new</jk> 
JsonSerializer.Simple().addPojoSwaps(Surrogate.<jk>class</jk>);
- *             JsonParser p = <jk>new</jk> 
JsonParser().addPojoSwaps(Surrogate.<jk>class</jk>);
+ *             JsonSerializer s = <jk>new</jk> 
JsonSerializerBuilder().simple().pojoSwaps(Surrogate.<jk>class</jk>).build();
+ *             JsonParser p = <jk>new</jk> 
JsonParserBuilder().pojoSwaps(Surrogate.<jk>class</jk>).build();
  *             String r;
  *             Normal n = Normal.<jsm>create</jsm>();
  *

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/package.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/package.html 
b/juneau-core/src/main/java/org/apache/juneau/transform/package.html
index e6e9f88..32f0413 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transform/package.html
+++ b/juneau-core/src/main/java/org/apache/juneau/transform/package.html
@@ -92,11 +92,11 @@
                Transforms are added to serializers and parsers in a variety of 
ways:
        </p> 
        <ul class='spaced-list'>
-               <li>{@link 
org.apache.juneau.serializer.Serializer#addBeanFilters(Class[])} / {@link 
org.apache.juneau.serializer.Serializer#addPojoSwaps(Class[])} - On serializers.
-               <li>{@link 
org.apache.juneau.serializer.SerializerGroup#addBeanFilters(Class[])} / {@link 
org.apache.juneau.serializer.SerializerGroup#addPojoSwaps(Class[])} - On groups 
of serializers.
-               <li>{@link 
org.apache.juneau.parser.Parser#addBeanFilters(Class[])} / {@link 
org.apache.juneau.parser.Parser#addPojoSwaps(Class[])} - On parsers.
-               <li>{@link 
org.apache.juneau.parser.ParserGroup#addBeanFilters(Class[])} / {@link 
org.apache.juneau.parser.ParserGroup#addPojoSwaps(Class[])} - On groups of 
parsers.
-               <li>{@link 
org.apache.juneau.rest.client.RestClient#addBeanFilters(Class[])} / {@link 
org.apache.juneau.rest.client.RestClient#addPojoSwaps(Class[])} - On the 
serializer and parser registered on a REST client.
+               <li>{@link 
org.apache.juneau.serializer.SerializerBuilder#beanFilters(Class[])} / {@link 
org.apache.juneau.serializer.SerializerBuilder#pojoSwaps(Class[])} - On 
serializers.
+               <li>{@link 
org.apache.juneau.serializer.SerializerGroupBuilder#beanFilters(Class[])} / 
{@link org.apache.juneau.serializer.SerializerGroupBuilder#pojoSwaps(Class[])} 
- On groups of serializers.
+               <li>{@link 
org.apache.juneau.parser.ParserBuilder#beanFilters(Class[])} / {@link 
org.apache.juneau.parser.ParserBuilder#pojoSwaps(Class[])} - On parsers.
+               <li>{@link 
org.apache.juneau.parser.ParserGroupBuilder#beanFilters(Class[])} / {@link 
org.apache.juneau.parser.ParserGroupBuilder#pojoSwaps(Class[])} - On groups of 
parsers.
+               <li>{@link 
org.apache.juneau.rest.client.RestClientBuilder#beanFilters(Class[])} / {@link 
org.apache.juneau.rest.client.RestClientBuilder#pojoSwaps(Class[])} - On the 
serializer and parser registered on a REST client.
                <li>{@link 
org.apache.juneau.rest.annotation.RestResource#beanFilters() 
@RestResource.beanFilters()} / {@link 
org.apache.juneau.rest.annotation.RestResource#pojoSwaps() 
@RestResource.pojoSwaps()}- On all serializers and parsers defined on a REST 
servlet.
                <li>{@link 
org.apache.juneau.rest.annotation.RestMethod#beanFilters() 
@RestMethod.beanFilters()} / {@link 
org.apache.juneau.rest.annotation.RestMethod#pojoSwaps() 
@RestMethod.pojoSwaps()} - On all serializers and parsers defined on a method 
in a REST servlet.
                <li>{@link 
org.apache.juneau.rest.jaxrs.JuneauProvider#beanFilters() 
@JuneauProvider.beanFilters()} / {@link 
org.apache.juneau.rest.jaxrs.JuneauProvider#pojoSwaps() 
@JuneauProvider.pojoSwaps()} - On all serializers and parsers defined on a 
JAX-RS provider.
@@ -136,7 +136,7 @@
                }
        }
        
-       WriterSerializer s = <jk>new</jk> 
JsonSerializer().addBeanFilters(MyBeanFilter.<jk>class</jk>);
+       WriterSerializer s = <jk>new</jk> 
JsonSerializerBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build();
        Person p = getPerson();
        String json = s.serialize(p);  <jc>// Prints "{age:45,name:'John 
Smith'}"</jc>
                </p>
@@ -159,7 +159,7 @@
                }
        }
        
-       WriterSerializer s = <jk>new</jk> 
JsonSerializer().addBeanFilters(MyBeanFilter.<jk>class</jk>);
+       WriterSerializer s = <jk>new</jk> 
JsonSerializerBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build();
        Person p = getPerson();
        String json = s.serialize(p);  <jc>// Prints "{age:45}"</jc>
                </p>
@@ -192,12 +192,12 @@
        }
        
        <jc>// Serialize to JSON</jc>
-       WriterSerializer s = <jk>new</jk> 
JsonSerializer().addBeanFilters(MyBeanFilter.<jk>class</jk>);
+       WriterSerializer s = <jk>new</jk> 
JsonSerializerBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build();
        Person person = getPerson();
        String json = s.serialize(p);  <jc>// Prints "{AGE:45,NAME:'John 
Smith'}"</jc>
        
        <jc>// Parse back into bean</jc>
-       ReaderParser p = <jk>new</jk> 
JsonParser().addBeanFilters(MyBeanFilter.<jk>class</jk>);
+       ReaderParser p = <jk>new</jk> 
JsonParserBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build();
        person = p.parse(json, Person.class); <jc>// Read back into original 
object</jc>
                </p>
                <p>
@@ -250,7 +250,7 @@
                </p>
                <p class='bcode'>
        <jc>// Serialize to JSON</jc>
-       WriterSerializer s = <jk>new</jk> 
JsonSerializer().addBeanFilters(MyBeanFilter.<jk>class</jk>);
+       WriterSerializer s = <jk>new</jk> 
JsonSerializerBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build();
        MyClass c = <jk>new</jk> MyClassBar();
        String json = s.serialize(p);  <jc>// Prints "{foo:'foo'}"</jc>
                </p>    
@@ -273,14 +273,14 @@
        }
                </p>
                <p>
-                       Also, the <code>addBeanFilters(...)</code> methods will 
automatically interpret any non-<code>BeanFilter</code> classes
+                       Also, the <code>*BeanFilters(...)</code> methods will 
automatically interpret any non-<code>BeanFilter</code> classes
                                passed in as meaning interface classes.  
                        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:
                </p>
                <p class='bcode'>
        <jc>// Serialize to JSON</jc>
-       WriterSerializer s = <jk>new</jk> 
JsonSerializer().addBeanFilters(MyClass.<jk>class</jk>);
+       WriterSerializer s = <jk>new</jk> 
JsonSerializerBuilder().beanFilters(MyClass.<jk>class</jk>).build();
                </p>
                <p>
                        In fact, this is the shortcut used in the 
<code>RequestEchoResource</code> sample class:
@@ -388,11 +388,11 @@
        }
 
        <jc>// Create a new JSON serializer, associate our date swap with it, 
and serialize a sample bean.</jc>
-       Serializer serializer = <jk>new</jk> 
JsonSerializer().addPojoSwaps(MyDateSwap.<jk>class</jk>);
+       Serializer serializer = <jk>new</jk> 
JsonSerializerBuilder().pojoSwaps(MyDateSwap.<jk>class</jk>).build();
        String json = serializer.serialize(<jk>new</jk> MyBean());      <jc>// 
== "{date:'2012-03-03T04:05:06-0500'}"</jc>
        
        <jc>// Create a JSON parser, associate our date swap with it, and 
reconstruct our bean (including the date).</jc>
-       ReaderParser parser = <jk>new</jk> 
JsonParser().addPojoSwaps(MyDateSwap.<jk>class</jk>);
+       ReaderParser parser = <jk>new</jk> 
JsonParserBuilder().pojoSwaps(MyDateSwap.<jk>class</jk>).build();
        MyBean bean = parser.parse(json, MyBean.<jk>class</jk>);
        <jk>int</jk> day = bean.<jf>date</jf>.getDay();                         
                        <jc>// == 3</jc>
                </p>
@@ -401,7 +401,7 @@
                </p>
                <p class='bcode'>
        <jc>// Create a new bean context and add our swap.</jc>
-       BeanContext beanContext = <jk>new</jk> 
BeanContext().addPojoSwaps(MyDateSwap.<jk>class</jk>);
+       BeanContext beanContext = <jk>new</jk> 
BeanContext().pojoSwaps(MyDateSwap.<jk>class</jk>);
 
        <jc>// Create a new bean.</jc>
        MyBean myBean = <jk>new</jk> MyBean();
@@ -459,8 +459,8 @@
                </p>
                <p class='bcode'>
        <jc>// Create a JSON serializer and register the BASE64 encoding swap 
with it.</jc>
-       Serializer serializer = <jk>new</jk> 
JsonSerializer().addPojoSwaps(ByteArrayBase64Swap.<jk>class</jk>);
-       ReaderParser parser = <jk>new</jk> 
JsonParser().addPojoSwaps(ByteArrayBase64Swap.<jk>class</jk>);
+       Serializer serializer = <jk>new</jk> 
JsonSerializerBuilder().pojoSwaps(ByteArrayBase64Swap.<jk>class</jk>).build();
+       ReaderParser parser = <jk>new</jk> 
JsonParserBuilder().pojoSwaps(ByteArrayBase64Swap.<jk>class</jk>).build();
        
        <jk>byte</jk>[] a1 = {1,2,3};
        String s1 = serializer.serialize(a1);           <jc>// Produces 
"'AQID'"</jc>
@@ -526,7 +526,7 @@
                </p>
                <p class='bcode'>
        <jc>// Create a JSON serializer that can serialize Iterators.</jc>
-       Serializer serializer = <jk>new</jk> 
JsonSerializer().addPojoSwaps(IteratorSwap.<jk>class</jk>);
+       Serializer serializer = <jk>new</jk> 
JsonSerializerBuilder().pojoSwaps(IteratorSwap.<jk>class</jk>).build();
        
        <jc>// Construct an iterator we want to serialize.</jc>
        Iterator iterator = <jk>new</jk> ObjectList(1,2,3).iterator();
@@ -535,7 +535,7 @@
        String s = serializer.serialize(iterator);              <jc>// Produces 
"[1,2,3]"</jc>
        
        <jc>// Try to parse it.</jc>
-       ReaderParser parser = <jk>new</jk> 
JsonParser().addPojoSwaps(IteratorSwap.<jk>class</jk>);
+       ReaderParser parser = <jk>new</jk> 
JsonParserBuilder().pojoSwaps(IteratorSwap.<jk>class</jk>).build();
        iterator = parser.parse(s, Iterator.<jk>class</jk>);            <jc>// 
Throws ParseException!!!</jc>
                </p>
        </div>
@@ -579,7 +579,7 @@
                </p>
                <p class='bcode'>
        <jc>// Serialize to JSON</jc>
-       WriterSerializer s = <jk>new</jk> 
JsonSerializer().addBeanFilters(MyBeanFilter.<jk>class</jk>);
+       WriterSerializer s = <jk>new</jk> 
JsonSerializerBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build();
        MyClass c = <jk>new</jk> MyClassBar();
        String json = s.serialize(p);  <jc>// Prints "{foo:'foo'}"</jc>
                </p>    
@@ -602,12 +602,12 @@
        }
                </p>
                <p>
-                       Also, the <code>addBeanFilters()</code> methods will 
automatically interpret any non-<code>BeanFilter</code> classes passed in as 
meaning interface classes. 
+                       Also, the <code>beanFilters()</code> methods will 
automatically interpret any non-<code>BeanFilter</code> classes passed in as 
meaning interface classes. 
                        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:
                </p>
                <p class='bcode'>
        <jc>// Serialize to JSON</jc>
-       WriterSerializer s = <jk>new</jk> 
JsonSerializer().addBeanFilters(MyClass.<jk>class</jk>);
+       WriterSerializer s = <jk>new</jk> 
JsonSerializerBuilder().beanFilters(MyClass.<jk>class</jk>).build();
                </p>
        </div>
 
@@ -661,7 +661,7 @@
                </p>
                <p class='bcode'>
        <jc>// Create a JSON serializer that can serialize Iterators.</jc>
-       Serializer serializer = <jk>new</jk> 
JsonSerializer().addPojoSwaps(MySerializableSurrogate.<jk>class</jk>);
+       Serializer serializer = <jk>new</jk> 
JsonSerializerBuilder().pojoSwaps(MySerializableSurrogate.<jk>class</jk>).build();
                </p>
                <p>
                        When the serializer encounters the non-serializable 
class, it will serialize an instance of the surrogate instead.

Reply via email to