http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/jso/JsoParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/jso/JsoParser.java 
b/juneau-core/src/main/java/org/apache/juneau/jso/JsoParser.java
new file mode 100644
index 0000000..fad986f
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/jso/JsoParser.java
@@ -0,0 +1,59 @@
+// 
***************************************************************************************************************************
+// * 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.jso;
+
+import java.io.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.parser.*;
+
+/**
+ * Parses POJOs from HTTP responses as Java {@link ObjectInputStream 
ObjectInputStreams}.
+ *
+ * <h5 class='section'>Media types:</h5>
+ * <p>
+ * Consumes <code>Content-Type</code> types: 
<code>application/x-java-serialized-object</code>
+ */
+@Consumes("application/x-java-serialized-object")
+public final class JsoParser extends InputStreamParser {
+
+       /** Default parser, all default settings.*/
+       public static final JsoParser DEFAULT = new 
JsoParser(PropertyStore.create());
+
+
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       public JsoParser(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObject */
+       public JsoParserBuilder builder() {
+               return new JsoParserBuilder(propertyStore);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Overridden methods
+       
//--------------------------------------------------------------------------------
+
+       @SuppressWarnings("unchecked")
+       @Override /* InputStreamParser */
+       protected <T> T doParse(ParserSession session, ClassMeta<T> type) 
throws Exception {
+               ObjectInputStream ois = new 
ObjectInputStream(session.getInputStream());
+               return (T)ois.readObject();
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java 
b/juneau-core/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
new file mode 100644
index 0000000..2608028
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/jso/JsoParserBuilder.java
@@ -0,0 +1,457 @@
+// 
***************************************************************************************************************************
+// * 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.jso;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.parser.*;
+
+/**
+ * Builder class for building instances of Java Serialized Object parsers.
+ */
+public class JsoParserBuilder extends ParserBuilder {
+
+       /**
+        * Constructor, default settings.
+        */
+       public JsoParserBuilder() {
+               super();
+       }
+
+       /**
+        * Constructor.
+        * @param propertyStore The initial configuration settings for this 
builder.
+        */
+       public JsoParserBuilder(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParser build() {
+               return new JsoParser(propertyStore);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Properties
+       
//--------------------------------------------------------------------------------
+
+       @Override /* Parser */
+       public JsoParserBuilder trimStrings(boolean value) {
+               super.trimStrings(value);
+               return this;
+       }
+
+       @Override /* Parser */
+       public JsoParserBuilder strict(boolean value) {
+               super.strict(value);
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public JsoParserBuilder strict() {
+               super.strict();
+               return this;
+       }
+
+       @Override /* Parser */
+       public JsoParserBuilder inputStreamCharset(String value) {
+               super.inputStreamCharset(value);
+               return this;
+       }
+
+       @Override /* Parser */
+       public JsoParserBuilder fileCharset(String value) {
+               super.fileCharset(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beansRequireDefaultConstructor(boolean value) {
+               super.beansRequireDefaultConstructor(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beansRequireSerializable(boolean value) {
+               super.beansRequireSerializable(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beansRequireSettersForGetters(boolean value) {
+               super.beansRequireSettersForGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beansRequireSomeProperties(boolean value) {
+               super.beansRequireSomeProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beanMapPutReturnsOldValue(boolean value) {
+               super.beanMapPutReturnsOldValue(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beanConstructorVisibility(Visibility value) {
+               super.beanConstructorVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beanClassVisibility(Visibility value) {
+               super.beanClassVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beanFieldVisibility(Visibility value) {
+               super.beanFieldVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder methodVisibility(Visibility value) {
+               super.methodVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder useJavaBeanIntrospector(boolean value) {
+               super.useJavaBeanIntrospector(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder useInterfaceProxies(boolean value) {
+               super.useInterfaceProxies(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder ignoreUnknownBeanProperties(boolean value) {
+               super.ignoreUnknownBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder ignoreUnknownNullBeanProperties(boolean value) {
+               super.ignoreUnknownNullBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder ignorePropertiesWithoutSetters(boolean value) {
+               super.ignorePropertiesWithoutSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder ignoreInvocationExceptionsOnGetters(boolean 
value) {
+               super.ignoreInvocationExceptionsOnGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder ignoreInvocationExceptionsOnSetters(boolean 
value) {
+               super.ignoreInvocationExceptionsOnSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder sortProperties(boolean value) {
+               super.sortProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder notBeanPackages(String...values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder notBeanPackages(Collection<String> values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder setNotBeanPackages(String...values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder setNotBeanPackages(Collection<String> values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder removeNotBeanPackages(String...values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder removeNotBeanPackages(Collection<String> 
values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder notBeanClasses(Class<?>...values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder notBeanClasses(Collection<Class<?>> values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder setNotBeanClasses(Class<?>...values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder setNotBeanClasses(Collection<Class<?>> values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder removeNotBeanClasses(Class<?>...values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder removeNotBeanClasses(Collection<Class<?>> 
values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beanFilters(Class<?>...values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beanFilters(Collection<Class<?>> values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder setBeanFilters(Class<?>...values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder setBeanFilters(Collection<Class<?>> values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder removeBeanFilters(Class<?>...values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder removeBeanFilters(Collection<Class<?>> values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder pojoSwaps(Class<?>...values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder pojoSwaps(Collection<Class<?>> values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder setPojoSwaps(Class<?>...values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder setPojoSwaps(Collection<Class<?>> values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder removePojoSwaps(Class<?>...values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder removePojoSwaps(Collection<Class<?>> values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder implClasses(Map<Class<?>,Class<?>> values) {
+               super.implClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public <T> CoreObjectBuilder implClass(Class<T> interfaceClass, Class<? 
extends T> implClass) {
+               super.implClass(interfaceClass, implClass);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beanDictionary(Class<?>...values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beanDictionary(Collection<Class<?>> values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder setBeanDictionary(Class<?>...values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder setBeanDictionary(Collection<Class<?>> values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder removeFromBeanDictionary(Class<?>...values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder removeFromBeanDictionary(Collection<Class<?>> 
values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder beanTypePropertyName(String value) {
+               super.beanTypePropertyName(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder defaultParser(Class<?> value) {
+               super.defaultParser(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder locale(Locale value) {
+               super.locale(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder timeZone(TimeZone value) {
+               super.timeZone(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder mediaType(MediaType value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder debug(boolean value) {
+               super.debug(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder property(String name, Object value) {
+               super.property(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder properties(Map<String,Object> properties) {
+               super.properties(properties);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder addToProperty(String name, Object value) {
+               super.addToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder putToProperty(String name, Object key, Object 
value) {
+               super.putToProperty(name, key, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder putToProperty(String name, Object value) {
+               super.putToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder removeFromProperty(String name, Object value) {
+               super.removeFromProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder classLoader(ClassLoader classLoader) {
+               super.classLoader(classLoader);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoParserBuilder 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/jso/JsoSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializer.java 
b/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializer.java
new file mode 100644
index 0000000..d95cdbe
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializer.java
@@ -0,0 +1,61 @@
+// 
***************************************************************************************************************************
+// * 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.jso;
+
+import java.io.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.serializer.*;
+
+/**
+ * Serializes POJOs to HTTP responses as Java Serialized Object {@link 
ObjectOutputStream ObjectOutputStreams}.
+ *
+ * <h5 class='section'>Media types:</h5>
+ * <p>
+ * Handles <code>Accept</code> types: 
<code>application/x-java-serialized-object</code>
+ * <p>
+ * Produces <code>Content-Type</code> types: 
<code>application/x-java-serialized-object</code>
+ */
+@Produces("application/x-java-serialized-object")
+public class JsoSerializer extends OutputStreamSerializer {
+
+       /** Default serializer, all default settings.*/
+       public static final JsoSerializer DEFAULT = new 
JsoSerializer(PropertyStore.create());
+
+
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       public JsoSerializer(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObject */
+       public JsoSerializerBuilder builder() {
+               return new JsoSerializerBuilder(propertyStore);
+       }
+
+       
//--------------------------------------------------------------------------------
+       // Overridden methods
+       
//--------------------------------------------------------------------------------
+
+       @Override /* OutputStreamSerializer */
+       protected void doSerialize(SerializerSession session, Object o) throws 
Exception {
+               ObjectOutputStream oos = new 
ObjectOutputStream(session.getOutputStream());
+               oos.writeObject(o);
+               oos.flush();
+               oos.close();
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java 
b/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
new file mode 100644
index 0000000..c591b91
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
@@ -0,0 +1,529 @@
+// 
***************************************************************************************************************************
+// * 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.jso;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.serializer.*;
+
+/**
+ * Builder class for building instances of Java Serialized Object serializers.
+ */
+public class JsoSerializerBuilder extends SerializerBuilder {
+
+       /**
+        * Constructor, default settings.
+        */
+       public JsoSerializerBuilder() {
+               super();
+       }
+
+       /**
+        * Constructor.
+        * @param propertyStore The initial configuration settings for this 
builder.
+        */
+       public JsoSerializerBuilder(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializer build() {
+               return new JsoSerializer(propertyStore);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Properties
+       
//--------------------------------------------------------------------------------
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder maxDepth(int value) {
+               super.maxDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder initialDepth(int value) {
+               super.initialDepth(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder detectRecursions(boolean value) {
+               super.detectRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder ignoreRecursions(boolean value) {
+               super.ignoreRecursions(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder useWhitespace(boolean value) {
+               super.useWhitespace(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder ws() {
+               super.ws();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder addBeanTypeProperties(boolean value) {
+               super.addBeanTypeProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder quoteChar(char value) {
+               super.quoteChar(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder sq() {
+               super.sq();
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder trimNullProperties(boolean value) {
+               super.trimNullProperties(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder trimEmptyCollections(boolean value) {
+               super.trimEmptyCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder trimEmptyMaps(boolean value) {
+               super.trimEmptyMaps(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder trimStrings(boolean value) {
+               super.trimStrings(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder relativeUriBase(String value) {
+               super.relativeUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder absolutePathUriBase(String value) {
+               super.absolutePathUriBase(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder sortCollections(boolean value) {
+               super.sortCollections(value);
+               return this;
+       }
+
+       @Override /* SerializerBuilder */
+       public JsoSerializerBuilder sortMaps(boolean value) {
+               super.sortMaps(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beansRequireDefaultConstructor(boolean 
value) {
+               super.beansRequireDefaultConstructor(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beansRequireSerializable(boolean value) {
+               super.beansRequireSerializable(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beansRequireSettersForGetters(boolean 
value) {
+               super.beansRequireSettersForGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beansRequireSomeProperties(boolean value) {
+               super.beansRequireSomeProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beanMapPutReturnsOldValue(boolean value) {
+               super.beanMapPutReturnsOldValue(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beanConstructorVisibility(Visibility value) 
{
+               super.beanConstructorVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beanClassVisibility(Visibility value) {
+               super.beanClassVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beanFieldVisibility(Visibility value) {
+               super.beanFieldVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder methodVisibility(Visibility value) {
+               super.methodVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder useJavaBeanIntrospector(boolean value) {
+               super.useJavaBeanIntrospector(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder useInterfaceProxies(boolean value) {
+               super.useInterfaceProxies(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder ignoreUnknownBeanProperties(boolean value) {
+               super.ignoreUnknownBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder ignoreUnknownNullBeanProperties(boolean 
value) {
+               super.ignoreUnknownNullBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder ignorePropertiesWithoutSetters(boolean 
value) {
+               super.ignorePropertiesWithoutSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean 
value) {
+               super.ignoreInvocationExceptionsOnGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean 
value) {
+               super.ignoreInvocationExceptionsOnSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder sortProperties(boolean value) {
+               super.sortProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder notBeanPackages(String...values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder notBeanPackages(Collection<String> values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder setNotBeanPackages(String...values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder setNotBeanPackages(Collection<String> 
values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder removeNotBeanPackages(String...values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder removeNotBeanPackages(Collection<String> 
values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder notBeanClasses(Class<?>...values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder notBeanClasses(Collection<Class<?>> values) 
{
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder setNotBeanClasses(Class<?>...values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder setNotBeanClasses(Collection<Class<?>> 
values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder removeNotBeanClasses(Class<?>...values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder removeNotBeanClasses(Collection<Class<?>> 
values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beanFilters(Class<?>...values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beanFilters(Collection<Class<?>> values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder setBeanFilters(Class<?>...values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder setBeanFilters(Collection<Class<?>> values) 
{
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder removeBeanFilters(Class<?>...values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder removeBeanFilters(Collection<Class<?>> 
values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder pojoSwaps(Class<?>...values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder pojoSwaps(Collection<Class<?>> values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder setPojoSwaps(Class<?>...values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder setPojoSwaps(Collection<Class<?>> values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder removePojoSwaps(Class<?>...values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder removePojoSwaps(Collection<Class<?>> 
values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder implClasses(Map<Class<?>,Class<?>> values) {
+               super.implClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public <T> JsoSerializerBuilder implClass(Class<T> interfaceClass, 
Class<? extends T> implClass) {
+               super.implClass(interfaceClass, implClass);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beanDictionary(Class<?>...values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beanDictionary(Collection<Class<?>> values) 
{
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder setBeanDictionary(Class<?>...values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder setBeanDictionary(Collection<Class<?>> 
values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder removeFromBeanDictionary(Class<?>...values) 
{
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder 
removeFromBeanDictionary(Collection<Class<?>> values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder beanTypePropertyName(String value) {
+               super.beanTypePropertyName(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder defaultParser(Class<?> value) {
+               super.defaultParser(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder locale(Locale value) {
+               super.locale(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder timeZone(TimeZone value) {
+               super.timeZone(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder mediaType(MediaType value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder debug(boolean value) {
+               super.debug(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder property(String name, Object value) {
+               super.property(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder properties(Map<String,Object> properties) {
+               super.properties(properties);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder addToProperty(String name, Object value) {
+               super.addToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder putToProperty(String name, Object key, 
Object value) {
+               super.putToProperty(name, key, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder putToProperty(String name, Object value) {
+               super.putToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder removeFromProperty(String name, Object 
value) {
+               super.removeFromProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder classLoader(ClassLoader classLoader) {
+               super.classLoader(classLoader);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsoSerializerBuilder 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/json/JsonParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java 
b/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java
index d8197fc..24cd45e 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java
@@ -12,6 +12,8 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.json;
 
+import static org.apache.juneau.parser.ParserContext.*;
+
 import java.io.*;
 import java.lang.reflect.*;
 import java.util.*;
@@ -48,7 +50,7 @@ import org.apache.juneau.transform.*;
  *     <ul class='spaced-list'>
  *             <li> JSON objects (<js>"{...}"</js>) are converted to {@link 
ObjectMap ObjectMaps}.  <br>
  *                             <b>Note:</b>  If a 
<code><xa>_type</xa>=<xs>'xxx'</xs></code> attribute is specified on the 
object, then an attempt is made to convert the object
- *                             to an instance of the specified Java bean 
class.  See the classProperty setting on the {@link ContextFactory} for more 
information
+ *                             to an instance of the specified Java bean 
class.  See the <code>beanTypeName</code> setting on the {@link PropertyStore} 
for more information
  *                             about parsing beans from JSON.
  *             <li> JSON arrays (<js>"[...]"</js>) are converted to {@link 
ObjectList ObjectLists}.
  *             <li> JSON string literals (<js>"'xyz'"</js>) are converted to 
{@link String Strings}.
@@ -83,16 +85,51 @@ import org.apache.juneau.transform.*;
  */
 @SuppressWarnings({ "rawtypes", "unchecked" })
 @Consumes("application/json,text/json")
-public final class JsonParser extends ReaderParser {
+public class JsonParser extends ReaderParser {
 
        /** Default parser, all default settings.*/
-       public static final JsonParser DEFAULT = new JsonParser().lock();
+       public static final JsonParser DEFAULT = new 
JsonParser(PropertyStore.create());
 
        /** Default parser, all default settings.*/
-       public static final JsonParser DEFAULT_STRICT = new 
JsonParser().setStrict(true).lock();
+       public static final JsonParser DEFAULT_STRICT = new 
JsonParser.Strict(PropertyStore.create());
 
        private static final AsciiSet decChars = new AsciiSet("0123456789");
 
+
+       /** Default parser, strict mode. */
+       public static class Strict extends JsonParser {
+
+               /**
+                * Constructor.
+                * @param propertyStore The property store containing all the 
settings for this object.
+                */
+               public Strict(PropertyStore propertyStore) {
+                       super(propertyStore);
+               }
+
+               @Override /* CoreObject */
+               protected ObjectMap getOverrideProperties() {
+                       return 
super.getOverrideProperties().append(PARSER_strict, true);
+               }
+       }
+
+
+       private final JsonParserContext ctx;
+
+       /**
+        * Constructor.
+        * @param propertyStore The property store containing all the settings 
for this object.
+        */
+       public JsonParser(PropertyStore propertyStore) {
+               super(propertyStore);
+               this.ctx = createContext(JsonParserContext.class);
+       }
+
+       @Override /* CoreObject */
+       public JsonParserBuilder builder() {
+               return new JsonParserBuilder(propertyStore);
+       }
+
        private <T> T parseAnything(JsonParserSession session, ClassMeta<T> 
eType, ParserReader r, Object outer, BeanPropertyMeta pMeta) throws Exception {
 
                if (eType == null)
@@ -771,7 +808,7 @@ public final class JsonParser extends ReaderParser {
 
        @Override /* Parser */
        public JsonParserSession createSession(Object input, ObjectMap op, 
Method javaMethod, Object outer, Locale locale, TimeZone timeZone, MediaType 
mediaType) {
-               return new 
JsonParserSession(getContext(JsonParserContext.class), op, input, javaMethod, 
outer, locale, timeZone, mediaType);
+               return new JsonParserSession(ctx, op, input, javaMethod, outer, 
locale, timeZone, mediaType);
        }
 
        @Override /* Parser */
@@ -811,425 +848,4 @@ public final class JsonParser extends ReaderParser {
                validateEnd(s, r);
                return a;
        }
-
-
-       
//--------------------------------------------------------------------------------
-       // Properties
-       
//--------------------------------------------------------------------------------
-
-       @Override /* Parser */
-       public JsonParser setTrimStrings(boolean value) throws LockedException {
-               super.setTrimStrings(value);
-               return this;
-       }
-
-       @Override /* Parser */
-       public JsonParser setStrict(boolean value) throws LockedException {
-               super.setStrict(value);
-               return this;
-       }
-
-       @Override /* Parser */
-       public JsonParser setInputStreamCharset(String value) throws 
LockedException {
-               super.setInputStreamCharset(value);
-               return this;
-       }
-
-       @Override /* Parser */
-       public JsonParser setFileCharset(String value) throws LockedException {
-               super.setFileCharset(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeansRequireDefaultConstructor(boolean value) 
throws LockedException {
-               super.setBeansRequireDefaultConstructor(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeansRequireSerializable(boolean value) throws 
LockedException {
-               super.setBeansRequireSerializable(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeansRequireSettersForGetters(boolean value) 
throws LockedException {
-               super.setBeansRequireSettersForGetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeansRequireSomeProperties(boolean value) throws 
LockedException {
-               super.setBeansRequireSomeProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeanMapPutReturnsOldValue(boolean value) throws 
LockedException {
-               super.setBeanMapPutReturnsOldValue(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeanConstructorVisibility(Visibility value) throws 
LockedException {
-               super.setBeanConstructorVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeanClassVisibility(Visibility value) throws 
LockedException {
-               super.setBeanClassVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeanFieldVisibility(Visibility value) throws 
LockedException {
-               super.setBeanFieldVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setMethodVisibility(Visibility value) throws 
LockedException {
-               super.setMethodVisibility(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setUseJavaBeanIntrospector(boolean value) throws 
LockedException {
-               super.setUseJavaBeanIntrospector(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setUseInterfaceProxies(boolean value) throws 
LockedException {
-               super.setUseInterfaceProxies(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setIgnoreUnknownBeanProperties(boolean value) throws 
LockedException {
-               super.setIgnoreUnknownBeanProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setIgnoreUnknownNullBeanProperties(boolean value) 
throws LockedException {
-               super.setIgnoreUnknownNullBeanProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setIgnorePropertiesWithoutSetters(boolean value) 
throws LockedException {
-               super.setIgnorePropertiesWithoutSetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setIgnoreInvocationExceptionsOnGetters(boolean value) 
throws LockedException {
-               super.setIgnoreInvocationExceptionsOnGetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setIgnoreInvocationExceptionsOnSetters(boolean value) 
throws LockedException {
-               super.setIgnoreInvocationExceptionsOnSetters(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setSortProperties(boolean value) throws 
LockedException {
-               super.setSortProperties(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setNotBeanPackages(String...values) throws 
LockedException {
-               super.setNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setNotBeanPackages(Collection<String> values) throws 
LockedException {
-               super.setNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser addNotBeanPackages(String...values) throws 
LockedException {
-               super.addNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser addNotBeanPackages(Collection<String> values) throws 
LockedException {
-               super.addNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser removeNotBeanPackages(String...values) throws 
LockedException {
-               super.removeNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser removeNotBeanPackages(Collection<String> values) 
throws LockedException {
-               super.removeNotBeanPackages(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setNotBeanClasses(Class<?>...values) throws 
LockedException {
-               super.setNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setNotBeanClasses(Collection<Class<?>> values) throws 
LockedException {
-               super.setNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser addNotBeanClasses(Class<?>...values) throws 
LockedException {
-               super.addNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser addNotBeanClasses(Collection<Class<?>> values) throws 
LockedException {
-               super.addNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser removeNotBeanClasses(Class<?>...values) throws 
LockedException {
-               super.removeNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser removeNotBeanClasses(Collection<Class<?>> values) 
throws LockedException {
-               super.removeNotBeanClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeanFilters(Class<?>...values) throws 
LockedException {
-               super.setBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeanFilters(Collection<Class<?>> values) throws 
LockedException {
-               super.setBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser addBeanFilters(Class<?>...values) throws 
LockedException {
-               super.addBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser addBeanFilters(Collection<Class<?>> values) throws 
LockedException {
-               super.addBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser removeBeanFilters(Class<?>...values) throws 
LockedException {
-               super.removeBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser removeBeanFilters(Collection<Class<?>> values) throws 
LockedException {
-               super.removeBeanFilters(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setPojoSwaps(Class<?>...values) throws 
LockedException {
-               super.setPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setPojoSwaps(Collection<Class<?>> values) throws 
LockedException {
-               super.setPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser addPojoSwaps(Class<?>...values) throws 
LockedException {
-               super.addPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser addPojoSwaps(Collection<Class<?>> values) throws 
LockedException {
-               super.addPojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser removePojoSwaps(Class<?>...values) throws 
LockedException {
-               super.removePojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser removePojoSwaps(Collection<Class<?>> values) throws 
LockedException {
-               super.removePojoSwaps(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setImplClasses(Map<Class<?>,Class<?>> values) throws 
LockedException {
-               super.setImplClasses(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public <T> JsonParser addImplClass(Class<T> interfaceClass, Class<? 
extends T> implClass) throws LockedException {
-               super.addImplClass(interfaceClass, implClass);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeanDictionary(Class<?>...values) throws 
LockedException {
-               super.setBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeanDictionary(Collection<Class<?>> values) throws 
LockedException {
-               super.setBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser addToBeanDictionary(Class<?>...values) throws 
LockedException {
-               super.addToBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser addToBeanDictionary(Collection<Class<?>> values) 
throws LockedException {
-               super.addToBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser removeFromBeanDictionary(Class<?>...values) throws 
LockedException {
-               super.removeFromBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser removeFromBeanDictionary(Collection<Class<?>> values) 
throws LockedException {
-               super.removeFromBeanDictionary(values);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setBeanTypePropertyName(String value) throws 
LockedException {
-               super.setBeanTypePropertyName(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setDefaultParser(Class<?> value) throws 
LockedException {
-               super.setDefaultParser(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setLocale(Locale value) throws LockedException {
-               super.setLocale(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setTimeZone(TimeZone value) throws LockedException {
-               super.setTimeZone(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setMediaType(MediaType value) throws LockedException {
-               super.setMediaType(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setDebug(boolean value) throws LockedException {
-               super.setDebug(value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setProperty(String name, Object value) throws 
LockedException {
-               super.setProperty(name, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser setProperties(ObjectMap properties) throws 
LockedException {
-               super.setProperties(properties);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser addToProperty(String name, Object value) throws 
LockedException {
-               super.addToProperty(name, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser putToProperty(String name, Object key, Object value) 
throws LockedException {
-               super.putToProperty(name, key, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser putToProperty(String name, Object value) throws 
LockedException {
-               super.putToProperty(name, value);
-               return this;
-       }
-
-       @Override /* CoreApi */
-       public JsonParser removeFromProperty(String name, Object value) throws 
LockedException {
-               super.removeFromProperty(name, value);
-               return this;
-       }
-
-
-       
//--------------------------------------------------------------------------------
-       // Overridden methods
-       
//--------------------------------------------------------------------------------
-
-       @Override /* CoreApi */
-       public JsonParser setClassLoader(ClassLoader classLoader) throws 
LockedException {
-               super.setClassLoader(classLoader);
-               return this;
-       }
-
-       @Override /* Lockable */
-       public JsonParser lock() {
-               super.lock();
-               return this;
-       }
-
-       @Override /* Lockable */
-       public JsonParser clone() {
-               try {
-                       return (JsonParser)super.clone();
-               } catch (CloneNotSupportedException e) {
-                       throw new RuntimeException(e); // Shouldn't happen
-               }
-       }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/json/JsonParserBuilder.java 
b/juneau-core/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
new file mode 100644
index 0000000..ed550cc
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
@@ -0,0 +1,457 @@
+// 
***************************************************************************************************************************
+// * 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.json;
+
+import java.util.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.parser.*;
+
+/**
+ * Builder class for building instances of JSON parsers.
+ */
+public class JsonParserBuilder extends ParserBuilder {
+
+       /**
+        * Constructor, default settings.
+        */
+       public JsonParserBuilder() {
+               super();
+       }
+
+       /**
+        * Constructor.
+        * @param propertyStore The initial configuration settings for this 
builder.
+        */
+       public JsonParserBuilder(PropertyStore propertyStore) {
+               super(propertyStore);
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParser build() {
+               return new JsonParser(propertyStore);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Properties
+       
//--------------------------------------------------------------------------------
+
+       @Override /* ParserBuilder */
+       public JsonParserBuilder trimStrings(boolean value) {
+               super.trimStrings(value);
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public JsonParserBuilder strict(boolean value) {
+               super.strict(value);
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public JsonParserBuilder strict() {
+               super.strict();
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public JsonParserBuilder inputStreamCharset(String value) {
+               super.inputStreamCharset(value);
+               return this;
+       }
+
+       @Override /* ParserBuilder */
+       public JsonParserBuilder fileCharset(String value) {
+               super.fileCharset(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beansRequireDefaultConstructor(boolean value) {
+               super.beansRequireDefaultConstructor(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beansRequireSerializable(boolean value) {
+               super.beansRequireSerializable(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beansRequireSettersForGetters(boolean value) {
+               super.beansRequireSettersForGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beansRequireSomeProperties(boolean value) {
+               super.beansRequireSomeProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beanMapPutReturnsOldValue(boolean value) {
+               super.beanMapPutReturnsOldValue(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beanConstructorVisibility(Visibility value) {
+               super.beanConstructorVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beanClassVisibility(Visibility value) {
+               super.beanClassVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beanFieldVisibility(Visibility value) {
+               super.beanFieldVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder methodVisibility(Visibility value) {
+               super.methodVisibility(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder useJavaBeanIntrospector(boolean value) {
+               super.useJavaBeanIntrospector(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder useInterfaceProxies(boolean value) {
+               super.useInterfaceProxies(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder ignoreUnknownBeanProperties(boolean value) {
+               super.ignoreUnknownBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder ignoreUnknownNullBeanProperties(boolean value) 
{
+               super.ignoreUnknownNullBeanProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder ignorePropertiesWithoutSetters(boolean value) {
+               super.ignorePropertiesWithoutSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder ignoreInvocationExceptionsOnGetters(boolean 
value) {
+               super.ignoreInvocationExceptionsOnGetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder ignoreInvocationExceptionsOnSetters(boolean 
value) {
+               super.ignoreInvocationExceptionsOnSetters(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder sortProperties(boolean value) {
+               super.sortProperties(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder notBeanPackages(String...values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder notBeanPackages(Collection<String> values) {
+               super.notBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder setNotBeanPackages(String...values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder setNotBeanPackages(Collection<String> values) {
+               super.setNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder removeNotBeanPackages(String...values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder removeNotBeanPackages(Collection<String> 
values) {
+               super.removeNotBeanPackages(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder notBeanClasses(Class<?>...values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder notBeanClasses(Collection<Class<?>> values) {
+               super.notBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder setNotBeanClasses(Class<?>...values) {
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder setNotBeanClasses(Collection<Class<?>> values) 
{
+               super.setNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder removeNotBeanClasses(Class<?>...values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder removeNotBeanClasses(Collection<Class<?>> 
values) {
+               super.removeNotBeanClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beanFilters(Class<?>...values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beanFilters(Collection<Class<?>> values) {
+               super.beanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder setBeanFilters(Class<?>...values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder setBeanFilters(Collection<Class<?>> values) {
+               super.setBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder removeBeanFilters(Class<?>...values) {
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder removeBeanFilters(Collection<Class<?>> values) 
{
+               super.removeBeanFilters(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder pojoSwaps(Class<?>...values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder pojoSwaps(Collection<Class<?>> values) {
+               super.pojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder setPojoSwaps(Class<?>...values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder setPojoSwaps(Collection<Class<?>> values) {
+               super.setPojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder removePojoSwaps(Class<?>...values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder removePojoSwaps(Collection<Class<?>> values) {
+               super.removePojoSwaps(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder implClasses(Map<Class<?>,Class<?>> values) {
+               super.implClasses(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public <T> JsonParserBuilder implClass(Class<T> interfaceClass, Class<? 
extends T> implClass) {
+               super.implClass(interfaceClass, implClass);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beanDictionary(Class<?>...values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beanDictionary(Collection<Class<?>> values) {
+               super.beanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder setBeanDictionary(Class<?>...values) {
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder setBeanDictionary(Collection<Class<?>> values) 
{
+               super.setBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder removeFromBeanDictionary(Class<?>...values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder removeFromBeanDictionary(Collection<Class<?>> 
values) {
+               super.removeFromBeanDictionary(values);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder beanTypePropertyName(String value) {
+               super.beanTypePropertyName(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder defaultParser(Class<?> value) {
+               super.defaultParser(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder locale(Locale value) {
+               super.locale(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder timeZone(TimeZone value) {
+               super.timeZone(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder mediaType(MediaType value) {
+               super.mediaType(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder debug(boolean value) {
+               super.debug(value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder property(String name, Object value) {
+               super.property(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder properties(Map<String,Object> properties) {
+               super.properties(properties);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder addToProperty(String name, Object value) {
+               super.addToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder putToProperty(String name, Object key, Object 
value) {
+               super.putToProperty(name, key, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder putToProperty(String name, Object value) {
+               super.putToProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder removeFromProperty(String name, Object value) {
+               super.removeFromProperty(name, value);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder classLoader(ClassLoader classLoader) {
+               super.classLoader(classLoader);
+               return this;
+       }
+
+       @Override /* CoreObjectBuilder */
+       public JsonParserBuilder 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/json/JsonParserContext.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/json/JsonParserContext.java 
b/juneau-core/src/main/java/org/apache/juneau/json/JsonParserContext.java
index c53d224..b3c5bcd 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonParserContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonParserContext.java
@@ -18,10 +18,10 @@ import org.apache.juneau.parser.*;
 /**
  * Configurable properties on the {@link JsonParser} 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'>
@@ -36,12 +36,12 @@ public final class JsonParserContext extends ParserContext {
        /**
         * Constructor.
         * <p>
-        * Typically only called from {@link ContextFactory#getContext(Class)}.
+        * Typically only called from {@link PropertyStore#getContext(Class)}.
         *
-        * @param cf The factory that created this context.
+        * @param ps The property store that created this context.
         */
-       public JsonParserContext(ContextFactory cf) {
-               super(cf);
+       public JsonParserContext(PropertyStore ps) {
+               super(ps);
        }
 
        @Override /* Context */

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/json/JsonParserSession.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/json/JsonParserSession.java 
b/juneau-core/src/main/java/org/apache/juneau/json/JsonParserSession.java
index 6ce9d20..02ae190 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonParserSession.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonParserSession.java
@@ -17,7 +17,6 @@ import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.MediaType;
 import org.apache.juneau.parser.*;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java 
b/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
index 91c4d72..c2c0c43 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonSchemaSerializer.java
@@ -13,7 +13,9 @@
 package org.apache.juneau.json;
 
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.serializer.SerializerContext.*;
 
+import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -37,23 +39,29 @@ import org.apache.juneau.transform.*;
 
@Produces(value="application/json+schema,text/json+schema",contentType="application/json")
 public final class JsonSchemaSerializer extends JsonSerializer {
 
+       private final JsonSerializerContext ctx;
+
        /**
         * Constructor.
+        * @param propertyStore Initialize with the specified config property 
store.
         */
-       public JsonSchemaSerializer() {
-               setDetectRecursions(true);
-               setIgnoreRecursions(true);
+       public JsonSchemaSerializer(PropertyStore propertyStore) {
+               this(propertyStore, null);
        }
 
        /**
         * Constructor.
-        *
-        * @param config Initialize with the specified config property store.
+        * @param propertyStore Initialize with the specified config property 
store.
+        * @param overrideProperties
         */
-       public JsonSchemaSerializer(ContextFactory config) {
-               getContextFactory().copyFrom(config);
-               setDetectRecursions(true);
-               setIgnoreRecursions(true);
+       public JsonSchemaSerializer(PropertyStore propertyStore, 
Map<String,Object> overrideProperties) {
+               super(propertyStore);
+               this.ctx = 
this.propertyStore.create(overrideProperties).getContext(JsonSerializerContext.class);
+       }
+
+       @Override /* CoreObject */
+       protected ObjectMap getOverrideProperties() {
+               return 
super.getOverrideProperties().append(SERIALIZER_detectRecursions, 
true).append(SERIALIZER_ignoreRecursions, true);
        }
 
 
@@ -61,6 +69,11 @@ public final class JsonSchemaSerializer extends 
JsonSerializer {
        // Entry point methods
        
//--------------------------------------------------------------------------------
 
+       @Override /* Serializer */
+       public JsonSerializerSession createSession(Object output, ObjectMap op, 
Method javaMethod, Locale locale, TimeZone timeZone, MediaType mediaType) {
+               return new JsonSerializerSession(ctx, op, output, javaMethod, 
locale, timeZone, mediaType);
+       }
+
        @Override /* JsonSerializer */
        protected void doSerialize(SerializerSession session, Object o) throws 
Exception {
                JsonSerializerSession s = (JsonSerializerSession)session;
@@ -142,15 +155,4 @@ public final class JsonSchemaSerializer extends 
JsonSerializer {
                        l.add(e.toString());
                return l;
        }
-
-
-       
//--------------------------------------------------------------------------------
-       // Overridden methods
-       
//--------------------------------------------------------------------------------
-
-       @Override /* Lockable */
-       public JsonSchemaSerializer lock() {
-               super.lock();
-               return this;
-       }
 }

Reply via email to