http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
new file mode 100644
index 0000000..6cdf163
--- /dev/null
+++ 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializerBuilder.java
@@ -0,0 +1,570 @@
+// 
***************************************************************************************************************************
+// * 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 java.util.*;
+
+import org.apache.juneau.*;
+
+/**
+ * Builder class for building instances of XML Schema serializers.
+ */
+public class XmlSchemaSerializerBuilder extends XmlSerializerBuilder {
+
+       /**
+        * Constructor, default settings.
+        */
+       public XmlSchemaSerializerBuilder() {
+               super();
+       }
+
+       /**
+        * Constructor.
+        * @param propertyStore The initial configuration settings for this 
builder.
+        */
+       public XmlSchemaSerializerBuilder(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializer build() {
+               return new XmlSchemaSerializer(propertyStore);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Properties
+       
//--------------------------------------------------------------------------------
+
+       @Override /* XmlSerializerBuilder */
+       public XmlSchemaSerializerBuilder enableNamespaces(boolean value) {
+               super.enableNamespaces(value);
+               return this;
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public XmlSchemaSerializerBuilder ns() {
+               super.ns();
+               return this;
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public XmlSchemaSerializerBuilder autoDetectNamespaces(boolean value) {
+               super.autoDetectNamespaces(value);
+               return this;
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public XmlSchemaSerializerBuilder addNamespaceUrisToRoot(boolean value) 
{
+               super.addNamespaceUrisToRoot(value);
+               return this;
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public XmlSchemaSerializerBuilder defaultNamespace(String value) {
+               super.defaultNamespace(value);
+               return this;
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public XmlSchemaSerializerBuilder xsNamespace(Namespace value) {
+               super.xsNamespace(value);
+               return this;
+       }
+
+       @Override /* XmlSerializerBuilder */
+       public XmlSchemaSerializerBuilder namespaces(Namespace...values) {
+               super.namespaces(values);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder maxDepth(int value) {
+               super.maxDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder initialDepth(int value) {
+               super.initialDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder detectRecursions(boolean value) {
+               super.detectRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder ignoreRecursions(boolean value) {
+               super.ignoreRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder useWhitespace(boolean value) {
+               super.useWhitespace(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder ws() {
+               super.ws();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder addBeanTypeProperties(boolean value) {
+               super.addBeanTypeProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder quoteChar(char value) {
+               super.quoteChar(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder sq() {
+               super.sq();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder trimNullProperties(boolean value) {
+               super.trimNullProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder trimEmptyCollections(boolean value) {
+               super.trimEmptyCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder trimEmptyMaps(boolean value) {
+               super.trimEmptyMaps(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder trimStrings(boolean value) {
+               super.trimStrings(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder relativeUriBase(String value) {
+               super.relativeUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder absolutePathUriBase(String value) {
+               super.absolutePathUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder sortCollections(boolean value) {
+               super.sortCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSchemaSerializerBuilder sortMaps(boolean value) {
+               super.sortMaps(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
beansRequireDefaultConstructor(boolean value) {
+               super.beansRequireDefaultConstructor(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beansRequireSerializable(boolean 
value) {
+               super.beansRequireSerializable(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beansRequireSettersForGetters(boolean 
value) {
+               super.beansRequireSettersForGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beansRequireSomeProperties(boolean 
value) {
+               super.beansRequireSomeProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beanMapPutReturnsOldValue(boolean 
value) {
+               super.beanMapPutReturnsOldValue(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beanConstructorVisibility(Visibility 
value) {
+               super.beanConstructorVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beanClassVisibility(Visibility value) 
{
+               super.beanClassVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beanFieldVisibility(Visibility value) 
{
+               super.beanFieldVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder methodVisibility(Visibility value) {
+               super.methodVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder useJavaBeanIntrospector(boolean 
value) {
+               super.useJavaBeanIntrospector(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder useInterfaceProxies(boolean value) {
+               super.useInterfaceProxies(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder ignoreUnknownBeanProperties(boolean 
value) {
+               super.ignoreUnknownBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
ignoreUnknownNullBeanProperties(boolean value) {
+               super.ignoreUnknownNullBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
ignorePropertiesWithoutSetters(boolean value) {
+               super.ignorePropertiesWithoutSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
ignoreInvocationExceptionsOnGetters(boolean value) {
+               super.ignoreInvocationExceptionsOnGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
ignoreInvocationExceptionsOnSetters(boolean value) {
+               super.ignoreInvocationExceptionsOnSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder sortProperties(boolean value) {
+               super.sortProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder notBeanPackages(String...values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder notBeanPackages(Collection<String> 
values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder setNotBeanPackages(String...values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder setNotBeanPackages(Collection<String> 
values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
removeNotBeanPackages(String...values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
removeNotBeanPackages(Collection<String> values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder notBeanClasses(Class<?>...values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder notBeanClasses(Collection<Class<?>> 
values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder setNotBeanClasses(Class<?>...values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
setNotBeanClasses(Collection<Class<?>> values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
removeNotBeanClasses(Class<?>...values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
removeNotBeanClasses(Collection<Class<?>> values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beanFilters(Class<?>...values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beanFilters(Collection<Class<?>> 
values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder setBeanFilters(Class<?>...values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder setBeanFilters(Collection<Class<?>> 
values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder removeBeanFilters(Class<?>...values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
removeBeanFilters(Collection<Class<?>> values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder pojoSwaps(Class<?>...values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder pojoSwaps(Collection<Class<?>> 
values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder setPojoSwaps(Class<?>...values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder setPojoSwaps(Collection<Class<?>> 
values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder removePojoSwaps(Class<?>...values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder removePojoSwaps(Collection<Class<?>> 
values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder implClasses(Map<Class<?>,Class<?>> 
values) {
+               super.implClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public <T> XmlSchemaSerializerBuilder implClass(Class<T> 
interfaceClass, Class<? extends T> implClass) {
+               super.implClass(interfaceClass, implClass);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beanDictionary(Class<?>...values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beanDictionary(Collection<Class<?>> 
values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder setBeanDictionary(Class<?>...values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
setBeanDictionary(Collection<Class<?>> values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
removeFromBeanDictionary(Class<?>...values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 
removeFromBeanDictionary(Collection<Class<?>> values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder beanTypePropertyName(String value) {
+               super.beanTypePropertyName(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder defaultParser(Class<?> value) {
+               super.defaultParser(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder locale(Locale value) {
+               super.locale(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder timeZone(TimeZone value) {
+               super.timeZone(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder mediaType(MediaType value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder debug(boolean value) {
+               super.debug(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder property(String name, Object value) {
+               super.property(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder properties(Map<String,Object> 
properties) {
+               super.properties(properties);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder addToProperty(String name, Object 
value) {
+               super.addToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder putToProperty(String name, Object 
key, Object value) {
+               super.putToProperty(name, key, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder putToProperty(String name, Object 
value) {
+               super.putToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder removeFromProperty(String name, 
Object value) {
+               super.removeFromProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder classLoader(ClassLoader classLoader) {
+               super.classLoader(classLoader);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSchemaSerializerBuilder 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/XmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index 3091056..da39582 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -12,10 +12,11 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.xml;
 
-import static org.apache.juneau.xml.XmlSerializerContext.*;
-import static org.apache.juneau.xml.annotation.XmlFormat.*;
+import static org.apache.juneau.serializer.SerializerContext.*;
 import static org.apache.juneau.xml.XmlSerializer.ContentResult.*;
 import static org.apache.juneau.xml.XmlSerializer.JsonType.*;
+import static org.apache.juneau.xml.XmlSerializerContext.*;
+import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.lang.reflect.*;
 import java.util.*;
@@ -125,64 +126,128 @@ import org.apache.juneau.xml.annotation.*;
 public class XmlSerializer extends WriterSerializer {
 
        /** Default serializer without namespaces. */
-       public static final XmlSerializer DEFAULT = new XmlSerializer().lock();
+       public static final XmlSerializer DEFAULT = new 
XmlSerializer(PropertyStore.create());
 
        /** Default serializer without namespaces, with single quotes. */
-       public static final XmlSerializer DEFAULT_SQ = new 
XmlSerializer.Sq().lock();
+       public static final XmlSerializer DEFAULT_SQ = new 
Sq(PropertyStore.create());
 
        /** Default serializer without namespaces, with single quotes, 
whitespace added. */
-       public static final XmlSerializer DEFAULT_SQ_READABLE = new 
XmlSerializer.SqReadable().lock();
+       public static final XmlSerializer DEFAULT_SQ_READABLE = new 
SqReadable(PropertyStore.create());
 
        /** Default serializer, all default settings. */
-       public static final XmlSerializer DEFAULT_NS = new 
XmlSerializer.Ns().lock();
+       public static final XmlSerializer DEFAULT_NS = new 
Ns(PropertyStore.create());
 
        /** Default serializer, single quotes. */
-       public static final XmlSerializer DEFAULT_NS_SQ = new 
XmlSerializer.NsSq().lock();
+       public static final XmlSerializer DEFAULT_NS_SQ = new 
NsSq(PropertyStore.create());
 
        /** Default serializer, single quotes, whitespace added. */
-       public static final XmlSerializer DEFAULT_NS_SQ_READABLE = new 
XmlSerializer.NsSqReadable().lock();
+       public static final XmlSerializer DEFAULT_NS_SQ_READABLE = new 
NsSqReadable(PropertyStore.create());
+
 
        /** Default serializer, single quotes. */
        public static class Sq extends XmlSerializer {
-               /** Constructor */
-               public Sq() {
-                       setQuoteChar('\'');
+
+               /**
+                * Constructor.
+                * @param propertyStore The property store containing all the 
settings for this object.
+                */
+               public Sq(PropertyStore propertyStore) {
+                       super(propertyStore);
+               }
+
+               @Override /* CoreObject */
+               protected ObjectMap getOverrideProperties() {
+                       return 
super.getOverrideProperties().append(SERIALIZER_quoteChar, '\'');
                }
        }
 
        /** Default serializer, single quotes, whitespace added. */
-       public static class SqReadable extends Sq {
-               /** Constructor */
-               public SqReadable() {
-                       setUseWhitespace(true);
+       public static class SqReadable extends XmlSerializer {
+
+               /**
+                * Constructor.
+                * @param propertyStore The property store containing all the 
settings for this object.
+                */
+               public SqReadable(PropertyStore propertyStore) {
+                       super(propertyStore);
+               }
+
+               @Override /* CoreObject */
+               protected ObjectMap getOverrideProperties() {
+                       return 
super.getOverrideProperties().append(SERIALIZER_quoteChar, 
'\'').append(SERIALIZER_useWhitespace, true);
                }
        }
 
        /** Default serializer without namespaces. */
        @Produces(value="text/xml+simple",contentType="text/xml")
        public static class Ns extends XmlSerializer {
-               /** Constructor */
-               public Ns() {
-                       setEnableNamespaces(true);
+
+               /**
+                * 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);
                }
        }
 
        /** Default serializer without namespaces, single quotes. */
-       public static class NsSq extends Ns {
-               /** Constructor */
-               public NsSq() {
-                       setQuoteChar('\'');
+       public static class NsSq extends XmlSerializer {
+
+               /**
+                * Constructor.
+                * @param propertyStore The property store containing all the 
settings for this object.
+                */
+               public NsSq(PropertyStore propertyStore) {
+                       super(propertyStore);
+               }
+
+               @Override /* CoreObject */
+               protected ObjectMap getOverrideProperties() {
+                       return 
super.getOverrideProperties().append(XML_enableNamespaces, 
true).append(SERIALIZER_quoteChar, '\'');
                }
        }
 
        /** Default serializer without namespaces, single quotes, with 
whitespace. */
-       public static class NsSqReadable extends NsSq {
-               /** Constructor */
-               public NsSqReadable() {
-                       setUseWhitespace(true);
+       public static class NsSqReadable extends XmlSerializer {
+
+               /**
+                * Constructor.
+                * @param propertyStore The property store containing all the 
settings for this object.
+                */
+               public NsSqReadable(PropertyStore propertyStore) {
+                       super(propertyStore);
+               }
+
+               @Override /* CoreObject */
+               protected ObjectMap getOverrideProperties() {
+                       return 
super.getOverrideProperties().append(XML_enableNamespaces, 
true).append(SERIALIZER_quoteChar, '\'').append(SERIALIZER_useWhitespace, true);
                }
        }
 
+
+       private final XmlSerializerContext ctx;
+       private volatile XmlSchemaSerializer schemaSerializer;
+
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       public XmlSerializer(PropertyStore propertyStore) {
+               super(propertyStore);
+               this.ctx = createContext(XmlSerializerContext.class);
+       }
+
+       @Override /* CoreObject */
+       public XmlSerializerBuilder builder() {
+               return new XmlSerializerBuilder(propertyStore);
+       }
+
        /**
         * Recursively searches for the XML namespaces on the specified POJO 
and adds them to the serializer context object.
         *
@@ -717,8 +782,9 @@ public class XmlSerializer extends WriterSerializer {
         * @return The schema serializer.
         */
        public XmlSerializer getSchemaSerializer() {
-               XmlSchemaSerializer s = new 
XmlSchemaSerializer(getContextFactory());
-               return s;
+               if (schemaSerializer == null)
+                       schemaSerializer = new 
XmlSchemaSerializer(propertyStore, getOverrideProperties());
+               return schemaSerializer;
        }
 
        static enum JsonType {
@@ -767,677 +833,6 @@ public class XmlSerializer extends WriterSerializer {
 
        @Override /* Serializer */
        public XmlSerializerSession createSession(Object output, ObjectMap op, 
Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType) {
-               return new 
XmlSerializerSession(getContext(XmlSerializerContext.class), op, output, 
javaMethod, locale, timeZone, mediaType);
-       }
-
-
-       
//--------------------------------------------------------------------------------
-       // Properties
-       
//--------------------------------------------------------------------------------
-
-       /**
-        * <b>Configuration property:</b>  Enable support for XML namespaces.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"XmlSerializer.enableNamespaces"</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 not enabled, XML output will not contain any namespaces 
regardless of any other settings.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>This is equivalent to calling 
<code>setProperty(<jsf>XML_enableNamespaces</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).
-        * @throws LockedException If {@link #lock()} was called on this class.
-        * @see XmlSerializerContext#XML_enableNamespaces
-        */
-       public XmlSerializer setEnableNamespaces(boolean value) throws 
LockedException {
-               return setProperty(XML_enableNamespaces, value);
-       }
-
-       /**
-        * <b>Configuration property:</b>  Auto-detect namespace usage.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"XmlSerializer.autoDetectNamespaces"</js>
-        *      <li><b>Data type:</b> <code>Boolean</code>
-        *      <li><b>Default:</b> <jk>true</jk>
-        *      <li><b>Session-overridable:</b> <jk>true</jk>
-        * </ul>
-        * <p>
-        * Detect namespace usage before serialization.
-        * <p>
-        * Used in conjunction with {@link 
XmlSerializerContext#XML_addNamespaceUrisToRoot} to reduce
-        * the list of namespace URLs appended to the root element to only those
-        * that will be used in the resulting document.
-        * <p>
-        * If enabled, then the data structure will first be crawled looking for
-        * namespaces that will be encountered before the root element is
-        * serialized.
-        * <p>
-        * This setting is ignored if {@link 
XmlSerializerContext#XML_enableNamespaces} is not enabled.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>Auto-detection of namespaces can be costly performance-wise.
-        *              In high-performance environments, it's recommended that 
namespace detection be
-        *              disabled, and that namespaces be manually defined 
through the {@link XmlSerializerContext#XML_namespaces} property.
-        * </ul>
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>This is equivalent to calling 
<code>setProperty(<jsf>XML_autoDetectNamespaces</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).
-        * @throws LockedException If {@link #lock()} was called on this class.
-        * @see XmlSerializerContext#XML_autoDetectNamespaces
-        */
-       public XmlSerializer setAutoDetectNamespaces(boolean value) throws 
LockedException {
-               return setProperty(XML_autoDetectNamespaces, value);
-       }
-
-       /**
-        * <b>Configuration property:</b>  Add namespace URLs to the root 
element.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"XmlSerializer.addNamespaceUrisToRoot"</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>
-        * Use this setting to add {@code xmlns:x} attributes to the root
-        * element for the default and all mapped namespaces.
-        * <p>
-        * This setting is ignored if {@link 
XmlSerializerContext#XML_enableNamespaces} is not enabled.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>This is equivalent to calling 
<code>setProperty(<jsf>XML_addNamespaceUrisToRoot</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).
-        * @throws LockedException If {@link #lock()} was called on this class.
-        * @see XmlSerializerContext#XML_addNamespaceUrisToRoot
-        */
-       public XmlSerializer setAddNamespaceUrisToRoot(boolean value) throws 
LockedException {
-               return setProperty(XML_addNamespaceUrisToRoot, value);
-       }
-
-       /**
-        * <b>Configuration property:</b>  Default namespace.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"XmlSerializer.defaultNamespace"</js>
-        *      <li><b>Data type:</b> <code>String</code>
-        *      <li><b>Default:</b> 
<js>"{juneau:'http://www.apache.org/2013/Juneau'}"</js>
-        *      <li><b>Session-overridable:</b> <jk>true</jk>
-        * </ul>
-        * <p>
-        * Specifies the default namespace URI for this document.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>This is equivalent to calling 
<code>setProperty(<jsf>XML_defaultNamespace</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).
-        * @throws LockedException If {@link #lock()} was called on this class.
-        * @see XmlSerializerContext#XML_defaultNamespace
-        */
-       public XmlSerializer setDefaultNamespace(String value) throws 
LockedException {
-               return setProperty(XML_defaultNamespace, value);
-       }
-
-       /**
-        * <b>Configuration property:</b>  XMLSchema namespace.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"XmlSerializer.xsNamespace"</js>
-        *      <li><b>Data type:</b> {@link Namespace}
-        *      <li><b>Default:</b> 
<code>{name:<js>'xs'</js>,uri:<js>'http://www.w3.org/2001/XMLSchema'</js>}</code>
-        *      <li><b>Session-overridable:</b> <jk>true</jk>
-        * </ul>
-        * <p>
-        * Specifies the namespace for the <code>XMLSchema</code> namespace, 
used by the schema generated
-        * by the {@link XmlSchemaSerializer} class.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>This is equivalent to calling 
<code>setProperty(<jsf>XML_xsNamespace</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).
-        * @throws LockedException If {@link #lock()} was called on this class.
-        * @see XmlSerializerContext#XML_xsNamespace
-        */
-       public XmlSerializer setXsNamespace(Namespace value) throws 
LockedException {
-               return setProperty(XML_xsNamespace, value);
-       }
-
-       /**
-        * <b>Configuration property:</b>  Default namespaces.
-        * <p>
-        * <ul>
-        *      <li><b>Name:</b> <js>"XmlSerializer.namespaces"</js>
-        *      <li><b>Data type:</b> <code>Set&lt;{@link Namespace}&gt;</code>
-        *      <li><b>Default:</b> empty set
-        *      <li><b>Session-overridable:</b> <jk>true</jk>
-        * </ul>
-        * <p>
-        * The default list of namespaces associated with this serializer.
-        * <p>
-        * <h5 class='section'>Notes:</h5>
-        * <ul>
-        *      <li>This is equivalent to calling 
<code>setProperty(<jsf>XML_namespaces</jsf>, values)</code>.
-        *      <li>This introduces a slight performance penalty.
-        * </ul>
-        *
-        * @param values The new value for this property.
-        * @return This object (for method chaining).
-        * @throws LockedException If {@link #lock()} was called on this class.
-        * @see XmlSerializerContext#XML_namespaces
-        */
-       public XmlSerializer setNamespaces(Namespace...values) throws 
LockedException {
-               return setProperty(XML_namespaces, values);
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setMaxDepth(int value) throws LockedException {
-               super.setMaxDepth(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setInitialDepth(int value) throws LockedException {
-               super.setInitialDepth(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setDetectRecursions(boolean value) throws 
LockedException {
-               super.setDetectRecursions(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setIgnoreRecursions(boolean value) throws 
LockedException {
-               super.setIgnoreRecursions(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setUseWhitespace(boolean value) throws 
LockedException {
-               super.setUseWhitespace(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setAddBeanTypeProperties(boolean value) throws 
LockedException {
-               super.setAddBeanTypeProperties(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setQuoteChar(char value) throws LockedException {
-               super.setQuoteChar(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setTrimNullProperties(boolean value) throws 
LockedException {
-               super.setTrimNullProperties(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setTrimEmptyCollections(boolean value) throws 
LockedException {
-               super.setTrimEmptyCollections(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setTrimEmptyMaps(boolean value) throws 
LockedException {
-               super.setTrimEmptyMaps(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setTrimStrings(boolean value) throws 
LockedException {
-               super.setTrimStrings(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setRelativeUriBase(String value) throws 
LockedException {
-               super.setRelativeUriBase(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setAbsolutePathUriBase(String value) throws 
LockedException {
-               super.setAbsolutePathUriBase(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setSortCollections(boolean value) throws 
LockedException {
-               super.setSortCollections(value);
-               return this;
-       }
-
-       @Override /* Serializer */
-       public XmlSerializer setSortMaps(boolean value) throws LockedException {
-               super.setSortMaps(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeansRequireDefaultConstructor(boolean value) 
throws LockedException {
-               super.setBeansRequireDefaultConstructor(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeansRequireSerializable(boolean value) throws 
LockedException {
-               super.setBeansRequireSerializable(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeansRequireSettersForGetters(boolean value) 
throws LockedException {
-               super.setBeansRequireSettersForGetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeansRequireSomeProperties(boolean value) 
throws LockedException {
-               super.setBeansRequireSomeProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeanMapPutReturnsOldValue(boolean value) throws 
LockedException {
-               super.setBeanMapPutReturnsOldValue(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeanConstructorVisibility(Visibility value) 
throws LockedException {
-               super.setBeanConstructorVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeanClassVisibility(Visibility value) throws 
LockedException {
-               super.setBeanClassVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeanFieldVisibility(Visibility value) throws 
LockedException {
-               super.setBeanFieldVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setMethodVisibility(Visibility value) throws 
LockedException {
-               super.setMethodVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setUseJavaBeanIntrospector(boolean value) throws 
LockedException {
-               super.setUseJavaBeanIntrospector(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setUseInterfaceProxies(boolean value) throws 
LockedException {
-               super.setUseInterfaceProxies(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setIgnoreUnknownBeanProperties(boolean value) 
throws LockedException {
-               super.setIgnoreUnknownBeanProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setIgnoreUnknownNullBeanProperties(boolean value) 
throws LockedException {
-               super.setIgnoreUnknownNullBeanProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setIgnorePropertiesWithoutSetters(boolean value) 
throws LockedException {
-               super.setIgnorePropertiesWithoutSetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setIgnoreInvocationExceptionsOnGetters(boolean 
value) throws LockedException {
-               super.setIgnoreInvocationExceptionsOnGetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setIgnoreInvocationExceptionsOnSetters(boolean 
value) throws LockedException {
-               super.setIgnoreInvocationExceptionsOnSetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setSortProperties(boolean value) throws 
LockedException {
-               super.setSortProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setNotBeanPackages(String...values) throws 
LockedException {
-               super.setNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setNotBeanPackages(Collection<String> values) 
throws LockedException {
-               super.setNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer addNotBeanPackages(String...values) throws 
LockedException {
-               super.addNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer addNotBeanPackages(Collection<String> values) 
throws LockedException {
-               super.addNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer removeNotBeanPackages(String...values) throws 
LockedException {
-               super.removeNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer removeNotBeanPackages(Collection<String> values) 
throws LockedException {
-               super.removeNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setNotBeanClasses(Class<?>...values) throws 
LockedException {
-               super.setNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setNotBeanClasses(Collection<Class<?>> values) 
throws LockedException {
-               super.setNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer addNotBeanClasses(Class<?>...values) throws 
LockedException {
-               super.addNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer addNotBeanClasses(Collection<Class<?>> values) 
throws LockedException {
-               super.addNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer removeNotBeanClasses(Class<?>...values) throws 
LockedException {
-               super.removeNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer removeNotBeanClasses(Collection<Class<?>> values) 
throws LockedException {
-               super.removeNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeanFilters(Class<?>...values) throws 
LockedException {
-               super.setBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeanFilters(Collection<Class<?>> values) throws 
LockedException {
-               super.setBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer addBeanFilters(Class<?>...values) throws 
LockedException {
-               super.addBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer addBeanFilters(Collection<Class<?>> values) throws 
LockedException {
-               super.addBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer removeBeanFilters(Class<?>...values) throws 
LockedException {
-               super.removeBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer removeBeanFilters(Collection<Class<?>> values) 
throws LockedException {
-               super.removeBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setPojoSwaps(Class<?>...values) throws 
LockedException {
-               super.setPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setPojoSwaps(Collection<Class<?>> values) throws 
LockedException {
-               super.setPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer addPojoSwaps(Class<?>...values) throws 
LockedException {
-               super.addPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer addPojoSwaps(Collection<Class<?>> values) throws 
LockedException {
-               super.addPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer removePojoSwaps(Class<?>...values) throws 
LockedException {
-               super.removePojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer removePojoSwaps(Collection<Class<?>> values) 
throws LockedException {
-               super.removePojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer 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 XmlSerializer setBeanDictionary(Class<?>...values) throws 
LockedException {
-               super.setBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeanDictionary(Collection<Class<?>> values) 
throws LockedException {
-               super.setBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer addToBeanDictionary(Class<?>...values) throws 
LockedException {
-               super.addToBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer addToBeanDictionary(Collection<Class<?>> values) 
throws LockedException {
-               super.addToBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer removeFromBeanDictionary(Class<?>...values) throws 
LockedException {
-               super.removeFromBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer removeFromBeanDictionary(Collection<Class<?>> 
values) throws LockedException {
-               super.removeFromBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setBeanTypePropertyName(String value) throws 
LockedException {
-               super.setBeanTypePropertyName(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setDefaultParser(Class<?> value) throws 
LockedException {
-               super.setDefaultParser(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setLocale(Locale value) throws LockedException {
-               super.setLocale(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setTimeZone(TimeZone value) throws LockedException 
{
-               super.setTimeZone(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setMediaType(MediaType value) throws 
LockedException {
-               super.setMediaType(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setDebug(boolean value) throws LockedException {
-               super.setDebug(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setProperty(String name, Object value) throws 
LockedException {
-               super.setProperty(name, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer setProperties(ObjectMap properties) throws 
LockedException {
-               super.setProperties(properties);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer addToProperty(String name, Object value) throws 
LockedException {
-               super.addToProperty(name, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer putToProperty(String name, Object key, Object 
value) throws LockedException {
-               super.putToProperty(name, key, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer putToProperty(String name, Object value) throws 
LockedException {
-               super.putToProperty(name, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public XmlSerializer removeFromProperty(String name, Object value) 
throws LockedException {
-               super.removeFromProperty(name, value);
-               return this;
-       }
-
-
-       
//--------------------------------------------------------------------------------
-       // Overridden methods
-       
//--------------------------------------------------------------------------------
-
-       @Override /* CoreApi */
-       public XmlSerializer setClassLoader(ClassLoader classLoader) throws 
LockedException {
-               super.setClassLoader(classLoader);
-               return this;
-       }
-
-       @Override /* Lockable */
-       public XmlSerializer lock() {
-               super.lock();
-               return this;
-       }
-
-       @Override /* Lockable */
-       public XmlSerializer clone() {
-               try {
-                       XmlSerializer c = (XmlSerializer)super.clone();
-                       return c;
-               } catch (CloneNotSupportedException e) {
-                       throw new RuntimeException(e); // Shouldn't happen.
-               }
+               return new XmlSerializerSession(ctx, op, output, javaMethod, 
locale, timeZone, mediaType);
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
new file mode 100644
index 0000000..d9f9a53
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
@@ -0,0 +1,717 @@
+// 
***************************************************************************************************************************
+// * 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.XmlSerializerContext.*;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.serializer.*;
+
+/**
+ * Builder class for building instances of XML serializers.
+ */
+public class XmlSerializerBuilder extends SerializerBuilder {
+
+       /**
+        * Constructor, default settings.
+        */
+       public XmlSerializerBuilder() {
+               super();
+       }
+
+       /**
+        * Constructor.
+        * @param propertyStore The initial configuration settings for this 
builder.
+        */
+       public XmlSerializerBuilder(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializer build() {
+               return new XmlSerializer(propertyStore);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Properties
+       
//--------------------------------------------------------------------------------
+
+       /**
+        * <b>Configuration property:</b>  Enable support for XML namespaces.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"XmlSerializer.enableNamespaces"</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 not enabled, XML output will not contain any namespaces 
regardless of any other settings.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>XML_enableNamespaces</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 XmlSerializerContext#XML_enableNamespaces
+        */
+       public XmlSerializerBuilder enableNamespaces(boolean value) {
+               return property(XML_enableNamespaces, value);
+       }
+
+       /**
+        * Shortcut for calling <code>setEnableNamespaces(<jk>true</jk>)</code>.
+        *
+        * @return This object (for method chaining).
+        */
+       public XmlSerializerBuilder ns() {
+               return enableNamespaces(true);
+       }
+
+       /**
+        * <b>Configuration property:</b>  Auto-detect namespace usage.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"XmlSerializer.autoDetectNamespaces"</js>
+        *      <li><b>Data type:</b> <code>Boolean</code>
+        *      <li><b>Default:</b> <jk>true</jk>
+        *      <li><b>Session-overridable:</b> <jk>true</jk>
+        * </ul>
+        * <p>
+        * Detect namespace usage before serialization.
+        * <p>
+        * Used in conjunction with {@link 
XmlSerializerContext#XML_addNamespaceUrisToRoot} to reduce
+        * the list of namespace URLs appended to the root element to only those
+        * that will be used in the resulting document.
+        * <p>
+        * If enabled, then the data structure will first be crawled looking for
+        * namespaces that will be encountered before the root element is
+        * serialized.
+        * <p>
+        * This setting is ignored if {@link 
XmlSerializerContext#XML_enableNamespaces} is not enabled.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>Auto-detection of namespaces can be costly performance-wise.
+        *              In high-performance environments, it's recommended that 
namespace detection be
+        *              disabled, and that namespaces be manually defined 
through the {@link XmlSerializerContext#XML_namespaces} property.
+        * </ul>
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>XML_autoDetectNamespaces</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 XmlSerializerContext#XML_autoDetectNamespaces
+        */
+       public XmlSerializerBuilder autoDetectNamespaces(boolean value) {
+               return property(XML_autoDetectNamespaces, value);
+       }
+
+       /**
+        * <b>Configuration property:</b>  Add namespace URLs to the root 
element.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"XmlSerializer.addNamespaceUrisToRoot"</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>
+        * Use this setting to add {@code xmlns:x} attributes to the root
+        * element for the default and all mapped namespaces.
+        * <p>
+        * This setting is ignored if {@link 
XmlSerializerContext#XML_enableNamespaces} is not enabled.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>XML_addNamespaceUrisToRoot</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 XmlSerializerContext#XML_addNamespaceUrisToRoot
+        */
+       public XmlSerializerBuilder addNamespaceUrisToRoot(boolean value) {
+               return property(XML_addNamespaceUrisToRoot, value);
+       }
+
+       /**
+        * <b>Configuration property:</b>  Default namespace.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"XmlSerializer.defaultNamespace"</js>
+        *      <li><b>Data type:</b> <code>String</code>
+        *      <li><b>Default:</b> 
<js>"{juneau:'http://www.apache.org/2013/Juneau'}"</js>
+        *      <li><b>Session-overridable:</b> <jk>true</jk>
+        * </ul>
+        * <p>
+        * Specifies the default namespace URI for this document.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>XML_defaultNamespace</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 XmlSerializerContext#XML_defaultNamespace
+        */
+       public XmlSerializerBuilder defaultNamespace(String value) {
+               return property(XML_defaultNamespace, value);
+       }
+
+       /**
+        * <b>Configuration property:</b>  XMLSchema namespace.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"XmlSerializer.xsNamespace"</js>
+        *      <li><b>Data type:</b> {@link Namespace}
+        *      <li><b>Default:</b> 
<code>{name:<js>'xs'</js>,uri:<js>'http://www.w3.org/2001/XMLSchema'</js>}</code>
+        *      <li><b>Session-overridable:</b> <jk>true</jk>
+        * </ul>
+        * <p>
+        * Specifies the namespace for the <code>XMLSchema</code> namespace, 
used by the schema generated
+        * by the {@link XmlSchemaSerializer} class.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>XML_xsNamespace</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 XmlSerializerContext#XML_xsNamespace
+        */
+       public XmlSerializerBuilder xsNamespace(Namespace value) {
+               return property(XML_xsNamespace, value);
+       }
+
+       /**
+        * <b>Configuration property:</b>  Default namespaces.
+        * <p>
+        * <ul>
+        *      <li><b>Name:</b> <js>"XmlSerializer.namespaces"</js>
+        *      <li><b>Data type:</b> <code>Set&lt;{@link Namespace}&gt;</code>
+        *      <li><b>Default:</b> empty set
+        *      <li><b>Session-overridable:</b> <jk>true</jk>
+        * </ul>
+        * <p>
+        * The default list of namespaces associated with this serializer.
+        * <p>
+        * <h5 class='section'>Notes:</h5>
+        * <ul>
+        *      <li>This is equivalent to calling 
<code>property(<jsf>XML_namespaces</jsf>, values)</code>.
+        *      <li>This introduces a slight performance penalty.
+        * </ul>
+        *
+        * @param values The new value for this property.
+        * @return This object (for method chaining).
+        * @see XmlSerializerContext#XML_namespaces
+        */
+       public XmlSerializerBuilder namespaces(Namespace...values) {
+               return property(XML_namespaces, values);
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder maxDepth(int value) {
+               super.maxDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder initialDepth(int value) {
+               super.initialDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder detectRecursions(boolean value) {
+               super.detectRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder ignoreRecursions(boolean value) {
+               super.ignoreRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder useWhitespace(boolean value) {
+               super.useWhitespace(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder ws() {
+               super.ws();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder addBeanTypeProperties(boolean value) {
+               super.addBeanTypeProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder quoteChar(char value) {
+               super.quoteChar(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder sq() {
+               super.sq();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder trimNullProperties(boolean value) {
+               super.trimNullProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder trimEmptyCollections(boolean value) {
+               super.trimEmptyCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder trimEmptyMaps(boolean value) {
+               super.trimEmptyMaps(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder trimStrings(boolean value) {
+               super.trimStrings(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder relativeUriBase(String value) {
+               super.relativeUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder absolutePathUriBase(String value) {
+               super.absolutePathUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder sortCollections(boolean value) {
+               super.sortCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public XmlSerializerBuilder sortMaps(boolean value) {
+               super.sortMaps(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beansRequireDefaultConstructor(boolean 
value) {
+               super.beansRequireDefaultConstructor(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beansRequireSerializable(boolean value) {
+               super.beansRequireSerializable(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beansRequireSettersForGetters(boolean 
value) {
+               super.beansRequireSettersForGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beansRequireSomeProperties(boolean value) {
+               super.beansRequireSomeProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
+               super.beanMapPutReturnsOldValue(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beanConstructorVisibility(Visibility value) 
{
+               super.beanConstructorVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beanClassVisibility(Visibility value) {
+               super.beanClassVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beanFieldVisibility(Visibility value) {
+               super.beanFieldVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder methodVisibility(Visibility value) {
+               super.methodVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder useJavaBeanIntrospector(boolean value) {
+               super.useJavaBeanIntrospector(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder useInterfaceProxies(boolean value) {
+               super.useInterfaceProxies(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
+               super.ignoreUnknownBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder ignoreUnknownNullBeanProperties(boolean 
value) {
+               super.ignoreUnknownNullBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder ignorePropertiesWithoutSetters(boolean 
value) {
+               super.ignorePropertiesWithoutSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean 
value) {
+               super.ignoreInvocationExceptionsOnGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean 
value) {
+               super.ignoreInvocationExceptionsOnSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder sortProperties(boolean value) {
+               super.sortProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder notBeanPackages(String...values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder notBeanPackages(Collection<String> values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder setNotBeanPackages(String...values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder setNotBeanPackages(Collection<String> 
values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder removeNotBeanPackages(String...values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder removeNotBeanPackages(Collection<String> 
values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder notBeanClasses(Class<?>...values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder notBeanClasses(Collection<Class<?>> values) 
{
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder setNotBeanClasses(Class<?>...values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder setNotBeanClasses(Collection<Class<?>> 
values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder removeNotBeanClasses(Class<?>...values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder removeNotBeanClasses(Collection<Class<?>> 
values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beanFilters(Class<?>...values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beanFilters(Collection<Class<?>> values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder setBeanFilters(Class<?>...values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder setBeanFilters(Collection<Class<?>> values) 
{
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder removeBeanFilters(Class<?>...values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder removeBeanFilters(Collection<Class<?>> 
values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder pojoSwaps(Class<?>...values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder pojoSwaps(Collection<Class<?>> values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder setPojoSwaps(Class<?>...values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder setPojoSwaps(Collection<Class<?>> values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder removePojoSwaps(Class<?>...values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder removePojoSwaps(Collection<Class<?>> 
values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder implClasses(Map<Class<?>,Class<?>> values) {
+               super.implClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public <T> XmlSerializerBuilder implClass(Class<T> interfaceClass, 
Class<? extends T> implClass) {
+               super.implClass(interfaceClass, implClass);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beanDictionary(Class<?>...values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beanDictionary(Collection<Class<?>> values) 
{
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder setBeanDictionary(Class<?>...values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder setBeanDictionary(Collection<Class<?>> 
values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder removeFromBeanDictionary(Class<?>...values) 
{
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder 
removeFromBeanDictionary(Collection<Class<?>> values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder beanTypePropertyName(String value) {
+               super.beanTypePropertyName(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder defaultParser(Class<?> value) {
+               super.defaultParser(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder locale(Locale value) {
+               super.locale(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder timeZone(TimeZone value) {
+               super.timeZone(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder mediaType(MediaType value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder debug(boolean value) {
+               super.debug(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder property(String name, Object value) {
+               super.property(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder properties(Map<String,Object> properties) {
+               super.properties(properties);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder addToProperty(String name, Object value) {
+               super.addToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder putToProperty(String name, Object key, 
Object value) {
+               super.putToProperty(name, key, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder putToProperty(String name, Object value) {
+               super.putToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder removeFromProperty(String name, Object 
value) {
+               super.removeFromProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder classLoader(ClassLoader classLoader) {
+               super.classLoader(classLoader);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public XmlSerializerBuilder 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/XmlSerializerContext.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java
index cac3b8a..a431fc6 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerContext.java
@@ -18,10 +18,10 @@ import org.apache.juneau.serializer.*;
 /**
  * Configurable properties on the {@link XmlSerializer} 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'>
@@ -174,19 +174,19 @@ public class XmlSerializerContext extends 
SerializerContext {
        /**
         * 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 XmlSerializerContext(ContextFactory cf) {
-               super(cf);
-               autoDetectNamespaces = cf.getProperty(XML_autoDetectNamespaces, 
boolean.class, true);
-               enableNamespaces = cf.getProperty(XML_enableNamespaces, 
boolean.class, false);
-               addNamespaceUrlsToRoot = 
cf.getProperty(XML_addNamespaceUrisToRoot, boolean.class, false);
-               defaultNamespace = cf.getProperty(XML_defaultNamespace, 
String.class, "{juneau:'http://www.apache.org/2013/Juneau'}");
-               xsNamespace = cf.getProperty(XML_xsNamespace, Namespace.class, 
new Namespace("xs", "http://www.w3.org/2001/XMLSchema";));
-               namespaces = cf.getProperty(XML_namespaces, Namespace[].class, 
new Namespace[0]);
-               addBeanTypeProperties = 
cf.getProperty(XML_addBeanTypeProperties, boolean.class, 
cf.getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true));
+       public XmlSerializerContext(PropertyStore ps) {
+               super(ps);
+               autoDetectNamespaces = ps.getProperty(XML_autoDetectNamespaces, 
boolean.class, true);
+               enableNamespaces = ps.getProperty(XML_enableNamespaces, 
boolean.class, false);
+               addNamespaceUrlsToRoot = 
ps.getProperty(XML_addNamespaceUrisToRoot, boolean.class, false);
+               defaultNamespace = ps.getProperty(XML_defaultNamespace, 
String.class, "{juneau:'http://www.apache.org/2013/Juneau'}");
+               xsNamespace = ps.getProperty(XML_xsNamespace, Namespace.class, 
new Namespace("xs", "http://www.w3.org/2001/XMLSchema";));
+               namespaces = ps.getProperty(XML_namespaces, Namespace[].class, 
new Namespace[0]);
+               addBeanTypeProperties = 
ps.getProperty(XML_addBeanTypeProperties, boolean.class, 
ps.getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, true));
        }
 
        @Override /* Context */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java 
b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
index 36c8a03..824b01e 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializerSession.java
@@ -53,7 +53,7 @@ public class XmlSerializerSession extends SerializerSession {
         * @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.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/xml/package.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/package.html 
b/juneau-core/src/main/java/org/apache/juneau/xml/package.html
index 5b91afe..4d9d595 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/package.html
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/package.html
@@ -237,10 +237,11 @@
        </p>
        <p class='bcode'>
        <jc>// Create a new serializer with readable output, no namespaces 
yet.</jc>
-       XmlSerializer s = <jk>new</jk> XmlSerializer()
-               .setUseIndentation(<jk>true</jk>)
-               .setQuoteChar(<js>'\''</js>)
-               .setEnableNamespaces(<jk>false</jk>);
+       XmlSerializer s = <jk>new</jk> XmlSerializerBuilder()
+               .ws()  <jc>// or .useWhitespace(true)</jc>  
+               .sq()  <jc>// or .quoteChar('\'')</jc>
+               .ns()  <jc>// or .enableNamespaces(false)</jc>
+               .build();
 
        <jc>// Create our bean.</jc>
        Person p = <jk>new</jk> Person(1, <js>"John Smith"</js>);
@@ -253,8 +254,10 @@
        </p>
        <p class='bcode'>
        <jc>// Create a new serializer with readable output, no namespaces yet, 
but use cloning method.</jc>
-       XmlSerializer s = XmlSerializer.<jsf>DEFAULT_SQ_READABLE</jsf>.clone()
-               .setEnableNamespaces(<jk>false</jk>);
+       XmlSerializer s = XmlSerializer.<jsf>DEFAULT_SQ_READABLE</jsf>
+               .builder()
+               .ns()
+               .build();
        </p>
        <p>
                The code above produces the following output:
@@ -1983,10 +1986,7 @@
                <p class='bcode'>
        <jc>// Create a new serializer with readable output, this time with 
namespaces enabled.</jc>
        <jc>// Note that this is identical to 
XmlSerializer.DEFAULT_NS_SQ_READABLE.</jc>
-       XmlSerializer s = <jk>new</jk> XmlSerializer()
-               .setEnableNamespaces(<jk>true</jk>)
-               .setUseIndentation(<jk>true</jk>)
-               .setQuoteChar(<js>'\''</js>);
+       XmlSerializer s = <jk>new</jk> 
XmlSerializerBuilder().ns().ws().sq().build();
 
        <jc>// Create our bean.</jc>
        Person p = <jk>new</jk> Person(1, <js>"John Smith"</js>);
@@ -2072,11 +2072,12 @@
                                all the elements do not need to be prefixed:
                <p class='bcode'>
        <jc>// Create a new serializer with readable output, this time with 
namespaces enabled.</jc>
-       XmlSerializer s = <jk>new</jk> XmlSerializer()
-               .setUseIndentation(<jk>true</jk>)
-               .setQuoteChar(<js>'\''</js>)
-               .setEnableNamespaces(<jk>true</jk>)
-               
.setDefaultNamespaceUri(<js>"http://www.apache.org/person/";</js>);
+       XmlSerializer s = <jk>new</jk> XmlSerializerBuilder()
+               .ws()
+               .sq()
+               .ns()
+               .defaultNamespaceUri(<js>"http://www.apache.org/person/";</js>)
+               .build();
                </p>
                <p>
                        This produces the following equivalent where the 
elements don't need prefixes since they're already in the default document 
namespace:
@@ -2106,11 +2107,12 @@
                        </p>
                        <p class='bcode'>
        <jc>// Create a new serializer with readable output, this time with 
namespaces enabled.</jc>
-       XmlSerializer s = <jk>new</jk> XmlSerializer()
-               .setUseIndentation(<jk>true</jk>)
-               .setQuoteChar(<js>'\''</js>)
-               .setAutoDetectNamespaces(<jk>false</jk>)
-               
.setNamespaces(<js>"{per:'http://www.apache.org/person/'}"</js>);
+       XmlSerializer s = <jk>new</jk> XmlSerializerBuilder()
+               .ws()
+               .sq()
+               .autoDetectNamespaces(<jk>false</jk>)
+               .namespaces(<js>"{per:'http://www.apache.org/person/'}"</js>)
+               .build();
                        </p>
                </div>
                
@@ -2240,9 +2242,7 @@
                </p>
                <p class='bcode'>
        <jc>// Create a new serializer with readable output.</jc>
-       XmlSerializer s = <jk>new</jk> XmlSerializer()
-               .setUseIndentation(<jk>true</jk>)
-               .setQuoteChar(<js>'\''</js>);
+       XmlSerializer s = <jk>new</jk> XmlSerializerBuilder().ws().sq().build();
 
        <jc>// Create our bean.</jc>
        Person p = <jk>new</jk> Person(1, <js>"John Smith"</js>, 
<js>"http://sample/addressBook/person/1";</js>, 
<js>"http://sample/addressBook";</js>, <js>"Aug 12, 1946"</js>);
@@ -2353,11 +2353,12 @@
                </p>
                <p class='bcode'>
        <jc>// Create a new serializer with readable output.</jc>
-       XmlSerializer s = <jk>new</jk> XmlSerializer()
-               .setUseIndentation(<jk>true</jk>)
-               .setEnableNamespaces(<jk>true</jk>)
-               .setAddNamespaceUrisToRoot(<jk>true</jk>)
-               .setQuoteChar(<js>'\''</js>);
+       XmlSerializer s = <jk>new</jk> XmlSerializerBuilder()
+               .ws()
+               .ns()
+               .sq()
+               .addNamespaceUrisToRoot(<jk>true</jk>)
+               .build();
 
        <jc>// Create the equivalent schema serializer.</jc>
        XmlSchemaSerializer ss = s.getSchemaSerializer();
@@ -2655,11 +2656,12 @@
                </p>
                <p class='bcode'>
        <jc>// Create a new serializer with readable output.</jc>
-       XmlSerializer s = <jk>new</jk> XmlSerializer()
-               .setUseIndentation(<jk>true</jk>)
-               .setQuoteChar(<js>'\''</js>)
-               .setEnableNamespaces(<jk>false</jk>)
-               .setDetectRecursions(<jk>true</jk>);
+       XmlSerializer s = <jk>new</jk> XmlSerializerBuilder()
+               .ws()
+               .sq()
+               .ns()
+               .detectRecursions(<jk>true</jk>)
+               .build();
 
        <jc>// Create a recursive loop.</jc>
        A a = <jk>new</jk> A();
@@ -2735,10 +2737,7 @@
        </p>
        <p class='bcode'>
        <jc>// Create a new serializer with readable output.</jc>
-       XmlSerializer s = <jk>new</jk> XmlSerializer()
-               .setEnableNamespaces(<jk>true</jk>)
-               .setUseIndentation(<jk>true</jk>)
-               .setQuoteChar(<js>'\''</js>);
+       XmlSerializer s = <jk>new</jk> 
XmlSerializerBuilder().ws().sq().ns().build();
 
        <jc>// Create our bean.</jc>
        Person p = <jk>new</jk> Person(1, <js>"John Smith"</js>, 
<js>"http://sample/addressBook/person/1";</js>, 
<js>"http://sample/addressBook";</js>, <js>"Aug 12, 1946"</js>);
@@ -3191,7 +3190,7 @@
                </p>
                <p class='bcode'>
        <jc>// Create a client to handle XML requests and responses.</jc>
-       RestClient client = <jk>new</jk> 
RestClient(XmlSerializer.<jk>class</jk>, XmlParser.<jk>class</jk>);
+       RestClient client = <jk>new</jk> 
RestClientBuilder(XmlSerializer.<jk>class</jk>, 
XmlParser.<jk>class</jk>).build();
                </p>
                <p>
                        The client handles all content negotiation based on the 
registered serializers and parsers.

Reply via email to