http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
new file mode 100644
index 0000000..6ea4ed3
--- /dev/null
+++ 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.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.urlencoding;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.uon.*;
+
+/**
+ * Builder class for building instances of URL-Encoding serializers.
+ */
+public class UrlEncodingSerializerBuilder extends UonSerializerBuilder {
+
+       /**
+        * Constructor, default settings.
+        */
+       public UrlEncodingSerializerBuilder() {
+               super();
+       }
+
+       /**
+        * Constructor.
+        * @param propertyStore The initial configuration settings for this 
builder.
+        */
+       public UrlEncodingSerializerBuilder(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializer build() {
+               return new UrlEncodingSerializer(propertyStore);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Properties
+       
//--------------------------------------------------------------------------------
+
+       /**
+        * <b>Configuration property:</b>  Serialize bean property 
collections/arrays as separate key/value pairs.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"UrlEncoding.expandedParams"</js>
+        *      <li><b>Data type:</b> <code>Boolean</code>
+        *      <li><b>Default:</b> <jk>false</jk>
+        *      <li><b>Session-overridable:</b> <jk>true</jk>
+        * </ul>
+        * <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>.
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode'>
+        *      <jk>public class</jk> A {
+        *              <jk>public</jk> String[] f1 = 
{<js>"a"</js>,<js>"b"</js>};
+        *              <jk>public</jk> List&lt;String&gt; f2 = <jk>new</jk> 
LinkedList&lt;String&gt;(Arrays.<jsm>asList</jsm>(<jk>new</jk> 
String[]{<js>"c"</js>,<js>"d"</js>}));
+        *      }
+        *
+        *      UrlEncodingSerializer s1 = 
UrlEncodingSerializer.<jsf>DEFAULT</jsf>;
+        *      UrlEncodingSerializer s2 = <jk>new</jk> 
UrlEncodingSerializerBuilder().expandedParams(<jk>true</jk>).build();
+        *
+        *      String ss1 = s1.serialize(<jk>new</jk> A()); <jc>// Produces 
"f1=(a,b)&amp;f2=(c,d)"</jc>
+        *      String ss2 = s2.serialize(<jk>new</jk> A()); <jc>// Produces 
"f1=a&amp;f1=b&amp;f2=c&amp;f2=d"</jc>
+        * </p>
+        * <p>
+        * This option only applies to beans.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>If parsing multi-part parameters, it's highly recommended 
to use Collections or Lists
+        *              as bean property types instead of arrays since arrays 
have to be recreated from scratch every time a value
+        *              is added to it.
+        * </ul>
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>URLENC_expandedParams</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 UrlEncodingContext#URLENC_expandedParams
+        */
+       public UrlEncodingSerializerBuilder expandedParams(boolean value) {
+               return property(UrlEncodingContext.URLENC_expandedParams, 
value);
+       }
+
+       @Override /* UonSerializerBuilder */
+       public UrlEncodingSerializerBuilder encodeChars(boolean value) {
+               super.encodeChars(value);
+               return this;
+       }
+
+       @Override /* UonSerializerBuilder */
+       public UrlEncodingSerializerBuilder encoding() {
+               super.encoding();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder maxDepth(int value) {
+               super.maxDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder initialDepth(int value) {
+               super.initialDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder detectRecursions(boolean value) {
+               super.detectRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder ignoreRecursions(boolean value) {
+               super.ignoreRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder useWhitespace(boolean value) {
+               super.useWhitespace(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder ws() {
+               super.ws();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder addBeanTypeProperties(boolean 
value) {
+               super.addBeanTypeProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder quoteChar(char value) {
+               super.quoteChar(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder sq() {
+               super.sq();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder trimNullProperties(boolean value) {
+               super.trimNullProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder trimEmptyCollections(boolean value) 
{
+               super.trimEmptyCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder trimEmptyMaps(boolean value) {
+               super.trimEmptyMaps(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder trimStrings(boolean value) {
+               super.trimStrings(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder relativeUriBase(String value) {
+               super.relativeUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder absolutePathUriBase(String value) {
+               super.absolutePathUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder sortCollections(boolean value) {
+               super.sortCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public UrlEncodingSerializerBuilder sortMaps(boolean value) {
+               super.sortMaps(value);
+               return this;
+       }
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
beansRequireDefaultConstructor(boolean value) {
+               super.beansRequireDefaultConstructor(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder beansRequireSerializable(boolean 
value) {
+               super.beansRequireSerializable(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
beansRequireSettersForGetters(boolean value) {
+               super.beansRequireSettersForGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder beansRequireSomeProperties(boolean 
value) {
+               super.beansRequireSomeProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder beanMapPutReturnsOldValue(boolean 
value) {
+               super.beanMapPutReturnsOldValue(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
beanConstructorVisibility(Visibility value) {
+               super.beanConstructorVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder beanClassVisibility(Visibility 
value) {
+               super.beanClassVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder beanFieldVisibility(Visibility 
value) {
+               super.beanFieldVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder methodVisibility(Visibility value) {
+               super.methodVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder useJavaBeanIntrospector(boolean 
value) {
+               super.useJavaBeanIntrospector(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder useInterfaceProxies(boolean value) {
+               super.useInterfaceProxies(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder ignoreUnknownBeanProperties(boolean 
value) {
+               super.ignoreUnknownBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
ignoreUnknownNullBeanProperties(boolean value) {
+               super.ignoreUnknownNullBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
ignorePropertiesWithoutSetters(boolean value) {
+               super.ignorePropertiesWithoutSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
ignoreInvocationExceptionsOnGetters(boolean value) {
+               super.ignoreInvocationExceptionsOnGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
ignoreInvocationExceptionsOnSetters(boolean value) {
+               super.ignoreInvocationExceptionsOnSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder sortProperties(boolean value) {
+               super.sortProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder notBeanPackages(String...values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder notBeanPackages(Collection<String> 
values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder setNotBeanPackages(String...values) 
{
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
setNotBeanPackages(Collection<String> values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
removeNotBeanPackages(String...values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
removeNotBeanPackages(Collection<String> values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder notBeanClasses(Class<?>...values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder notBeanClasses(Collection<Class<?>> 
values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
setNotBeanClasses(Class<?>...values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
setNotBeanClasses(Collection<Class<?>> values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
removeNotBeanClasses(Class<?>...values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
removeNotBeanClasses(Collection<Class<?>> values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder beanFilters(Class<?>...values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder beanFilters(Collection<Class<?>> 
values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder setBeanFilters(Class<?>...values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder setBeanFilters(Collection<Class<?>> 
values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
removeBeanFilters(Class<?>...values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
removeBeanFilters(Collection<Class<?>> values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder pojoSwaps(Class<?>...values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder pojoSwaps(Collection<Class<?>> 
values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder setPojoSwaps(Class<?>...values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder setPojoSwaps(Collection<Class<?>> 
values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder removePojoSwaps(Class<?>...values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
removePojoSwaps(Collection<Class<?>> values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder implClasses(Map<Class<?>,Class<?>> 
values) {
+               super.implClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public <T> UrlEncodingSerializerBuilder implClass(Class<T> 
interfaceClass, Class<? extends T> implClass) {
+               super.implClass(interfaceClass, implClass);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder beanDictionary(Class<?>...values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder beanDictionary(Collection<Class<?>> 
values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
setBeanDictionary(Class<?>...values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
setBeanDictionary(Collection<Class<?>> values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
removeFromBeanDictionary(Class<?>...values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 
removeFromBeanDictionary(Collection<Class<?>> values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder beanTypePropertyName(String value) {
+               super.beanTypePropertyName(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder defaultParser(Class<?> value) {
+               super.defaultParser(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder locale(Locale value) {
+               super.locale(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder timeZone(TimeZone value) {
+               super.timeZone(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder mediaType(MediaType value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder debug(boolean value) {
+               super.debug(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder property(String name, Object value) 
{
+               super.property(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder properties(Map<String,Object> 
properties) {
+               super.properties(properties);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder addToProperty(String name, Object 
value) {
+               super.addToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder putToProperty(String name, Object 
key, Object value) {
+               super.putToProperty(name, key, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder putToProperty(String name, Object 
value) {
+               super.putToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder removeFromProperty(String name, 
Object value) {
+               super.removeFromProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder classLoader(ClassLoader 
classLoader) {
+               super.classLoader(classLoader);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public UrlEncodingSerializerBuilder 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/urlencoding/UrlEncodingSerializerContext.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java
 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java
index dc2c46e..7c546ec 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerContext.java
@@ -13,69 +13,31 @@
 package org.apache.juneau.urlencoding;
 
 import org.apache.juneau.*;
+import org.apache.juneau.uon.*;
 
 /**
  * Configurable properties on the {@link UrlEncodingSerializer} class.
  * <p>
- * Context properties are set by calling {@link 
ContextFactory#setProperty(String, Object)} on the context factory
- * returned {@link CoreApi#getContextFactory()}.
+ * Context properties are set by calling {@link 
PropertyStore#setProperty(String, Object)} on the property store
+ * passed into the constructor.
  * <p>
- * See {@link ContextFactory} for more information about context properties.
+ * See {@link PropertyStore} for more information about context properties.
  */
 public class UrlEncodingSerializerContext extends UonSerializerContext {
 
-       /**
-        * <b>Configuration property:</b>  Serialize bean property 
collections/arrays as separate key/value pairs.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"UrlEncoding.expandedParams"</js>
-        *      <li><b>Data type:</b> <code>Boolean</code>
-        *      <li><b>Default:</b> <jk>false</jk>
-        *      <li><b>Session-overridable:</b> <jk>true</jk>
-        * </ul>
-        * <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>.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode'>
-        *      <jk>public class</jk> A {
-        *              <jk>public</jk> String[] f1 = 
{<js>"a"</js>,<js>"b"</js>};
-        *              <jk>public</jk> List&lt;String&gt; f2 = <jk>new</jk> 
LinkedList&lt;String&gt;(Arrays.<jsm>asList</jsm>(<jk>new</jk> 
String[]{<js>"c"</js>,<js>"d"</js>}));
-        *      }
-        *
-        *      UrlEncodingSerializer s1 = <jk>new</jk> UrlEncodingParser();
-        *      UrlEncodingSerializer s2 = <jk>new</jk> 
UrlEncodingParser().setProperty(UrlEncodingContext.<jsf>URLENC_expandedParams</jsf>,
 <jk>true</jk>);
-        *
-        *      String s1 = p1.serialize(<jk>new</jk> A()); <jc>// Produces 
"f1=(a,b)&amp;f2=(c,d)"</jc>
-        *      String s2 = p2.serialize(<jk>new</jk> A()); <jc>// Produces 
"f1=a&amp;f1=b&amp;f2=c&amp;f2=d"</jc>
-        * </p>
-        * <p>
-        * This option only applies to beans.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>If parsing multi-part parameters, it's highly recommended 
to use Collections or Lists
-        *              as bean property types instead of arrays since arrays 
have to be recreated from scratch every time a value
-        *              is added to it.
-        * </ul>
-        */
-       public static final String URLENC_expandedParams = 
"UrlEncoding.expandedParams";
-
-
        final boolean
                expandedParams;
 
        /**
         * Constructor.
         * <p>
-        * Typically only called from {@link ContextFactory#getContext(Class)}.
+        * Typically only called from {@link PropertyStore#getContext(Class)}.
         *
-        * @param cf The factory that created this context.
+        * @param ps The property store that created this context.
         */
-       public UrlEncodingSerializerContext(ContextFactory cf) {
-               super(cf);
-               this.expandedParams = cf.getProperty(URLENC_expandedParams, 
boolean.class, false);
+       public UrlEncodingSerializerContext(PropertyStore ps) {
+               super(ps);
+               this.expandedParams = 
ps.getProperty(UrlEncodingContext.URLENC_expandedParams, boolean.class, false);
        }
 
        @Override /* Context */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
index 9f89a7f..30b5b5c 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
@@ -12,13 +12,12 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.urlencoding;
 
-import static org.apache.juneau.urlencoding.UrlEncodingParserContext.*;
-
 import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.json.*;
+import org.apache.juneau.uon.*;
 
 /**
  * Session object that lives for the duration of a single use of {@link 
UrlEncodingSerializer}.
@@ -37,7 +36,7 @@ public class UrlEncodingSerializerSession extends 
UonSerializerSession {
         * @param output The output object.  See {@link 
JsonSerializerSession#getWriter()} for valid class types.
         * @param op The override properties.
         * These override any context properties defined in the context.
-        * @param javaMethod The java method that called this parser, usually 
the method in a REST servlet.
+        * @param javaMethod The java method that called this serializer, 
usually the method in a REST servlet.
         * @param locale The session locale.
         * If <jk>null</jk>, then the locale defined on the context is used.
         * @param timeZone The session timezone.
@@ -49,7 +48,7 @@ public class UrlEncodingSerializerSession extends 
UonSerializerSession {
                if (op == null || op.isEmpty()) {
                        expandedParams = ctx.expandedParams;
                } else {
-                       expandedParams = op.getBoolean(URLENC_expandedParams, 
false);
+                       expandedParams = 
op.getBoolean(UrlEncodingContext.URLENC_expandedParams, false);
                }
        }
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/urlencoding/package.html
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/package.html 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/package.html
index 1282922..4d623d1 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/package.html
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/package.html
@@ -305,7 +305,7 @@
 <h2 class='topic' onclick='toggle(this)'>2 - UrlEncodingSerializer and 
UonSerializer classes</h2>
 <div class='topic'>
        <p>
-               {@link org.apache.juneau.urlencoding.UrlEncodingSerializer} and 
{@link org.apache.juneau.urlencoding.UonSerializer} classes are used to convert 
POJOs to URL-encoded strings.<br>
+               {@link org.apache.juneau.urlencoding.UrlEncodingSerializer} and 
{@link org.apache.juneau.uon.UonSerializer} classes are used to convert POJOs 
to URL-encoded strings.<br>
                The <code>UonSerializer</code> class converts parameter values 
to UON notation. 
                The <code>UrlEncodingSerializer</code> class converts a POJO to 
key/value URL-Encoded pairs using <code>UonSerializer</code> to serialize the 
values.
                If you're trying to construct complete URL-Encoded entities, 
use <code>UrlEncodingSerializer</code>. 
@@ -318,9 +318,9 @@
        <ul class='spaced-list'>
                <li>{@link 
org.apache.juneau.urlencoding.UrlEncodingSerializer#DEFAULT} - All default 
settings, strict mode.
                <li>{@link 
org.apache.juneau.urlencoding.UrlEncodingSerializer#DEFAULT_READABLE} - Use 
whitespace and indentation for readability.
-               <li>{@link org.apache.juneau.urlencoding.UonSerializer#DEFAULT} 
- All default settings, strict mode.
-               <li>{@link 
org.apache.juneau.urlencoding.UonSerializer#DEFAULT_READABLE} - Use whitespace 
and indentation for readability.
-               <li>{@link 
org.apache.juneau.urlencoding.UonSerializer#DEFAULT_ENCODING} - Same as 
DEFAULT, but use URL-Encoding on special characters.
+               <li>{@link org.apache.juneau.uon.UonSerializer#DEFAULT} - All 
default settings, strict mode.
+               <li>{@link 
org.apache.juneau.uon.UonSerializer#DEFAULT_READABLE} - Use whitespace and 
indentation for readability.
+               <li>{@link 
org.apache.juneau.uon.UonSerializer#DEFAULT_ENCODING} - Same as DEFAULT, but 
use URL-Encoding on special characters.
        </ul>
        <p>
                The general guidelines on which serializer to use is:
@@ -623,7 +623,7 @@
                </p>
                <p class='bcode'>
        <jc>// Clone an existing serializer and set property for detecting 
recursions.</jc>
-       UrlEncodingSerializer s = 
UrlEncodingSerializer.<jsf>DEFAULT_READABLE</jsf>.clone().setDetectRecursions(<jk>true</jk>);
+       UrlEncodingSerializer s = 
UrlEncodingSerializer.<jsf>DEFAULT_READABLE</jsf>.builder().detectRecursions(<jk>true</jk>).build();
 
        <jc>// Create a recursive loop.</jc>
        A a = <jk>new</jk> A();
@@ -663,7 +663,7 @@
                </p>
                <ul class='spaced-list'>
                        <li>{@link org.apache.juneau.BeanContext} - Bean 
context properties.
-                       <li>{@link 
org.apache.juneau.urlencoding.UonSerializerContext} - UON serializer context 
properties.
+                       <li>{@link org.apache.juneau.uon.UonSerializerContext} 
- UON serializer context properties.
                        <li>{@link 
org.apache.juneau.urlencoding.UrlEncodingSerializerContext} - URL-Encoding 
serializer context properties.
                </ul>
        </div>          
@@ -686,7 +686,7 @@
 <h2 class='topic' onclick='toggle(this)'>3 - UrlEncodingParser and UonParser 
classes</h2>
 <div class='topic'>
        <p>
-               {@link org.apache.juneau.urlencoding.UrlEncodingParser} and 
{@link org.apache.juneau.urlencoding.UonParser} classes are used to convert 
URL-encoded strings back into POJOs.<br>
+               {@link org.apache.juneau.urlencoding.UrlEncodingParser} and 
{@link org.apache.juneau.uon.UonParser} classes are used to convert URL-encoded 
strings back into POJOs.<br>
                The <code>UonParser</code> class converts UON-encoded parameter 
values to POJOs.
                The <code>UrlEncodingParser</code> class converts entire 
URL-Encoded strings to POJOs using <code>UonSerializer</code> to serialize 
indivisual values.
                If you're trying to parse an entire URL-Encoded string, use 
<code>UrlEncodingParser</code>. 
@@ -697,8 +697,8 @@
        </p>
        <ul class='spaced-list'>
                <li>{@link 
org.apache.juneau.urlencoding.UrlEncodingParser#DEFAULT} - Default parser for 
entire URL-encoded strings, decode <code>%xx</code> sequences.
-               <li>{@link org.apache.juneau.urlencoding.UonParser#DEFAULT} - 
Default parser for URL-encoded parameter values, don't decode <code>%xx</code> 
sequences.
-               <li>{@link 
org.apache.juneau.urlencoding.UonParser#DEFAULT_DECODING} - Default parser for 
URL-encoded parameter values, decode <code>%xx</code> sequences.
+               <li>{@link org.apache.juneau.uon.UonParser#DEFAULT} - Default 
parser for URL-encoded parameter values, don't decode <code>%xx</code> 
sequences.
+               <li>{@link org.apache.juneau.uon.UonParser#DEFAULT_DECODING} - 
Default parser for URL-encoded parameter values, decode <code>%xx</code> 
sequences.
        </ul>
        <p>
                The general guildlines on which parser to use is:
@@ -916,7 +916,7 @@
                </p>
                <ul class='spaced-list'>
                        <li>{@link org.apache.juneau.BeanContext} - Bean 
context properties.
-                       <li>{@link 
org.apache.juneau.urlencoding.UonParserContext} - UON parser context properties.
+                       <li>{@link org.apache.juneau.uon.UonParserContext} - 
UON parser context properties.
                        <li>{@link 
org.apache.juneau.urlencoding.UrlEncodingParserContext} - URL-Encoding parser 
context properties.
                </ul>
        </div>          

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/utils/PojoQuery.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/utils/PojoQuery.java 
b/juneau-core/src/main/java/org/apache/juneau/utils/PojoQuery.java
index e42ec1b..5249b17 100644
--- a/juneau-core/src/main/java/org/apache/juneau/utils/PojoQuery.java
+++ b/juneau-core/src/main/java/org/apache/juneau/utils/PojoQuery.java
@@ -622,7 +622,7 @@ public final class PojoQuery {
                        numberRanges = l.toArray(new NumberRange[l.size()]);
                }
 
-               private List<String> breakUpTokens(String s) {
+               private static List<String> breakUpTokens(String s) {
                        // Get rid of whitespace in "123 - 456"
                        s = s.replaceAll("(-?\\d+)\\s*-\\s*(-?\\d+)", "$1-$2");
                        // Get rid of whitespace in ">= 123"
@@ -1042,7 +1042,7 @@ public final class PojoQuery {
                /**
                 * Break up search pattern into separate tokens.
                 */
-               private List<String> breakUpTokens(String s) {
+               private static List<String> breakUpTokens(String s) {
 
                        // If the string is null or all whitespace, return an 
empty vector.
                        if (s == null || s.trim().length() == 0)

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
index 0121a3e..7b00113 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.xml;
 
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
+
 import java.util.*;
 
 import org.apache.juneau.*;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java
index c62d18f..0d4a9d2 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlDocSerializer.java
@@ -12,6 +12,9 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.xml;
 
+import static org.apache.juneau.xml.XmlSerializerContext.*;
+
+import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.serializer.*;
 
@@ -33,14 +36,30 @@ import org.apache.juneau.serializer.*;
 public class XmlDocSerializer extends XmlSerializer {
 
        /** Default serializer without namespaces. */
-       @Produces(value="text/xml+simple",contentType="text/xml")
-       public static class Simple extends XmlDocSerializer {
-               /** Constructor */
-               public Simple() {
-                       setEnableNamespaces(false);
+       @Produces(value="text/xml",contentType="text/xml")
+       public static class Ns extends XmlDocSerializer {
+
+               /**
+                * Constructor.
+                * @param propertyStore The property store containing all the 
settings for this object.
+                */
+               public Ns(PropertyStore propertyStore) {
+                       super(propertyStore);
+               }
+
+               @Override /* CoreObject */
+               protected ObjectMap getOverrideProperties() {
+                       return 
super.getOverrideProperties().append(XML_enableNamespaces, true);
                }
        }
 
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       public XmlDocSerializer(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
 
        
//--------------------------------------------------------------------------------
        // Entry point methods

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
index a6a0212..7a325c7 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
@@ -15,13 +15,11 @@ package org.apache.juneau.xml;
 import static javax.xml.stream.XMLStreamConstants.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
-import static org.apache.juneau.xml.XmlParserContext.*;
 
 import java.lang.reflect.*;
 import java.util.*;
 
 import javax.xml.stream.*;
-import javax.xml.stream.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.annotation.*;
@@ -53,10 +51,27 @@ import org.apache.juneau.xml.annotation.*;
 public class XmlParser extends ReaderParser {
 
        /** Default parser, all default settings.*/
-       public static final XmlParser DEFAULT = new XmlParser().lock();
+       public static final XmlParser DEFAULT = new 
XmlParser(PropertyStore.create());
 
        private static final int UNKNOWN=0, OBJECT=1, ARRAY=2, STRING=3, 
NUMBER=4, BOOLEAN=5, NULL=6;
 
+
+       private final XmlParserContext ctx;
+
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       public XmlParser(PropertyStore propertyStore) {
+               super(propertyStore);
+               this.ctx = createContext(XmlParserContext.class);
+       }
+
+       @Override /* CoreObject */
+       public XmlParserBuilder builder() {
+               return new XmlParserBuilder(propertyStore);
+       }
+
        /**
         * Workhorse method.
         *
@@ -497,7 +512,7 @@ public class XmlParser extends ReaderParser {
 
        @Override /* Parser */
        public XmlParserSession createSession(Object input, ObjectMap op, 
Method javaMethod, Object outer, Locale locale, TimeZone timeZone, MediaType 
mediaType) {
-               return new XmlParserSession(getContext(XmlParserContext.class), 
op, input, javaMethod, outer, locale, timeZone, mediaType);
+               return new XmlParserSession(ctx, op, input, javaMethod, outer, 
locale, timeZone, mediaType);
        }
 
        @Override /* Parser */
@@ -525,585 +540,4 @@ public class XmlParser extends ReaderParser {
                XmlParserSession s = (XmlParserSession)session;
                return doParseArgs(s, s.getXmlStreamReader(), argTypes);
        }
-
-
-       
//--------------------------------------------------------------------------------
-       // Properties
-       
//--------------------------------------------------------------------------------
-
-       /**
-        * <b>Configuration property:</b>  Enable validation.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"XmlParser.validating"</js>
-        *      <li><b>Data type:</b> <code>Boolean</code>
-        *      <li><b>Default:</b> <jk>false</jk>
-        *      <li><b>Session-overridable:</b> <jk>true</jk>
-        * </ul>
-        * <p>
-        * If <jk>true</jk>, XML document will be validated.
-        * See {@link XMLInputFactory#IS_VALIDATING} for more info.
-        * <p>
-        * If <jk>true</jk>, string values will be trimmed of whitespace using 
{@link String#trim()} before being added to the POJO.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>This is equivalent to calling 
<code>setProperty(<jsf>XML_validating</jsf>, value)</code>.
-        * </ul>
-        *
-        * @param value The new value for this property.
-        * @return This object (for method chaining).
-        * @throws LockedException If {@link #lock()} was called on this class.
-        * @see XmlParserContext#XML_validating
-        */
-       public XmlParser setValidating(boolean value) throws LockedException {
-               return setProperty(XML_validating, value);
-       }
-
-       /**
-        * <b>Configuration property:</b>  XML reporter.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"XmlParser.reporter"</js>
-        *      <li><b>Data type:</b> {@link XMLReporter}
-        *      <li><b>Default:</b> <jk>null</jk>
-        *      <li><b>Session-overridable:</b> <jk>true</jk>
-        * </ul>
-        * <p>
-        * Associates an {@link XMLReporter} with this parser.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>Reporters are not copied to new parsers during a clone.
-        * </ul>
-        * <p>
-        * If <jk>true</jk>, string values will be trimmed of whitespace using 
{@link String#trim()} before being added to the POJO.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>This is equivalent to calling 
<code>setProperty(<jsf>XML_reporter</jsf>, value)</code>.
-        * </ul>
-        *
-        * @param value The new value for this property.
-        * @return This object (for method chaining).
-        * @throws LockedException If {@link #lock()} was called on this class.
-        * @see XmlParserContext#XML_reporter
-        */
-       public XmlParser setReporter(XMLReporter value) throws LockedException {
-               return setProperty(XML_reporter, value);
-       }
-
-       /**
-        * <b>Configuration property:</b>  XML resolver.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"XmlParser.resolver"</js>
-        *      <li><b>Data type:</b> {@link XMLResolver}
-        *      <li><b>Default:</b> <jk>null</jk>
-        *      <li><b>Session-overridable:</b> <jk>true</jk>
-        * </ul>
-        * <p>
-        * Associates an {@link XMLResolver} with this parser.
-        * <p>
-        * If <jk>true</jk>, string values will be trimmed of whitespace using 
{@link String#trim()} before being added to the POJO.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>This is equivalent to calling 
<code>setProperty(<jsf>XML_resolver</jsf>, value)</code>.
-        * </ul>
-        *
-        * @param value The new value for this property.
-        * @return This object (for method chaining).
-        * @throws LockedException If {@link #lock()} was called on this class.
-        * @see XmlParserContext#XML_resolver
-        */
-       public XmlParser setResolver(XMLResolver value) throws LockedException {
-               return setProperty(XML_resolver, value);
-       }
-
-       /**
-        * <b>Configuration property:</b>  XML event allocator.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"XmlParser.eventAllocator"</js>
-        *      <li><b>Data type:</b> {@link XMLEventAllocator}
-        *      <li><b>Default:</b> <jk>null</jk>
-        *      <li><b>Session-overridable:</b> <jk>true</jk>
-        * </ul>
-        * <p>
-        * Associates an {@link XMLEventAllocator} with this parser.
-        * <p>
-        * If <jk>true</jk>, string values will be trimmed of whitespace using 
{@link String#trim()} before being added to the POJO.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>This is equivalent to calling 
<code>setProperty(<jsf>XML_eventAllocator</jsf>, value)</code>.
-        * </ul>
-        *
-        * @param value The new value for this property.
-        * @return This object (for method chaining).
-        * @throws LockedException If {@link #lock()} was called on this class.
-        * @see XmlParserContext#XML_eventAllocator
-        */
-       public XmlParser setEventAllocator(XMLEventAllocator value) throws 
LockedException {
-               return setProperty(XML_eventAllocator, value);
-       }
-
-       /**
-        * <b>Configuration property:</b>  Preserve root element during 
generalized parsing.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"XmlParser.preserveRootElement"</js>
-        *      <li><b>Data type:</b> <code>Boolean</code>
-        *      <li><b>Default:</b> <jk>false</jk>
-        *      <li><b>Session-overridable:</b> <jk>true</jk>
-        * </ul>
-        * <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.
-        *
-        * Example:
-        * <table class='styled'>
-        *      <tr>
-        *              <td>XML</td>
-        *              <td>ObjectMap.toString(), 
preserveRootElement==false</td>
-        *              <td>ObjectMap.toString(), preserveRootElement==true</td>
-        *      </tr>
-        *      <tr>
-        *              
<td><code><xt>&lt;root&gt;&lt;a&gt;</xt>foobar<xt>&lt;/a&gt;&lt;/root&gt;</xt></code></td>
-        *              <td><code>{ a:<js>'foobar'</js> }</code></td>
-        *              <td><code>{ root: { a:<js>'foobar'</js> }}</code></td>
-        *      </tr>
-        * </table>
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>This is equivalent to calling 
<code>setProperty(<jsf>XML_preserveRootElement</jsf>, value)</code>.
-        * </ul>
-        *
-        * @param value The new value for this property.
-        * @return This object (for method chaining).
-        * @throws LockedException If {@link #lock()} was called on this class.
-        * @see XmlParserContext#XML_preserveRootElement
-        */
-       public XmlParser setPreserveRootElement(boolean value) throws 
LockedException {
-               return setProperty(XML_preserveRootElement, value);
-       }
-
-       @Override /* Parser */
-       public XmlParser setTrimStrings(boolean value) throws LockedException {
-               super.setTrimStrings(value);
-               return this;
-       }
-
-       @Override /* Parser */
-       public XmlParser setStrict(boolean value) throws LockedException {
-               super.setStrict(value);
-               return this;
-       }
-
-       @Override /* Parser */
-       public XmlParser setInputStreamCharset(String value) throws 
LockedException {
-               super.setInputStreamCharset(value);
-               return this;
-       }
-
-       @Override /* Parser */
-       public XmlParser setFileCharset(String value) throws LockedException {
-               super.setFileCharset(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeansRequireDefaultConstructor(boolean value) 
throws LockedException {
-               super.setBeansRequireDefaultConstructor(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeansRequireSerializable(boolean value) throws 
LockedException {
-               super.setBeansRequireSerializable(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeansRequireSettersForGetters(boolean value) throws 
LockedException {
-               super.setBeansRequireSettersForGetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeansRequireSomeProperties(boolean value) throws 
LockedException {
-               super.setBeansRequireSomeProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeanMapPutReturnsOldValue(boolean value) throws 
LockedException {
-               super.setBeanMapPutReturnsOldValue(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeanConstructorVisibility(Visibility value) throws 
LockedException {
-               super.setBeanConstructorVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeanClassVisibility(Visibility value) throws 
LockedException {
-               super.setBeanClassVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeanFieldVisibility(Visibility value) throws 
LockedException {
-               super.setBeanFieldVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setMethodVisibility(Visibility value) throws 
LockedException {
-               super.setMethodVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setUseJavaBeanIntrospector(boolean value) throws 
LockedException {
-               super.setUseJavaBeanIntrospector(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setUseInterfaceProxies(boolean value) throws 
LockedException {
-               super.setUseInterfaceProxies(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setIgnoreUnknownBeanProperties(boolean value) throws 
LockedException {
-               super.setIgnoreUnknownBeanProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setIgnoreUnknownNullBeanProperties(boolean value) 
throws LockedException {
-               super.setIgnoreUnknownNullBeanProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setIgnorePropertiesWithoutSetters(boolean value) 
throws LockedException {
-               super.setIgnorePropertiesWithoutSetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setIgnoreInvocationExceptionsOnGetters(boolean value) 
throws LockedException {
-               super.setIgnoreInvocationExceptionsOnGetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setIgnoreInvocationExceptionsOnSetters(boolean value) 
throws LockedException {
-               super.setIgnoreInvocationExceptionsOnSetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setSortProperties(boolean value) throws 
LockedException {
-               super.setSortProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setNotBeanPackages(String...values) throws 
LockedException {
-               super.setNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setNotBeanPackages(Collection<String> values) throws 
LockedException {
-               super.setNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser addNotBeanPackages(String...values) throws 
LockedException {
-               super.addNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser addNotBeanPackages(Collection<String> values) throws 
LockedException {
-               super.addNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser removeNotBeanPackages(String...values) throws 
LockedException {
-               super.removeNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser removeNotBeanPackages(Collection<String> values) 
throws LockedException {
-               super.removeNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setNotBeanClasses(Class<?>...values) throws 
LockedException {
-               super.setNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setNotBeanClasses(Collection<Class<?>> values) throws 
LockedException {
-               super.setNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser addNotBeanClasses(Class<?>...values) throws 
LockedException {
-               super.addNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser addNotBeanClasses(Collection<Class<?>> values) throws 
LockedException {
-               super.addNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser removeNotBeanClasses(Class<?>...values) throws 
LockedException {
-               super.removeNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser removeNotBeanClasses(Collection<Class<?>> values) 
throws LockedException {
-               super.removeNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeanFilters(Class<?>...values) throws 
LockedException {
-               super.setBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeanFilters(Collection<Class<?>> values) throws 
LockedException {
-               super.setBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser addBeanFilters(Class<?>...values) throws 
LockedException {
-               super.addBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser addBeanFilters(Collection<Class<?>> values) throws 
LockedException {
-               super.addBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser removeBeanFilters(Class<?>...values) throws 
LockedException {
-               super.removeBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser removeBeanFilters(Collection<Class<?>> values) throws 
LockedException {
-               super.removeBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setPojoSwaps(Class<?>...values) throws LockedException 
{
-               super.setPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setPojoSwaps(Collection<Class<?>> values) throws 
LockedException {
-               super.setPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser addPojoSwaps(Class<?>...values) throws LockedException 
{
-               super.addPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser addPojoSwaps(Collection<Class<?>> values) throws 
LockedException {
-               super.addPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser removePojoSwaps(Class<?>...values) throws 
LockedException {
-               super.removePojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser removePojoSwaps(Collection<Class<?>> values) throws 
LockedException {
-               super.removePojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setImplClasses(Map<Class<?>,Class<?>> values) throws 
LockedException {
-               super.setImplClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public <T> CoreApi addImplClass(Class<T> interfaceClass, Class<? 
extends T> implClass) throws LockedException {
-               super.addImplClass(interfaceClass, implClass);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeanDictionary(Class<?>...values) throws 
LockedException {
-               super.setBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeanDictionary(Collection<Class<?>> values) throws 
LockedException {
-               super.setBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser addToBeanDictionary(Class<?>...values) throws 
LockedException {
-               super.addToBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser addToBeanDictionary(Collection<Class<?>> values) 
throws LockedException {
-               super.addToBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser removeFromBeanDictionary(Class<?>...values) throws 
LockedException {
-               super.removeFromBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser removeFromBeanDictionary(Collection<Class<?>> values) 
throws LockedException {
-               super.removeFromBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setBeanTypePropertyName(String value) throws 
LockedException {
-               super.setBeanTypePropertyName(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setDefaultParser(Class<?> value) throws 
LockedException {
-               super.setDefaultParser(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setLocale(Locale value) throws LockedException {
-               super.setLocale(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setTimeZone(TimeZone value) throws LockedException {
-               super.setTimeZone(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setMediaType(MediaType value) throws LockedException {
-               super.setMediaType(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setDebug(boolean value) throws LockedException {
-               super.setDebug(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setProperty(String name, Object value) throws 
LockedException {
-               super.setProperty(name, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser setProperties(ObjectMap properties) throws 
LockedException {
-               super.setProperties(properties);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser addToProperty(String name, Object value) throws 
LockedException {
-               super.addToProperty(name, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser putToProperty(String name, Object key, Object value) 
throws LockedException {
-               super.putToProperty(name, key, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser putToProperty(String name, Object value) throws 
LockedException {
-               super.putToProperty(name, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlParser removeFromProperty(String name, Object value) throws 
LockedException {
-               super.removeFromProperty(name, value);
-               return this;
-       }
-
-
-       
//--------------------------------------------------------------------------------
-       // Overridden methods
-       
//--------------------------------------------------------------------------------
-
-       @Override /* CoreApi */
-       public XmlParser setClassLoader(ClassLoader classLoader) throws 
LockedException {
-               super.setClassLoader(classLoader);
-               return this;
-       }
-
-       @Override /* Lockable */
-       public XmlParser lock() {
-               super.lock();
-               return this;
-       }
-
-       @Override /* Lockable */
-       public XmlParser clone() {
-               try {
-                       XmlParser c = (XmlParser)super.clone();
-                       return c;
-               } catch (CloneNotSupportedException e) {
-                       throw new RuntimeException(e); // Shouldn't happen.
-               }
-       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
new file mode 100644
index 0000000..6074bb3
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
@@ -0,0 +1,616 @@
+// 
***************************************************************************************************************************
+// * 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.xml;
+
+import static org.apache.juneau.xml.XmlParserContext.*;
+
+import java.util.*;
+
+import javax.xml.stream.*;
+import javax.xml.stream.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.parser.*;
+
+/**
+ * Builder class for building XML parsers.
+ */
+public class XmlParserBuilder extends ParserBuilder {
+
+       /**
+        * Constructor, default settings.
+        */
+       public XmlParserBuilder() {
+               super();
+       }
+
+       /**
+        * Constructor.
+        * @param propertyStore The initial configuration settings for this 
builder.
+        */
+       public XmlParserBuilder(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParser build() {
+               return new XmlParser(propertyStore);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Properties
+       
//--------------------------------------------------------------------------------
+
+       /**
+        * <b>Configuration property:</b>  Enable validation.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"XmlParserBuilder.validating"</js>
+        *      <li><b>Data type:</b> <code>Boolean</code>
+        *      <li><b>Default:</b> <jk>false</jk>
+        *      <li><b>Session-overridable:</b> <jk>true</jk>
+        * </ul>
+        * <p>
+        * If <jk>true</jk>, XML document will be validated.
+        * See {@link XMLInputFactory#IS_VALIDATING} for more info.
+        * <p>
+        * If <jk>true</jk>, string values will be trimmed of whitespace using 
{@link String#trim()} before being added to the POJO.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>XML_validating</jsf>, value)</code>.
+        * </ul>
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see XmlParserContext#XML_validating
+        */
+       public XmlParserBuilder validating(boolean value) {
+               return property(XML_validating, value);
+       }
+
+       /**
+        * <b>Configuration property:</b>  XML reporter.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"XmlParserBuilder.reporter"</js>
+        *      <li><b>Data type:</b> {@link XMLReporter}
+        *      <li><b>Default:</b> <jk>null</jk>
+        *      <li><b>Session-overridable:</b> <jk>true</jk>
+        * </ul>
+        * <p>
+        * Associates an {@link XMLReporter} with this parser.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>Reporters are not copied to new parsers during a clone.
+        * </ul>
+        * <p>
+        * If <jk>true</jk>, string values will be trimmed of whitespace using 
{@link String#trim()} before being added to the POJO.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>XML_reporter</jsf>, value)</code>.
+        * </ul>
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see XmlParserContext#XML_reporter
+        */
+       public XmlParserBuilder reporter(XMLReporter value) {
+               return property(XML_reporter, value);
+       }
+
+       /**
+        * <b>Configuration property:</b>  XML resolver.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"XmlParserBuilder.resolver"</js>
+        *      <li><b>Data type:</b> {@link XMLResolver}
+        *      <li><b>Default:</b> <jk>null</jk>
+        *      <li><b>Session-overridable:</b> <jk>true</jk>
+        * </ul>
+        * <p>
+        * Associates an {@link XMLResolver} with this parser.
+        * <p>
+        * If <jk>true</jk>, string values will be trimmed of whitespace using 
{@link String#trim()} before being added to the POJO.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>XML_resolver</jsf>, value)</code>.
+        * </ul>
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see XmlParserContext#XML_resolver
+        */
+       public XmlParserBuilder resolver(XMLResolver value) {
+               return property(XML_resolver, value);
+       }
+
+       /**
+        * <b>Configuration property:</b>  XML event allocator.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"XmlParserBuilder.eventAllocator"</js>
+        *      <li><b>Data type:</b> {@link XMLEventAllocator}
+        *      <li><b>Default:</b> <jk>null</jk>
+        *      <li><b>Session-overridable:</b> <jk>true</jk>
+        * </ul>
+        * <p>
+        * Associates an {@link XMLEventAllocator} with this parser.
+        * <p>
+        * If <jk>true</jk>, string values will be trimmed of whitespace using 
{@link String#trim()} before being added to the POJO.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>XML_eventAllocator</jsf>, value)</code>.
+        * </ul>
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see XmlParserContext#XML_eventAllocator
+        */
+       public XmlParserBuilder eventAllocator(XMLEventAllocator value) {
+               return property(XML_eventAllocator, value);
+       }
+
+       /**
+        * <b>Configuration property:</b>  Preserve root element during 
generalized parsing.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"XmlParserBuilder.preserveRootElement"</js>
+        *      <li><b>Data type:</b> <code>Boolean</code>
+        *      <li><b>Default:</b> <jk>false</jk>
+        *      <li><b>Session-overridable:</b> <jk>true</jk>
+        * </ul>
+        * <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.
+        *
+        * Example:
+        * <table class='styled'>
+        *      <tr>
+        *              <td>XML</td>
+        *              <td>ObjectMap.toString(), 
preserveRootElement==false</td>
+        *              <td>ObjectMap.toString(), preserveRootElement==true</td>
+        *      </tr>
+        *      <tr>
+        *              
<td><code><xt>&lt;root&gt;&lt;a&gt;</xt>foobar<xt>&lt;/a&gt;&lt;/root&gt;</xt></code></td>
+        *              <td><code>{ a:<js>'foobar'</js> }</code></td>
+        *              <td><code>{ root: { a:<js>'foobar'</js> }}</code></td>
+        *      </tr>
+        * </table>
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>XML_preserveRootElement</jsf>, value)</code>.
+        * </ul>
+        *
+        * @param value The new value for this property.
+        * @return This object (for method chaining).
+        * @see XmlParserContext#XML_preserveRootElement
+        */
+       public XmlParserBuilder preserveRootElement(boolean value) {
+               return property(XML_preserveRootElement, value);
+       }
+
+       @Override /* ParserBuilder */
+       public XmlParserBuilder trimStrings(boolean value) {
+               super.trimStrings(value);
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public XmlParserBuilder strict(boolean value) {
+               super.strict(value);
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public XmlParserBuilder strict() {
+               super.strict();
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public XmlParserBuilder inputStreamCharset(String value) {
+               super.inputStreamCharset(value);
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public XmlParserBuilder fileCharset(String value) {
+               super.fileCharset(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beansRequireDefaultConstructor(boolean value) {
+               super.beansRequireDefaultConstructor(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beansRequireSerializable(boolean value) {
+               super.beansRequireSerializable(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beansRequireSettersForGetters(boolean value) {
+               super.beansRequireSettersForGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beansRequireSomeProperties(boolean value) {
+               super.beansRequireSomeProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beanMapPutReturnsOldValue(boolean value) {
+               super.beanMapPutReturnsOldValue(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beanConstructorVisibility(Visibility value) {
+               super.beanConstructorVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beanClassVisibility(Visibility value) {
+               super.beanClassVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beanFieldVisibility(Visibility value) {
+               super.beanFieldVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder methodVisibility(Visibility value) {
+               super.methodVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder useJavaBeanIntrospector(boolean value) {
+               super.useJavaBeanIntrospector(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder useInterfaceProxies(boolean value) {
+               super.useInterfaceProxies(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder ignoreUnknownBeanProperties(boolean value) {
+               super.ignoreUnknownBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder ignoreUnknownNullBeanProperties(boolean value) {
+               super.ignoreUnknownNullBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder ignorePropertiesWithoutSetters(boolean value) {
+               super.ignorePropertiesWithoutSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder ignoreInvocationExceptionsOnGetters(boolean 
value) {
+               super.ignoreInvocationExceptionsOnGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder ignoreInvocationExceptionsOnSetters(boolean 
value) {
+               super.ignoreInvocationExceptionsOnSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder sortProperties(boolean value) {
+               super.sortProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder notBeanPackages(String...values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder notBeanPackages(Collection<String> values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder setNotBeanPackages(String...values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder setNotBeanPackages(Collection<String> values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder removeNotBeanPackages(String...values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder removeNotBeanPackages(Collection<String> 
values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder notBeanClasses(Class<?>...values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder notBeanClasses(Collection<Class<?>> values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder setNotBeanClasses(Class<?>...values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder setNotBeanClasses(Collection<Class<?>> values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder removeNotBeanClasses(Class<?>...values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder removeNotBeanClasses(Collection<Class<?>> 
values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beanFilters(Class<?>...values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beanFilters(Collection<Class<?>> values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder setBeanFilters(Class<?>...values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder setBeanFilters(Collection<Class<?>> values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder removeBeanFilters(Class<?>...values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder removeBeanFilters(Collection<Class<?>> values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder pojoSwaps(Class<?>...values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder pojoSwaps(Collection<Class<?>> values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder setPojoSwaps(Class<?>...values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder setPojoSwaps(Collection<Class<?>> values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder removePojoSwaps(Class<?>...values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder removePojoSwaps(Collection<Class<?>> values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder implClasses(Map<Class<?>,Class<?>> values) {
+               super.implClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public <T> CoreObjectBuilder implClass(Class<T> interfaceClass, Class<? 
extends T> implClass) {
+               super.implClass(interfaceClass, implClass);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beanDictionary(Class<?>...values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beanDictionary(Collection<Class<?>> values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder setBeanDictionary(Class<?>...values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder setBeanDictionary(Collection<Class<?>> values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder removeFromBeanDictionary(Class<?>...values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder removeFromBeanDictionary(Collection<Class<?>> 
values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder beanTypePropertyName(String value) {
+               super.beanTypePropertyName(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder defaultParser(Class<?> value) {
+               super.defaultParser(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder locale(Locale value) {
+               super.locale(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder timeZone(TimeZone value) {
+               super.timeZone(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder mediaType(MediaType value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder debug(boolean value) {
+               super.debug(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder property(String name, Object value) {
+               super.property(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder properties(Map<String,Object> properties) {
+               super.properties(properties);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder addToProperty(String name, Object value) {
+               super.addToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder putToProperty(String name, Object key, Object 
value) {
+               super.putToProperty(name, key, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder putToProperty(String name, Object value) {
+               super.putToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder removeFromProperty(String name, Object value) {
+               super.removeFromProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder classLoader(ClassLoader classLoader) {
+               super.classLoader(classLoader);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlParserBuilder 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/xml/XmlParserContext.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java
index 095410d..931edd7 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserContext.java
@@ -21,10 +21,10 @@ import org.apache.juneau.parser.*;
 /**
  * Configurable properties on the {@link XmlParser} class.
  * <p>
- * Context properties are set by calling {@link 
ContextFactory#setProperty(String, Object)} on the context factory
- * returned {@link CoreApi#getContextFactory()}.
+ * Context properties are set by calling {@link 
PropertyStore#setProperty(String, Object)} on the property store
+ * passed into the constructor.
  * <p>
- * See {@link ContextFactory} for more information about context properties.
+ * See {@link PropertyStore} for more information about context properties.
  *
  * <h5 class='section'>Inherited configurable properties:</h5>
  * <ul class='javahierarchy'>
@@ -137,17 +137,17 @@ public class XmlParserContext extends ParserContext {
        /**
         * Constructor.
         * <p>
-        * Typically only called from {@link ContextFactory#getContext(Class)}.
+        * Typically only called from {@link PropertyStore#getContext(Class)}.
         *
-        * @param cf The factory that created this context.
+        * @param ps The property store that created this context.
         */
-       public XmlParserContext(ContextFactory cf) {
-               super(cf);
-               validating = cf.getProperty(XML_validating, boolean.class, 
false);
-               preserveRootElement = cf.getProperty(XML_preserveRootElement, 
boolean.class, false);
-               reporter = cf.getProperty(XML_reporter, XMLReporter.class, 
null);
-               resolver = cf.getProperty(XML_resolver, XMLResolver.class, 
null);
-               eventAllocator = cf.getProperty(XML_eventAllocator, 
XMLEventAllocator.class, null);
+       public XmlParserContext(PropertyStore ps) {
+               super(ps);
+               validating = ps.getProperty(XML_validating, boolean.class, 
false);
+               preserveRootElement = ps.getProperty(XML_preserveRootElement, 
boolean.class, false);
+               reporter = ps.getProperty(XML_reporter, XMLReporter.class, 
null);
+               resolver = ps.getProperty(XML_resolver, XMLResolver.class, 
null);
+               eventAllocator = ps.getProperty(XML_eventAllocator, 
XMLEventAllocator.class, null);
        }
 
        @Override /* Context */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserSession.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserSession.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserSession.java
index 6a52ed7..0cb6aba 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserSession.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParserSession.java
@@ -12,8 +12,8 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.xml;
 
+import static javax.xml.stream.XMLStreamConstants.*;
 import static org.apache.juneau.xml.XmlParserContext.*;
-import static  javax.xml.stream.XMLStreamConstants.*;
 
 import java.io.*;
 import java.lang.reflect.*;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java
index 6dd2841..5036bf8 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaDocSerializer.java
@@ -37,16 +37,10 @@ public class XmlSchemaDocSerializer extends 
XmlSchemaSerializer {
 
        /**
         * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
         */
-       public XmlSchemaDocSerializer() {}
-
-       /**
-        * Constructor.
-        *
-        * @param cf The context factory to use for creating the context for 
this serializer.
-        */
-       protected XmlSchemaDocSerializer(ContextFactory cf) {
-               super(cf);
+       public XmlSchemaDocSerializer(PropertyStore propertyStore) {
+               super(propertyStore, null);
        }
 
        @Override /* Serializer */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
index ec9bc52..1cd340f 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
@@ -56,20 +56,24 @@ import org.w3c.dom.ls.*;
 @Produces(value="text/xml+schema",contentType="text/xml")
 public class XmlSchemaSerializer extends XmlSerializer {
 
+       private final XmlSerializerContext ctx;
+
        /**
-        * Constructor
+        * Constructor.
+        * @param propertyStore Initialize with the specified config property 
store.
         */
-       public XmlSchemaSerializer() {
-               super();
+       public XmlSchemaSerializer(PropertyStore propertyStore) {
+               this(propertyStore, null);
        }
 
        /**
-        * Constructor.
-        *
-        * @param config Initialize with the specified config property store.
+        * Constructor
+        * @param propertyStore The property store containing all the settings 
for this object.
+        * @param overrideProperties A set of overridden settings, typically 
defined by the class itself.
         */
-       protected XmlSchemaSerializer(ContextFactory config) {
-               getContextFactory().copyFrom(config);
+       public XmlSchemaSerializer(PropertyStore propertyStore, 
Map<String,Object> overrideProperties) {
+               super(propertyStore);
+               this.ctx = 
this.propertyStore.create(overrideProperties).getContext(XmlSerializerContext.class);
        }
 
        @Override /* XmlSerializer */
@@ -580,6 +584,6 @@ public class XmlSchemaSerializer extends XmlSerializer {
                if (op == null)
                        op = new ObjectMap();
                op.put(XmlSerializerContext.XML_enableNamespaces, true);
-               return new 
XmlSerializerSession(getContext(XmlSerializerContext.class), op, output, 
javaMethod, locale, timeZone, mediaType);
+               return new XmlSerializerSession(ctx, op, output, javaMethod, 
locale, timeZone, mediaType);
        }
 }

Reply via email to