You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/12/23 16:50:47 UTC

[06/21] juneau git commit: JUNEAU-76 Improvements to Context/Builder APIs

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
index b744cf9..33b4ab0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
@@ -20,6 +20,7 @@ import java.util.*;
 
 import org.apache.juneau.*;
 import org.apache.juneau.http.*;
+import org.apache.juneau.internal.*;
 
 /**
  * Builder class for creating instances of {@link SerializerGroup}.
@@ -27,14 +28,14 @@ import org.apache.juneau.http.*;
 public class SerializerGroupBuilder {
 
 	private final List<Object> serializers;
-	private final PropertyStore propertyStore;
+	private final PropertyStoreBuilder propertyStore;
 
 	/**
 	 * Create an empty serializer group builder.
 	 */
 	public SerializerGroupBuilder() {
 		this.serializers = new ArrayList<>();
-		this.propertyStore = PropertyStore.create();
+		this.propertyStore = PropertyStore2.create();
 	}
 
 	/**
@@ -45,7 +46,7 @@ public class SerializerGroupBuilder {
 	 *
 	 * @param propertyStore The property store containing all settings common to all serializers in this group.
 	 */
-	public SerializerGroupBuilder(PropertyStore propertyStore) {
+	public SerializerGroupBuilder(PropertyStoreBuilder propertyStore) {
 		this.serializers = new ArrayList<>();
 		this.propertyStore = propertyStore;
 	}
@@ -58,7 +59,7 @@ public class SerializerGroupBuilder {
 	public SerializerGroupBuilder(SerializerGroup copyFrom) {
 		this.serializers = new ArrayList<>();
 		addReverse(serializers, copyFrom.getSerializers());
-		this.propertyStore = copyFrom.createPropertyStore();
+		this.propertyStore = copyFrom.getPropertyStore().builder();
 	}
 
 	/**
@@ -102,24 +103,24 @@ public class SerializerGroupBuilder {
 	 *
 	 * @return A new {@link SerializerGroup} object.
 	 */
+	@SuppressWarnings("unchecked")
 	public SerializerGroup build() {
 		List<Serializer> l = new ArrayList<>();
 		for (Object s : serializers) {
-			Class<?> c = null;
-			PropertyStore ps = propertyStore;
+			Class<? extends Serializer> c = null;
+			PropertyStore2 ps = propertyStore.build();
 			if (s instanceof Class) {
-				c = (Class<?>)s;
+				c = (Class<? extends Serializer>)s;
 			} else {
 				// Note that if we added a serializer instance, we want a new instance with this builder's properties
 				// on top of the previous serializer's properties.
 				Serializer s2 = (Serializer)s;
-				ps = s2.createPropertyStore().copyFrom(propertyStore);
+				ps = s2.getPropertyStore().builder().apply(ps).build();
 				c = s2.getClass();
 			}
-			l.add(propertyStore.getBeanContext().newInstance(Serializer.class, c, ps));
+			l.add(ContextCache.INSTANCE.create(c, ps));
 		}
-		Collections.reverse(l);
-		return new SerializerGroup(propertyStore, l.toArray(new Serializer[l.size()]));
+		return new SerializerGroup(propertyStore.build(), ArrayUtils.toReverseArray(Serializer.class, l));
 	}
 
 
@@ -133,10 +134,10 @@ public class SerializerGroupBuilder {
 	 * @param name The property name.
 	 * @param value The property value.
 	 * @return This object (for method chaining).
-	 * @see PropertyStore#setProperty(String, Object)
+	 * @see PropertyStoreBuilder#set(String, Object)
 	 */
-	public SerializerGroupBuilder property(String name, Object value) {
-		propertyStore.setProperty(name, value);
+	public SerializerGroupBuilder set(String name, Object value) {
+		propertyStore.set(name, value);
 		return this;
 	}
 
@@ -145,50 +146,49 @@ public class SerializerGroupBuilder {
 	 *
 	 * @param properties The properties to set on this class.
 	 * @return This object (for method chaining).
-	 * @see PropertyStore#setProperties(java.util.Map)
+	 * @see PropertyStoreBuilder#set(java.util.Map)
 	 */
-	public SerializerGroupBuilder properties(ObjectMap properties) {
-		propertyStore.setProperties(properties);
+	public SerializerGroupBuilder set(ObjectMap properties) {
+		propertyStore.set(properties);
 		return this;
 	}
 
 	/**
-	 * Adds a value to a SET property on all serializers in this group.
+	 * Appends a set of properties on all serializers in this group.
 	 *
-	 * @param name The property name.
-	 * @param value The new value to add to the SET property.
+	 * @param properties The properties to append on this class.
 	 * @return This object (for method chaining).
-	 * @throws ConfigException If property is not a SET property.
+	 * @see PropertyStoreBuilder#add(java.util.Map)
 	 */
-	public SerializerGroupBuilder addToProperty(String name, Object value) {
-		propertyStore.addToProperty(name, value);
+	public SerializerGroupBuilder add(ObjectMap properties) {
+		propertyStore.add(properties);
 		return this;
 	}
 
 	/**
-	 * Adds or overwrites a value to a MAP property on all serializers in this group.
+	 * Adds a value to a SET/LIST property on all serializers in this group.
 	 *
 	 * @param name The property name.
-	 * @param key The property value map key.
-	 * @param value The property value map value.
+	 * @param value The new value to add to the SET property.
 	 * @return This object (for method chaining).
-	 * @throws ConfigException If property is not a MAP property.
+	 * @throws ConfigException If property is not a SET property.
 	 */
-	public SerializerGroupBuilder putToProperty(String name, Object key, Object value) {
-		propertyStore.putToProperty(name, key, value);
+	public SerializerGroupBuilder addTo(String name, Object value) {
+		propertyStore.addTo(name, value);
 		return this;
 	}
 
 	/**
-	 * Adds or overwrites a value to a MAP property on all serializers in this group.
+	 * Adds or overwrites a value to a SET/LIST/MAP property on all serializers in this group.
 	 *
-	 * @param name The property value.
+	 * @param name The property name.
+	 * @param key The property value map key.
 	 * @param value The property value map value.
 	 * @return This object (for method chaining).
 	 * @throws ConfigException If property is not a MAP property.
 	 */
-	public SerializerGroupBuilder putToProperty(String name, Object value) {
-		propertyStore.putToProperty(name, value);
+	public SerializerGroupBuilder addTo(String name, String key, Object value) {
+		propertyStore.addTo(name, key, value);
 		return this;
 	}
 
@@ -200,8 +200,8 @@ public class SerializerGroupBuilder {
 	 * @return This object (for method chaining).
 	 * @throws ConfigException If property is not a SET property.
 	 */
-	public SerializerGroupBuilder removeFromProperty(String name, Object value) {
-		propertyStore.removeFromProperty(name, value);
+	public SerializerGroupBuilder removeFrom(String name, Object value) {
+		propertyStore.removeFrom(name, value);
 		return this;
 	}
 
@@ -213,7 +213,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_maxDepth
 	 */
 	public SerializerGroupBuilder maxDepth(int value) {
-		return property(SERIALIZER_maxDepth, value);
+		return set(SERIALIZER_maxDepth, value);
 	}
 
 	/**
@@ -224,7 +224,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_initialDepth
 	 */
 	public SerializerGroupBuilder initialDepth(int value) {
-		return property(SERIALIZER_initialDepth, value);
+		return set(SERIALIZER_initialDepth, value);
 	}
 
 	/**
@@ -235,7 +235,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_detectRecursions
 	 */
 	public SerializerGroupBuilder detectRecursions(boolean value) {
-		return property(SERIALIZER_detectRecursions, value);
+		return set(SERIALIZER_detectRecursions, value);
 	}
 
 	/**
@@ -246,7 +246,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_ignoreRecursions
 	 */
 	public SerializerGroupBuilder ignoreRecursions(boolean value) {
-		return property(SERIALIZER_ignoreRecursions, value);
+		return set(SERIALIZER_ignoreRecursions, value);
 	}
 
 	/**
@@ -257,7 +257,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_useWhitespace
 	 */
 	public SerializerGroupBuilder useWhitespace(boolean value) {
-		return property(SERIALIZER_useWhitespace, value);
+		return set(SERIALIZER_useWhitespace, value);
 	}
 
 	/**
@@ -277,7 +277,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_maxIndent
 	 */
 	public SerializerGroupBuilder maxIndent(boolean value) {
-		return property(SERIALIZER_maxIndent, value);
+		return set(SERIALIZER_maxIndent, value);
 	}
 
 	/**
@@ -288,7 +288,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_addBeanTypeProperties
 	 */
 	public SerializerGroupBuilder addBeanTypeProperties(boolean value) {
-		return property(SERIALIZER_addBeanTypeProperties, value);
+		return set(SERIALIZER_addBeanTypeProperties, value);
 	}
 
 	/**
@@ -299,7 +299,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_quoteChar
 	 */
 	public SerializerGroupBuilder quoteChar(char value) {
-		return property(SERIALIZER_quoteChar, value);
+		return set(SERIALIZER_quoteChar, value);
 	}
 
 	/**
@@ -319,7 +319,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_trimNullProperties
 	 */
 	public SerializerGroupBuilder trimNullProperties(boolean value) {
-		return property(SERIALIZER_trimNullProperties, value);
+		return set(SERIALIZER_trimNullProperties, value);
 	}
 
 	/**
@@ -330,7 +330,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_trimEmptyCollections
 	 */
 	public SerializerGroupBuilder trimEmptyCollections(boolean value) {
-		return property(SERIALIZER_trimEmptyCollections, value);
+		return set(SERIALIZER_trimEmptyCollections, value);
 	}
 
 	/**
@@ -341,7 +341,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_trimEmptyMaps
 	 */
 	public SerializerGroupBuilder trimEmptyMaps(boolean value) {
-		return property(SERIALIZER_trimEmptyMaps, value);
+		return set(SERIALIZER_trimEmptyMaps, value);
 	}
 
 	/**
@@ -352,7 +352,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_trimStrings
 	 */
 	public SerializerGroupBuilder trimStrings(boolean value) {
-		return property(SERIALIZER_trimStrings, value);
+		return set(SERIALIZER_trimStrings, value);
 	}
 
 	/**
@@ -363,7 +363,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_uriContext
 	 */
 	public SerializerGroupBuilder uriContext(UriContext value) {
-		return property(SERIALIZER_uriContext, value);
+		return set(SERIALIZER_uriContext, value);
 	}
 
 	/**
@@ -374,7 +374,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_uriResolution
 	 */
 	public SerializerGroupBuilder uriResolution(UriResolution value) {
-		return property(SERIALIZER_uriResolution, value);
+		return set(SERIALIZER_uriResolution, value);
 	}
 
 	/**
@@ -385,7 +385,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_uriRelativity
 	 */
 	public SerializerGroupBuilder uriRelativity(UriRelativity value) {
-		return property(SERIALIZER_uriRelativity, value);
+		return set(SERIALIZER_uriRelativity, value);
 	}
 
 	/**
@@ -396,7 +396,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_sortCollections
 	 */
 	public SerializerGroupBuilder sortCollections(boolean value) {
-		return property(SERIALIZER_sortCollections, value);
+		return set(SERIALIZER_sortCollections, value);
 	}
 
 	/**
@@ -407,7 +407,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_sortMaps
 	 */
 	public SerializerGroupBuilder sortMaps(boolean value) {
-		return property(SERIALIZER_sortMaps, value);
+		return set(SERIALIZER_sortMaps, value);
 	}
 
 	/**
@@ -418,7 +418,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_abridged
 	 */
 	public SerializerGroupBuilder abridged(boolean value) {
-		return property(SERIALIZER_abridged, value);
+		return set(SERIALIZER_abridged, value);
 	}
 
 	/**
@@ -429,7 +429,7 @@ public class SerializerGroupBuilder {
 	 * @see Serializer#SERIALIZER_listener
 	 */
 	public SerializerGroupBuilder listener(Class<? extends SerializerListener> value) {
-		return property(SERIALIZER_listener, value);
+		return set(SERIALIZER_listener, value);
 	}
 
 	/**
@@ -440,7 +440,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beansRequireDefaultConstructor
 	 */
 	public SerializerGroupBuilder beansRequireDefaultConstructor(boolean value) {
-		return property(BEAN_beansRequireDefaultConstructor, value);
+		return set(BEAN_beansRequireDefaultConstructor, value);
 	}
 
 	/**
@@ -451,7 +451,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beansRequireSerializable
 	 */
 	public SerializerGroupBuilder beansRequireSerializable(boolean value) {
-		return property(BEAN_beansRequireSerializable, value);
+		return set(BEAN_beansRequireSerializable, value);
 	}
 
 	/**
@@ -462,7 +462,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beansRequireSettersForGetters
 	 */
 	public SerializerGroupBuilder beansRequireSettersForGetters(boolean value) {
-		return property(BEAN_beansRequireSettersForGetters, value);
+		return set(BEAN_beansRequireSettersForGetters, value);
 	}
 
 	/**
@@ -473,7 +473,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beansRequireSomeProperties
 	 */
 	public SerializerGroupBuilder beansRequireSomeProperties(boolean value) {
-		return property(BEAN_beansRequireSomeProperties, value);
+		return set(BEAN_beansRequireSomeProperties, value);
 	}
 
 	/**
@@ -484,7 +484,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanMapPutReturnsOldValue
 	 */
 	public SerializerGroupBuilder beanMapPutReturnsOldValue(boolean value) {
-		return property(BEAN_beanMapPutReturnsOldValue, value);
+		return set(BEAN_beanMapPutReturnsOldValue, value);
 	}
 
 	/**
@@ -495,7 +495,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanConstructorVisibility
 	 */
 	public SerializerGroupBuilder beanConstructorVisibility(Visibility value) {
-		return property(BEAN_beanConstructorVisibility, value);
+		return set(BEAN_beanConstructorVisibility, value);
 	}
 
 	/**
@@ -506,7 +506,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanClassVisibility
 	 */
 	public SerializerGroupBuilder beanClassVisibility(Visibility value) {
-		return property(BEAN_beanClassVisibility, value);
+		return set(BEAN_beanClassVisibility, value);
 	}
 
 	/**
@@ -517,7 +517,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanFieldVisibility
 	 */
 	public SerializerGroupBuilder beanFieldVisibility(Visibility value) {
-		return property(BEAN_beanFieldVisibility, value);
+		return set(BEAN_beanFieldVisibility, value);
 	}
 
 	/**
@@ -528,7 +528,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_methodVisibility
 	 */
 	public SerializerGroupBuilder methodVisibility(Visibility value) {
-		return property(BEAN_methodVisibility, value);
+		return set(BEAN_methodVisibility, value);
 	}
 
 	/**
@@ -539,7 +539,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_useJavaBeanIntrospector
 	 */
 	public SerializerGroupBuilder useJavaBeanIntrospector(boolean value) {
-		return property(BEAN_useJavaBeanIntrospector, value);
+		return set(BEAN_useJavaBeanIntrospector, value);
 	}
 
 	/**
@@ -550,7 +550,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_useInterfaceProxies
 	 */
 	public SerializerGroupBuilder useInterfaceProxies(boolean value) {
-		return property(BEAN_useInterfaceProxies, value);
+		return set(BEAN_useInterfaceProxies, value);
 	}
 
 	/**
@@ -561,7 +561,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_ignoreUnknownBeanProperties
 	 */
 	public SerializerGroupBuilder ignoreUnknownBeanProperties(boolean value) {
-		return property(BEAN_ignoreUnknownBeanProperties, value);
+		return set(BEAN_ignoreUnknownBeanProperties, value);
 	}
 
 	/**
@@ -572,7 +572,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_ignoreUnknownNullBeanProperties
 	 */
 	public SerializerGroupBuilder ignoreUnknownNullBeanProperties(boolean value) {
-		return property(BEAN_ignoreUnknownNullBeanProperties, value);
+		return set(BEAN_ignoreUnknownNullBeanProperties, value);
 	}
 
 	/**
@@ -583,7 +583,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_ignorePropertiesWithoutSetters
 	 */
 	public SerializerGroupBuilder ignorePropertiesWithoutSetters(boolean value) {
-		return property(BEAN_ignorePropertiesWithoutSetters, value);
+		return set(BEAN_ignorePropertiesWithoutSetters, value);
 	}
 
 	/**
@@ -594,7 +594,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_ignoreInvocationExceptionsOnGetters
 	 */
 	public SerializerGroupBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
-		return property(BEAN_ignoreInvocationExceptionsOnGetters, value);
+		return set(BEAN_ignoreInvocationExceptionsOnGetters, value);
 	}
 
 	/**
@@ -605,7 +605,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_ignoreInvocationExceptionsOnSetters
 	 */
 	public SerializerGroupBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
-		return property(BEAN_ignoreInvocationExceptionsOnSetters, value);
+		return set(BEAN_ignoreInvocationExceptionsOnSetters, value);
 	}
 
 	/**
@@ -616,7 +616,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_sortProperties
 	 */
 	public SerializerGroupBuilder sortProperties(boolean value) {
-		return property(BEAN_sortProperties, value);
+		return set(BEAN_sortProperties, value);
 	}
 
 	/**
@@ -627,7 +627,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages_add
 	 */
 	public SerializerGroupBuilder notBeanPackages(String...values) {
-		return property(BEAN_notBeanPackages_add, values);
+		return set(BEAN_notBeanPackages_add, values);
 	}
 
 	/**
@@ -638,7 +638,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages_add
 	 */
 	public SerializerGroupBuilder notBeanPackages(Collection<String> value) {
-		return property(BEAN_notBeanPackages_add, value);
+		return set(BEAN_notBeanPackages_add, value);
 	}
 
 	/**
@@ -649,7 +649,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages
 	 */
 	public SerializerGroupBuilder setNotBeanPackages(String...values) {
-		return property(BEAN_notBeanPackages, values);
+		return set(BEAN_notBeanPackages, values);
 	}
 
 	/**
@@ -660,7 +660,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages
 	 */
 	public SerializerGroupBuilder setNotBeanPackages(Collection<String> values) {
-		return property(BEAN_notBeanPackages, values);
+		return set(BEAN_notBeanPackages, values);
 	}
 
 	/**
@@ -671,7 +671,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages_remove
 	 */
 	public SerializerGroupBuilder removeNotBeanPackages(String...values) {
-		return property(BEAN_notBeanPackages_remove, values);
+		return set(BEAN_notBeanPackages_remove, values);
 	}
 
 	/**
@@ -682,7 +682,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages_remove
 	 */
 	public SerializerGroupBuilder removeNotBeanPackages(Collection<String> values) {
-		return property(BEAN_notBeanPackages_remove, values);
+		return set(BEAN_notBeanPackages_remove, values);
 	}
 
 	/**
@@ -693,7 +693,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanClasses_add
 	 */
 	public SerializerGroupBuilder notBeanClasses(Class<?>...values) {
-		return property(BEAN_notBeanClasses_add, values);
+		return set(BEAN_notBeanClasses_add, values);
 	}
 
 	/**
@@ -704,7 +704,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanPackages_add
 	 */
 	public SerializerGroupBuilder notBeanClasses(Collection<Class<?>> values) {
-		return property(BEAN_notBeanClasses_add, values);
+		return set(BEAN_notBeanClasses_add, values);
 	}
 
 	/**
@@ -715,7 +715,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanClasses
 	 */
 	public SerializerGroupBuilder setNotBeanClasses(Class<?>...values) {
-		return property(BEAN_notBeanClasses, values);
+		return set(BEAN_notBeanClasses, values);
 	}
 
 	/**
@@ -726,7 +726,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanClasses
 	 */
 	public SerializerGroupBuilder setNotBeanClasses(Collection<Class<?>> values) {
-		return property(BEAN_notBeanClasses, values);
+		return set(BEAN_notBeanClasses, values);
 	}
 
 	/**
@@ -737,7 +737,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanClasses_remove
 	 */
 	public SerializerGroupBuilder removeNotBeanClasses(Class<?>...values) {
-		return property(BEAN_notBeanClasses_remove, values);
+		return set(BEAN_notBeanClasses_remove, values);
 	}
 
 	/**
@@ -748,7 +748,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_notBeanClasses_remove
 	 */
 	public SerializerGroupBuilder removeNotBeanClasses(Collection<Class<?>> values) {
-		return property(BEAN_notBeanClasses_remove, values);
+		return set(BEAN_notBeanClasses_remove, values);
 	}
 
 	/**
@@ -759,7 +759,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters_add
 	 */
 	public SerializerGroupBuilder beanFilters(Class<?>...values) {
-		return property(BEAN_beanFilters_add, values);
+		return set(BEAN_beanFilters_add, values);
 	}
 
 	/**
@@ -770,7 +770,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters_add
 	 */
 	public SerializerGroupBuilder beanFilters(Collection<Class<?>> values) {
-		return property(BEAN_beanFilters_add, values);
+		return set(BEAN_beanFilters_add, values);
 	}
 
 	/**
@@ -781,7 +781,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters
 	 */
 	public SerializerGroupBuilder setBeanFilters(Class<?>...values) {
-		return property(BEAN_beanFilters, values);
+		return set(BEAN_beanFilters, values);
 	}
 
 	/**
@@ -792,7 +792,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters
 	 */
 	public SerializerGroupBuilder setBeanFilters(Collection<Class<?>> values) {
-		return property(BEAN_beanFilters, values);
+		return set(BEAN_beanFilters, values);
 	}
 
 	/**
@@ -803,7 +803,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters_remove
 	 */
 	public SerializerGroupBuilder removeBeanFilters(Class<?>...values) {
-		return property(BEAN_beanFilters_remove, values);
+		return set(BEAN_beanFilters_remove, values);
 	}
 
 	/**
@@ -814,7 +814,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanFilters_remove
 	 */
 	public SerializerGroupBuilder removeBeanFilters(Collection<Class<?>> values) {
-		return property(BEAN_beanFilters_remove, values);
+		return set(BEAN_beanFilters_remove, values);
 	}
 
 	/**
@@ -825,7 +825,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps_add
 	 */
 	public SerializerGroupBuilder pojoSwaps(Class<?>...values) {
-		return property(BEAN_pojoSwaps_add, values);
+		return set(BEAN_pojoSwaps_add, values);
 	}
 
 	/**
@@ -836,7 +836,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps_add
 	 */
 	public SerializerGroupBuilder pojoSwaps(Collection<Class<?>> values) {
-		return property(BEAN_pojoSwaps_add, values);
+		return set(BEAN_pojoSwaps_add, values);
 	}
 
 	/**
@@ -847,7 +847,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps
 	 */
 	public SerializerGroupBuilder setPojoSwaps(Class<?>...values) {
-		return property(BEAN_pojoSwaps, values);
+		return set(BEAN_pojoSwaps, values);
 	}
 
 	/**
@@ -858,7 +858,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps
 	 */
 	public SerializerGroupBuilder setPojoSwaps(Collection<Class<?>> values) {
-		return property(BEAN_pojoSwaps, values);
+		return set(BEAN_pojoSwaps, values);
 	}
 
 	/**
@@ -869,7 +869,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps_remove
 	 */
 	public SerializerGroupBuilder removePojoSwaps(Class<?>...values) {
-		return property(BEAN_pojoSwaps_remove, values);
+		return set(BEAN_pojoSwaps_remove, values);
 	}
 
 	/**
@@ -880,7 +880,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_pojoSwaps_remove
 	 */
 	public SerializerGroupBuilder removePojoSwaps(Collection<Class<?>> values) {
-		return property(BEAN_pojoSwaps_remove, values);
+		return set(BEAN_pojoSwaps_remove, values);
 	}
 
 	/**
@@ -890,22 +890,21 @@ public class SerializerGroupBuilder {
 	 * @return This object (for method chaining).
 	 * @see BeanContext#BEAN_implClasses
 	 */
-	public SerializerGroupBuilder implClasses(Map<Class<?>,Class<?>> values) {
-		return property(BEAN_implClasses, values);
+	public SerializerGroupBuilder implClasses(Map<String,Class<?>> values) {
+		return set(BEAN_implClasses, values);
 	}
 
 	/**
-	 * Sets the {@link BeanContext#BEAN_implClasses_put} property on all serializers in this group.
+	 * Sets the {@link BeanContext#BEAN_implClasses} property on all serializers in this group.
 	 *
 	 * @param interfaceClass The interface class.
 	 * @param implClass The implementation class.
 	 * @param <T> The class type of the interface.
 	 * @return This object (for method chaining).
 	 * @see BeanContext#BEAN_implClasses
-	 * @see BeanContext#BEAN_implClasses_put
 	 */
 	public <T> SerializerGroupBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
-		return putToProperty(BEAN_implClasses, interfaceClass, implClass);
+		return addTo(BEAN_implClasses, interfaceClass.getName(), implClass);
 	}
 
 	/**
@@ -916,33 +915,31 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_includeProperties
 	 */
 	public SerializerGroupBuilder includeProperties(Map<String,String> values) {
-		return property(BEAN_includeProperties, values);
+		return set(BEAN_includeProperties, values);
 	}
 
 	/**
-	 * Sets the {@link BeanContext#BEAN_includeProperties_put} property on all serializers in this group.
+	 * Sets the {@link BeanContext#BEAN_includeProperties} property on all serializers in this group.
 	 *
 	 * @param beanClassName The bean class name.  Can be a simple name, fully-qualified name, or <js>"*"</js>.
 	 * @param properties Comma-delimited list of property names.
 	 * @return This object (for method chaining).
 	 * @see BeanContext#BEAN_includeProperties
-	 * @see BeanContext#BEAN_includeProperties_put
 	 */
 	public SerializerGroupBuilder includeProperties(String beanClassName, String properties) {
-		return putToProperty(BEAN_includeProperties, beanClassName, properties);
+		return addTo(BEAN_includeProperties, beanClassName, properties);
 	}
 
 	/**
-	 * Sets the {@link BeanContext#BEAN_includeProperties_put} property on all serializers in this group.
+	 * Sets the {@link BeanContext#BEAN_includeProperties} property on all serializers in this group.
 	 *
 	 * @param beanClass The bean class.
 	 * @param properties Comma-delimited list of property names.
 	 * @return This object (for method chaining).
 	 * @see BeanContext#BEAN_includeProperties
-	 * @see BeanContext#BEAN_includeProperties_put
 	 */
 	public SerializerGroupBuilder includeProperties(Class<?> beanClass, String properties) {
-		return putToProperty(BEAN_includeProperties, beanClass.getName(), properties);
+		return addTo(BEAN_includeProperties, beanClass.getName(), properties);
 	}
 
 	/**
@@ -953,33 +950,31 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_excludeProperties
 	 */
 	public SerializerGroupBuilder excludeProperties(Map<String,String> values) {
-		return property(BEAN_excludeProperties, values);
+		return set(BEAN_excludeProperties, values);
 	}
 
 	/**
-	 * Sets the {@link BeanContext#BEAN_excludeProperties_put} property on all serializers in this group.
+	 * Sets the {@link BeanContext#BEAN_excludeProperties} property on all serializers in this group.
 	 *
 	 * @param beanClassName The bean class name.  Can be a simple name, fully-qualified name, or <js>"*"</js>.
 	 * @param properties Comma-delimited list of property names.
 	 * @return This object (for method chaining).
 	 * @see BeanContext#BEAN_excludeProperties
-	 * @see BeanContext#BEAN_excludeProperties_put
 	 */
 	public SerializerGroupBuilder excludeProperties(String beanClassName, String properties) {
-		return putToProperty(BEAN_excludeProperties, beanClassName, properties);
+		return addTo(BEAN_excludeProperties, beanClassName, properties);
 	}
 
 	/**
-	 * Sets the {@link BeanContext#BEAN_excludeProperties_put} property on all serializers in this group.
+	 * Sets the {@link BeanContext#BEAN_excludeProperties} property on all serializers in this group.
 	 *
 	 * @param beanClass The bean class.
 	 * @param properties Comma-delimited list of property names.
 	 * @return This object (for method chaining).
 	 * @see BeanContext#BEAN_excludeProperties
-	 * @see BeanContext#BEAN_excludeProperties_put
 	 */
 	public SerializerGroupBuilder excludeProperties(Class<?> beanClass, String properties) {
-		return putToProperty(BEAN_excludeProperties, beanClass.getName(), properties);
+		return addTo(BEAN_excludeProperties, beanClass.getName(), properties);
 	}
 
 	/**
@@ -990,7 +985,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary_add
 	 */
 	public SerializerGroupBuilder beanDictionary(Class<?>...values) {
-		return property(BEAN_beanDictionary_add, values);
+		return set(BEAN_beanDictionary_add, values);
 	}
 
 	/**
@@ -1001,7 +996,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary_add
 	 */
 	public SerializerGroupBuilder beanDictionary(Collection<Class<?>> values) {
-		return property(BEAN_beanDictionary_add, values);
+		return set(BEAN_beanDictionary_add, values);
 	}
 
 	/**
@@ -1012,7 +1007,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary
 	 */
 	public SerializerGroupBuilder setBeanDictionary(Class<?>...values) {
-		return property(BEAN_beanDictionary, values);
+		return set(BEAN_beanDictionary, values);
 	}
 
 	/**
@@ -1023,7 +1018,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary
 	 */
 	public SerializerGroupBuilder setBeanDictionary(Collection<Class<?>> values) {
-		return property(BEAN_beanDictionary, values);
+		return set(BEAN_beanDictionary, values);
 	}
 
 	/**
@@ -1034,7 +1029,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary_remove
 	 */
 	public SerializerGroupBuilder removeFromBeanDictionary(Class<?>...values) {
-		return property(BEAN_beanDictionary_remove, values);
+		return set(BEAN_beanDictionary_remove, values);
 	}
 
 	/**
@@ -1045,7 +1040,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanDictionary_remove
 	 */
 	public SerializerGroupBuilder removeFromBeanDictionary(Collection<Class<?>> values) {
-		return property(BEAN_beanDictionary_remove, values);
+		return set(BEAN_beanDictionary_remove, values);
 	}
 
 	/**
@@ -1056,7 +1051,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_beanTypePropertyName
 	 */
 	public SerializerGroupBuilder beanTypePropertyName(String value) {
-		return property(BEAN_beanTypePropertyName, value);
+		return set(BEAN_beanTypePropertyName, value);
 	}
 
 	/**
@@ -1067,7 +1062,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_defaultParser
 	 */
 	public SerializerGroupBuilder defaultParser(Class<?> value) {
-		return property(BEAN_defaultParser, value);
+		return set(BEAN_defaultParser, value);
 	}
 
 	/**
@@ -1078,7 +1073,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_locale
 	 */
 	public SerializerGroupBuilder locale(Locale value) {
-		return property(BEAN_locale, value);
+		return set(BEAN_locale, value);
 	}
 
 	/**
@@ -1089,7 +1084,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_timeZone
 	 */
 	public SerializerGroupBuilder timeZone(TimeZone value) {
-		return property(BEAN_timeZone, value);
+		return set(BEAN_timeZone, value);
 	}
 
 	/**
@@ -1100,7 +1095,7 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_mediaType
 	 */
 	public SerializerGroupBuilder mediaType(MediaType value) {
-		return property(BEAN_mediaType, value);
+		return set(BEAN_mediaType, value);
 	}
 
 	/**
@@ -1110,25 +1105,6 @@ public class SerializerGroupBuilder {
 	 * @see BeanContext#BEAN_debug
 	 */
 	public SerializerGroupBuilder debug() {
-		return property(BEAN_debug, true);
-	}
-
-	/**
-	 * Specifies the classloader to use when resolving classes from strings for all serializers in this group.
-	 *
-	 * <p>
-	 * Can be used for resolving class names when the classes being created are in a different classloader from the
-	 * Juneau code.
-	 *
-	 * <p>
-	 * If <jk>null</jk>, the system classloader will be used to resolve classes.
-	 *
-	 * @param classLoader The new classloader.
-	 * @return This object (for method chaining).
-	 * @see PropertyStore#setClassLoader(ClassLoader)
-	 */
-	public SerializerGroupBuilder classLoader(ClassLoader classLoader) {
-		propertyStore.setClassLoader(classLoader);
-		return this;
+		return set(BEAN_debug, true);
 	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
index 6495128..f8d740a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSession.java
@@ -92,33 +92,31 @@ public abstract class SerializerSession extends BeanSession {
 	 * 	It also include session-level properties that override the properties defined on the bean and
 	 * 	serializer contexts.
 	 */
-	protected SerializerSession(SerializerContext ctx, SerializerSessionArgs args) {
-		super(ctx != null ? ctx : SerializerContext.DEFAULT, args);
-		if (ctx == null)
-			ctx = SerializerContext.DEFAULT;
+	protected SerializerSession(Serializer ctx, SerializerSessionArgs args) {
+		super(ctx, args);
 		this.javaMethod = args.javaMethod;
 		UriResolution uriResolution;
 		UriRelativity uriRelativity;
 		Class<?> listenerClass;
-		ObjectMap p = getProperties();
-		maxDepth = p.getInt(SERIALIZER_maxDepth, ctx.maxDepth);
-		initialDepth = p.getInt(SERIALIZER_initialDepth, ctx.initialDepth);
-		detectRecursions = p.getBoolean(SERIALIZER_detectRecursions, ctx.detectRecursions);
-		ignoreRecursions = p.getBoolean(SERIALIZER_ignoreRecursions, ctx.ignoreRecursions);
-		useWhitespace = p.getBoolean(SERIALIZER_useWhitespace, ctx.useWhitespace);
-		maxIndent = p.getInt(SERIALIZER_maxIndent, ctx.maxIndent);
-		addBeanTypeProperties = p.getBoolean(SERIALIZER_addBeanTypeProperties, ctx.addBeanTypeProperties);
-		trimNulls = p.getBoolean(SERIALIZER_trimNullProperties, ctx.trimNulls);
-		trimEmptyCollections = p.getBoolean(SERIALIZER_trimEmptyCollections, ctx.trimEmptyCollections);
-		trimEmptyMaps = p.getBoolean(SERIALIZER_trimEmptyMaps, ctx.trimEmptyMaps);
-		trimStrings = p.getBoolean(SERIALIZER_trimStrings, ctx.trimStrings);
-		quoteChar = p.getString(SERIALIZER_quoteChar, ""+ctx.quoteChar).charAt(0);
-		sortCollections = p.getBoolean(SERIALIZER_sortCollections, ctx.sortMaps);
-		sortMaps = p.getBoolean(SERIALIZER_sortMaps, ctx.sortMaps);
-		abridged = p.getBoolean(SERIALIZER_abridged, ctx.abridged);
-		uriResolution = p.getWithDefault(SERIALIZER_uriResolution, ctx.uriResolution, UriResolution.class);
-		uriRelativity = p.getWithDefault(SERIALIZER_uriRelativity, ctx.uriRelativity, UriRelativity.class);
-		listenerClass = p.getWithDefault(SERIALIZER_listener, ctx.listener, Class.class);
+		
+		maxDepth = getProperty(SERIALIZER_maxDepth, int.class, ctx.maxDepth);
+		initialDepth = getProperty(SERIALIZER_initialDepth, int.class, ctx.initialDepth);
+		detectRecursions = getProperty(SERIALIZER_detectRecursions, boolean.class, ctx.detectRecursions);
+		ignoreRecursions = getProperty(SERIALIZER_ignoreRecursions, boolean.class, ctx.ignoreRecursions);
+		useWhitespace = getProperty(SERIALIZER_useWhitespace, boolean.class, ctx.useWhitespace);
+		maxIndent = getProperty(SERIALIZER_maxIndent, int.class, ctx.maxIndent);
+		addBeanTypeProperties = getProperty(SERIALIZER_addBeanTypeProperties, boolean.class, ctx.addBeanTypeProperties);
+		trimNulls = getProperty(SERIALIZER_trimNullProperties, boolean.class, ctx.trimNulls);
+		trimEmptyCollections = getProperty(SERIALIZER_trimEmptyCollections, boolean.class, ctx.trimEmptyCollections);
+		trimEmptyMaps = getProperty(SERIALIZER_trimEmptyMaps, boolean.class, ctx.trimEmptyMaps);
+		trimStrings = getProperty(SERIALIZER_trimStrings, boolean.class, ctx.trimStrings);
+		quoteChar = getProperty(SERIALIZER_quoteChar, String.class, ""+ctx.quoteChar).charAt(0);
+		sortCollections = getProperty(SERIALIZER_sortCollections, boolean.class, ctx.sortMaps);
+		sortMaps = getProperty(SERIALIZER_sortMaps, boolean.class, ctx.sortMaps);
+		abridged = getProperty(SERIALIZER_abridged, boolean.class, ctx.abridged);
+		uriResolution = getInstanceProperty(SERIALIZER_uriResolution, UriResolution.class, ctx.uriResolution);
+		uriRelativity = getInstanceProperty(SERIALIZER_uriRelativity, UriRelativity.class, ctx.uriRelativity);
+		listenerClass = getProperty(SERIALIZER_listener, Class.class, ctx.listener);
 
 		uriResolver = new UriResolver(uriResolution, uriRelativity, args.uriContext == null ? ctx.uriContext : args.uriContext);
 
@@ -132,6 +130,19 @@ public abstract class SerializerSession extends BeanSession {
 		}
 	}
 
+	/**
+	 * Default constructor.
+	 * 
+	 * @param args
+	 * 	Runtime arguments.
+	 * 	These specify session-level information such as locale and URI context.
+	 * 	It also include session-level properties that override the properties defined on the bean and
+	 * 	serializer contexts.
+	 */
+	protected SerializerSession(SerializerSessionArgs args) {
+		this(Serializer.DEFAULT, args);
+	}
+	
 	@Override /* Session */
 	public ObjectMap asMap() {
 		return super.asMap()

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
index 3449dff..d96a9cc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializer.java
@@ -23,7 +23,7 @@ public abstract class WriterSerializer extends Serializer {
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore
+	 * @param ps
 	 * 	The property store containing all the settings for this object.
 	 * @param produces
 	 * 	The media type that this serializer produces.
@@ -41,8 +41,8 @@ public abstract class WriterSerializer extends Serializer {
 	 * 	<br>...or...
 	 * 	<br><code><jk>super</jk>(propertyStore, <js>"application/json"</js>, <js>"*&#8203;/json"</js>);</code>
 	 */
-	protected WriterSerializer(PropertyStore propertyStore, String produces, String...accept) {
-		super(propertyStore, produces, accept);
+	protected WriterSerializer(PropertyStore2 ps, String produces, String...accept) {
+		super(ps, produces, accept);
 	}
 
 

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
index accf31c..a9cab63 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerSession.java
@@ -44,7 +44,7 @@ public abstract class WriterSerializerSession extends SerializerSession {
 	 * 	It also include session-level properties that override the properties defined on the bean and
 	 * 	serializer contexts.
 	 */
-	protected WriterSerializerSession(SerializerContext ctx, SerializerSessionArgs args) {
+	protected WriterSerializerSession(Serializer ctx, SerializerSessionArgs args) {
 		super(ctx, args);
 	}
 
@@ -55,7 +55,7 @@ public abstract class WriterSerializerSession extends SerializerSession {
 	 * 	Runtime session arguments.
 	 */
 	protected WriterSerializerSession(SerializerSessionArgs args) {
-		this(null, args);
+		super(args);
 	}
 
 	@Override /* SerializerSession */

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
index 6ccd335..a38ca6a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java
@@ -42,32 +42,32 @@ public final class SoapXmlSerializer extends XmlSerializer {
 	 * <b>Configuration property:</b>  The <code>SOAPAction</code> HTTP header value to set on responses.
 	 *
 	 * <ul>
-	 * 	<li><b>Name:</b> <js>"SoapXmlSerializer.SOAPAction"</js>
+	 * 	<li><b>Name:</b> <js>"SoapXmlSerializer.SOAPAction.s"</js>
 	 * 	<li><b>Data type:</b> <code>String</code>
 	 * 	<li><b>Default:</b> <js>"http://www.w3.org/2003/05/soap-envelope"</js>
 	 * </ul>
 	 */
-	public static final String SOAPXML_SOAPAction = PREFIX + "SOAPAction";
+	public static final String SOAPXML_SOAPAction = PREFIX + "SOAPAction.s";
 
 
 	//-------------------------------------------------------------------------------------------------------------------
 	// Instance
 	//-------------------------------------------------------------------------------------------------------------------
 
-	private final SoapXmlSerializerContext ctx;
-
+	final String soapAction;
+	
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore The property store containing all the settings for this object.
+	 * @param ps The property store containing all the settings for this object.
 	 */
-	public SoapXmlSerializer(PropertyStore propertyStore) {
-		super(propertyStore, "text/xml", "text/xml+soap");
-		this.ctx = createContext(SoapXmlSerializerContext.class);
+	public SoapXmlSerializer(PropertyStore2 ps) {
+		super(ps, "text/xml", "text/xml+soap");
+		soapAction = getProperty(SOAPXML_SOAPAction, String.class, "http://www.w3.org/2003/05/soap-envelope");
 	}
 
 	@Override /* Serializer */
 	public WriterSerializerSession createSession(SerializerSessionArgs args) {
-		return new SoapXmlSerializerSession(ctx, args);
+		return new SoapXmlSerializerSession(this, args);
 	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
index 9ce0574..a1b7ebc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
@@ -36,15 +36,15 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore The initial configuration settings for this builder.
+	 * @param ps The initial configuration settings for this builder.
 	 */
-	public SoapXmlSerializerBuilder(PropertyStore propertyStore) {
-		super(propertyStore);
+	public SoapXmlSerializerBuilder(PropertyStore2 ps) {
+		super(ps);
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializer build() {
-		return new SoapXmlSerializer(propertyStore);
+		return build(SoapXmlSerializer.class);
 	}
 
 
@@ -55,12 +55,6 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 	/**
 	 * <b>Configuration property:</b>  The <code>SOAPAction</code> HTTP header value to set on responses.
 	 *
-	 * <ul>
-	 * 	<li><b>Name:</b> <js>"SoapXmlSerializer.SOAPAction"</js>
-	 * 	<li><b>Data type:</b> <code>String</code>
-	 * 	<li><b>Default:</b> <js>"http://www.w3.org/2003/05/soap-envelope"</js>
-	 * </ul>
-	 *
 	 * <h5 class='section'>Notes:</h5>
 	 * <ul>
 	 * 	<li>This is equivalent to calling <code>property(<jsf>SOAPXML_SOAPAction</jsf>, value)</code>.
@@ -72,7 +66,7 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 	 * @see SoapXmlSerializer#SOAPXML_SOAPAction
 	 */
 	public SoapXmlSerializerBuilder uriAnchorText(String value) {
-		return property(SOAPXML_SOAPAction, value);
+		return set(SOAPXML_SOAPAction, value);
 	}
 
 	@Override /* XmlSerializerBuilder */
@@ -231,416 +225,410 @@ public class SoapXmlSerializerBuilder extends XmlSerializerBuilder {
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beansRequireDefaultConstructor(boolean value) {
 		super.beansRequireDefaultConstructor(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beansRequireSerializable(boolean value) {
 		super.beansRequireSerializable(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beansRequireSettersForGetters(boolean value) {
 		super.beansRequireSettersForGetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beansRequireSomeProperties(boolean value) {
 		super.beansRequireSomeProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
 		super.beanMapPutReturnsOldValue(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beanConstructorVisibility(Visibility value) {
 		super.beanConstructorVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beanClassVisibility(Visibility value) {
 		super.beanClassVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beanFieldVisibility(Visibility value) {
 		super.beanFieldVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder methodVisibility(Visibility value) {
 		super.methodVisibility(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder useJavaBeanIntrospector(boolean value) {
 		super.useJavaBeanIntrospector(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder useInterfaceProxies(boolean value) {
 		super.useInterfaceProxies(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
 		super.ignoreUnknownBeanProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) {
 		super.ignoreUnknownNullBeanProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder ignorePropertiesWithoutSetters(boolean value) {
 		super.ignorePropertiesWithoutSetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) {
 		super.ignoreInvocationExceptionsOnGetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) {
 		super.ignoreInvocationExceptionsOnSetters(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder sortProperties(boolean value) {
 		super.sortProperties(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder notBeanPackages(String...values) {
 		super.notBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder notBeanPackages(Collection<String> values) {
 		super.notBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder setNotBeanPackages(String...values) {
 		super.setNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder setNotBeanPackages(Collection<String> values) {
 		super.setNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder removeNotBeanPackages(String...values) {
 		super.removeNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder removeNotBeanPackages(Collection<String> values) {
 		super.removeNotBeanPackages(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder notBeanClasses(Class<?>...values) {
 		super.notBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder notBeanClasses(Collection<Class<?>> values) {
 		super.notBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder setNotBeanClasses(Class<?>...values) {
 		super.setNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder setNotBeanClasses(Collection<Class<?>> values) {
 		super.setNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder removeNotBeanClasses(Class<?>...values) {
 		super.removeNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder removeNotBeanClasses(Collection<Class<?>> values) {
 		super.removeNotBeanClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beanFilters(Class<?>...values) {
 		super.beanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beanFilters(Collection<Class<?>> values) {
 		super.beanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder setBeanFilters(Class<?>...values) {
 		super.setBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder setBeanFilters(Collection<Class<?>> values) {
 		super.setBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder removeBeanFilters(Class<?>...values) {
 		super.removeBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder removeBeanFilters(Collection<Class<?>> values) {
 		super.removeBeanFilters(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder pojoSwaps(Class<?>...values) {
 		super.pojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder pojoSwaps(Collection<Class<?>> values) {
 		super.pojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder setPojoSwaps(Class<?>...values) {
 		super.setPojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder setPojoSwaps(Collection<Class<?>> values) {
 		super.setPojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder removePojoSwaps(Class<?>...values) {
 		super.removePojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder removePojoSwaps(Collection<Class<?>> values) {
 		super.removePojoSwaps(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public SoapXmlSerializerBuilder implClasses(Map<Class<?>,Class<?>> values) {
+	@Override /* ContextBuilder */
+	public SoapXmlSerializerBuilder implClasses(Map<String,Class<?>> values) {
 		super.implClasses(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public <T> SoapXmlSerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) {
 		super.implClass(interfaceClass, implClass);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder includeProperties(Map<String,String> values) {
 		super.includeProperties(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder includeProperties(String beanClassName, String properties) {
 		super.includeProperties(beanClassName, properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder includeProperties(Class<?> beanClass, String properties) {
 		super.includeProperties(beanClass, properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder excludeProperties(Map<String,String> values) {
 		super.excludeProperties(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder excludeProperties(String beanClassName, String properties) {
 		super.excludeProperties(beanClassName, properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder excludeProperties(Class<?> beanClass, String properties) {
 		super.excludeProperties(beanClass, properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beanDictionary(Class<?>...values) {
 		super.beanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beanDictionary(Collection<Class<?>> values) {
 		super.beanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder setBeanDictionary(Class<?>...values) {
 		super.setBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder setBeanDictionary(Collection<Class<?>> values) {
 		super.setBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder removeFromBeanDictionary(Class<?>...values) {
 		super.removeFromBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder removeFromBeanDictionary(Collection<Class<?>> values) {
 		super.removeFromBeanDictionary(values);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder beanTypePropertyName(String value) {
 		super.beanTypePropertyName(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder defaultParser(Class<?> value) {
 		super.defaultParser(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder locale(Locale value) {
 		super.locale(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder timeZone(TimeZone value) {
 		super.timeZone(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder mediaType(MediaType value) {
 		super.mediaType(value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
+	@Override /* ContextBuilder */
 	public SoapXmlSerializerBuilder debug() {
 		super.debug();
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public SoapXmlSerializerBuilder property(String name, Object value) {
-		super.property(name, value);
-		return this;
-	}
-
-	@Override /* CoreObjectBuilder */
-	public SoapXmlSerializerBuilder properties(Map<String,Object> properties) {
-		super.properties(properties);
+	@Override /* ContextBuilder */
+	public SoapXmlSerializerBuilder set(String name, Object value) {
+		super.set(name, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public SoapXmlSerializerBuilder addToProperty(String name, Object value) {
-		super.addToProperty(name, value);
+	@Override /* ContextBuilder */
+	public SoapXmlSerializerBuilder set(Map<String,Object> properties) {
+		super.set(properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public SoapXmlSerializerBuilder putToProperty(String name, Object key, Object value) {
-		super.putToProperty(name, key, value);
+	@Override /* ContextBuilder */
+	public SoapXmlSerializerBuilder add(Map<String,Object> properties) {
+		super.add(properties);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public SoapXmlSerializerBuilder putToProperty(String name, Object value) {
-		super.putToProperty(name, value);
+	@Override /* ContextBuilder */
+	public SoapXmlSerializerBuilder addTo(String name, Object value) {
+		super.addTo(name, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public SoapXmlSerializerBuilder removeFromProperty(String name, Object value) {
-		super.removeFromProperty(name, value);
+	@Override /* ContextBuilder */
+	public SoapXmlSerializerBuilder addTo(String name, String key, Object value) {
+		super.addTo(name, key, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public SoapXmlSerializerBuilder classLoader(ClassLoader classLoader) {
-		super.classLoader(classLoader);
+	@Override /* ContextBuilder */
+	public SoapXmlSerializerBuilder removeFrom(String name, Object value) {
+		super.removeFrom(name, value);
 		return this;
 	}
 
-	@Override /* CoreObjectBuilder */
-	public SoapXmlSerializerBuilder apply(PropertyStore copyFrom) {
+	@Override /* ContextBuilder */
+	public SoapXmlSerializerBuilder apply(PropertyStore2 copyFrom) {
 		super.apply(copyFrom);
 		return this;
 	}

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerContext.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerContext.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerContext.java
deleted file mode 100644
index e33e334..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerContext.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                                                              *
-// *                                                                                                                         *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
-// *                                                                                                                         *
-// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the License.                                              *
-// ***************************************************************************************************************************
-package org.apache.juneau.soap;
-
-import org.apache.juneau.*;
-import org.apache.juneau.xml.*;
-
-/**
- * Contains a snapshot-in-time read-only copy of the settings on the {@link SoapXmlSerializer} class.
- */
-public final class SoapXmlSerializerContext extends XmlSerializerContext {
-
-	/**
-	 * Constructor
-	 *
-	 * <p>
-	 * Typically only called from {@link PropertyStore#getContext(Class)}.
-	 *
-	 * @param ps The property store that created this context.
-	 */
-	public SoapXmlSerializerContext(PropertyStore ps) {
-		super(ps);
-	}
-}

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java
index 8f9fbd4..2f469e3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerSession.java
@@ -28,6 +28,8 @@ import org.apache.juneau.xml.*;
  * It is typically discarded after one-time use although it can be reused within the same thread.
  */
 public class SoapXmlSerializerSession extends XmlSerializerSession {
+	
+	private final String soapAction; 
 
 	/**
 	 * Create a new session using properties specified in the context.
@@ -41,8 +43,10 @@ public class SoapXmlSerializerSession extends XmlSerializerSession {
 	 * 	It also include session-level properties that override the properties defined on the bean and
 	 * 	serializer contexts.
 	 */
-	public SoapXmlSerializerSession(SoapXmlSerializerContext ctx, SerializerSessionArgs args) {
+	public SoapXmlSerializerSession(SoapXmlSerializer ctx, SerializerSessionArgs args) {
 		super(ctx, args);
+		
+		soapAction = getProperty(SOAPXML_SOAPAction, String.class, ctx.soapAction);
 	}
 
 	//--------------------------------------------------------------------------------
@@ -57,7 +61,7 @@ public class SoapXmlSerializerSession extends XmlSerializerSession {
 				.attr("encoding", "UTF-8")
 				.appendln("?>");
 			w.oTag("soap", "Envelope")
-				.attr("xmlns", "soap", getStringProperty(SOAPXML_SOAPAction, "http://www.w3.org/2003/05/soap-envelope"))
+				.attr("xmlns", "soap", soapAction)
 				.appendln(">");
 			w.sTag(1, "soap", "Body").nl(1);
 			indent += 2;
@@ -70,6 +74,6 @@ public class SoapXmlSerializerSession extends XmlSerializerSession {
 
 	@Override /* Serializer */
 	public Map<String,String> getResponseHeaders() {
-		return new AMap<String,String>().append("SOAPAction", getStringProperty(SOAPXML_SOAPAction, "http://www.w3.org/2003/05/soap-envelope"));
+		return new AMap<String,String>().append("SOAPAction", soapAction);
 	}
 }

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
index 685789d..f83f210 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
@@ -25,7 +25,7 @@ import org.apache.juneau.internal.*;
  *
  * <p>
  * These objects are created when you pass in non-<code>BeanFilterBuilder</code> classes to
- * {@link PropertyStore#addToProperty(String,Object)}, and are equivalent to adding a
+ * {@link BeanContextBuilder#beanFilters(Class...)}, and are equivalent to adding a
  * <code><ja>@Bean</ja>(interfaceClass=Foo.<jk>class</jk>)</code> annotation on the <code>Foo</code> class.
  */
 public class InterfaceBeanFilterBuilder extends BeanFilterBuilder {

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
index 7417562..3d47fc4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/PojoSwap.java
@@ -319,6 +319,7 @@ import org.apache.juneau.serializer.*;
  * @param <S> The swapped form of the class.
  */
 @SuppressWarnings({"unchecked","rawtypes"})
+@BeanIgnore
 public abstract class PojoSwap<T,S> {
 
 	/**

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/Surrogate.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/Surrogate.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/Surrogate.java
index 4db447e..6fc3b14 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/Surrogate.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/Surrogate.java
@@ -67,7 +67,7 @@ import org.apache.juneau.*;
  * </ul>
  *
  * <p>
- * Surrogate classes are associated with serializers and parsers using the {@link CoreObjectBuilder#pojoSwaps(Class...)}
+ * Surrogate classes are associated with serializers and parsers using the {@link BeanContextBuilder#pojoSwaps(Class...)}
  * method.
  * <p class='bcode'>
  * 	<ja>@Test</ja>

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
index 47a6f51..c2b3199 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
@@ -21,6 +21,8 @@ import org.apache.juneau.html.*;
 import org.apache.juneau.json.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.transform.*;
+import org.apache.juneau.uon.*;
+import org.apache.juneau.urlencoding.*;
 import org.apache.juneau.xml.*;
 
 /**
@@ -81,6 +83,22 @@ public class ReaderSwap extends PojoSwap<Reader,Object> {
 		}
 	}
 
+	/** Reader transform for reading plain text. */
+	public static class Uon extends ReaderSwap {
+		/** Constructor */
+		public Uon() {
+			super(UonParser.DEFAULT);
+		}
+	}
+
+	/** Reader transform for reading plain text. */
+	public static class UrlEncoding extends ReaderSwap {
+		/** Constructor */
+		public UrlEncoding() {
+			super(UrlEncodingParser.DEFAULT);
+		}
+	}
+	
 	/** The parser to use to parse the contents of the Reader. */
 	private ReaderParser parser;
 

http://git-wip-us.apache.org/repos/asf/juneau/blob/227719b2/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
index 0564d84..e6a8169 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParser.java
@@ -39,7 +39,7 @@ public class UonParser extends ReaderParser {
 	 * <b>Configuration property:</b> Decode <js>"%xx"</js> sequences.
 	 *
 	 * <ul>
-	 * 	<li><b>Name:</b> <js>"UonParser.decodeChars"</js>
+	 * 	<li><b>Name:</b> <js>"UonParser.decodeChars.b"</js>
 	 * 	<li><b>Data type:</b> <code>Boolean</code>
 	 * 	<li><b>Default:</b> <jk>false</jk> for {@link UonParser}, <jk>true</jk> for {@link UrlEncodingParser}
 	 * 	<li><b>Session-overridable:</b> <jk>true</jk>
@@ -49,7 +49,7 @@ public class UonParser extends ReaderParser {
 	 * Specify <jk>true</jk> if URI encoded characters should be decoded, <jk>false</jk> if they've already been decoded
 	 * before being passed to this parser.
 	 */
-	public static final String UON_decodeChars = PREFIX + "decodeChars";
+	public static final String UON_decodeChars = PREFIX + "decodeChars.b";
 
 
 	//-------------------------------------------------------------------------------------------------------------------
@@ -57,10 +57,10 @@ public class UonParser extends ReaderParser {
 	//-------------------------------------------------------------------------------------------------------------------
 
 	/** Reusable instance of {@link UonParser}, all default settings. */
-	public static final UonParser DEFAULT = new UonParser(PropertyStore.create());
+	public static final UonParser DEFAULT = new UonParser(PropertyStore2.DEFAULT);
 
 	/** Reusable instance of {@link UonParser} with decodeChars set to true. */
-	public static final UonParser DEFAULT_DECODING = new UonParser.Decoding(PropertyStore.create());
+	public static final UonParser DEFAULT_DECODING = new UonParser.Decoding(PropertyStore2.DEFAULT);
 
 
 	//-------------------------------------------------------------------------------------------------------------------
@@ -73,10 +73,10 @@ public class UonParser extends ReaderParser {
 		/**
 		 * Constructor.
 		 *
-		 * @param propertyStore The property store containing all the settings for this object.
+		 * @param ps The property store containing all the settings for this object.
 		 */
-		public Decoding(PropertyStore propertyStore) {
-			super(propertyStore.copy().append(UON_decodeChars, true));
+		public Decoding(PropertyStore2 ps) {
+			super(ps.builder().set(UON_decodeChars, true).build());
 		}
 	}
 
@@ -85,34 +85,35 @@ public class UonParser extends ReaderParser {
 	// Instance
 	//-------------------------------------------------------------------------------------------------------------------
 
-	private final UonParserContext ctx;
+	final boolean
+		decodeChars;
 
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore
+	 * @param ps
 	 * 	The property store containing all the settings for this object.
 	 */
-	public UonParser(PropertyStore propertyStore) {
-		this(propertyStore, "text/uon");
+	public UonParser(PropertyStore2 ps) {
+		this(ps, "text/uon");
 	}
 
 	/**
 	 * Constructor.
 	 *
-	 * @param propertyStore
+	 * @param ps
 	 * 	The property store containing all the settings for this object.
 	 * @param consumes
 	 * 	The list of media types that this parser consumes (e.g. <js>"application/json"</js>, <js>"*&#8203;/json"</js>).
 	 */
-	public UonParser(PropertyStore propertyStore, String...consumes) {
-		super(propertyStore, consumes);
-		this.ctx = createContext(UonParserContext.class);
+	public UonParser(PropertyStore2 ps, String...consumes) {
+		super(ps, consumes);
+		this.decodeChars = getProperty(UON_decodeChars, boolean.class, false);
 	}
 
 	@Override /* CoreObject */
 	public UonParserBuilder builder() {
-		return new UonParserBuilder(propertyStore);
+		return new UonParserBuilder(getPropertyStore());
 	}
 
 	/**
@@ -137,11 +138,19 @@ public class UonParser extends ReaderParser {
 	 * @return A new parser session.
 	 */
 	protected final UonParserSession createParameterSession() {
-		return new UonParserSession(ctx, createDefaultSessionArgs(), false);
+		return new UonParserSession(this, createDefaultSessionArgs(), false);
 	}
 
 	@Override /* Parser */
 	public UonParserSession createSession(ParserSessionArgs args) {
-		return new UonParserSession(ctx, args);
+		return new UonParserSession(this, args);
+	}
+	
+	@Override /* Context */
+	public ObjectMap asMap() {
+		return super.asMap()
+			.append("UonParser", new ObjectMap()
+				.append("decodeChars", decodeChars)
+			);
 	}
 }