This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 6afee4d  Move to using part parser sessions for efficiency.
6afee4d is described below

commit 6afee4d6111257337be7b825ca44651156aa6d73
Author: JamesBognar <[email protected]>
AuthorDate: Thu Apr 2 19:05:04 2020 -0400

    Move to using part parser sessions for efficiency.
---
 .../java/org/apache/juneau/httppart/HttpPart.java  | 20 +++++-----------
 .../apache/juneau/httppart/SimplePartParser.java   |  4 ++++
 .../httppart/bean/RequestBeanPropertyMeta.java     | 22 +++++++++++++++++
 .../httppart/bean/ResponseBeanPropertyMeta.java    | 22 +++++++++++++++++
 .../juneau/rest/client2/RestClientBuilderTest.java |  2 +-
 .../juneau/rest/client/remote/RemoteMethodArg.java | 11 +++++++++
 .../org/apache/juneau/rest/client2/RestClient.java | 28 ++++++++++++----------
 .../juneau/rest/client2/RestClientUtils.java       | 12 +++++-----
 .../apache/juneau/rest/client2/RestRequest.java    | 12 +++++-----
 .../apache/juneau/rest/client2/RestResponse.java   |  9 ++++---
 .../juneau/rest/client2/RestResponseHeader.java    |  8 +++----
 .../juneau/rest/client2/ext/NameValuePairs.java    |  2 +-
 .../juneau/rest/client2/ext/SerializedHeader.java  | 12 +++++-----
 .../rest/client2/ext/SerializedNameValuePair.java  | 22 +++++++++++++----
 .../org/apache/juneau/rest/RequestFormData.java    | 24 +++++++++----------
 .../org/apache/juneau/rest/RequestHeaders.java     | 16 ++++++-------
 .../java/org/apache/juneau/rest/RequestPath.java   | 14 +++++------
 .../java/org/apache/juneau/rest/RequestQuery.java  | 22 ++++++++---------
 .../org/apache/juneau/rest/RestParamDefaults.java  | 20 +++++++++-------
 .../java/org/apache/juneau/rest/RestRequest.java   | 22 ++++++++++-------
 .../juneau/rest/reshandlers/DefaultHandler.java    |  4 ++--
 21 files changed, 190 insertions(+), 118 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPart.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPart.java
index c1000a7..0ea76bd 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPart.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPart.java
@@ -27,10 +27,8 @@ public class HttpPart {
        private final String spart;
        private final HttpPartType partType;
        private final HttpPartSchema schema;
-       private final HttpPartSerializer serializer;
-       private final HttpPartParser parser;
-       private final SerializerSessionArgs sargs;
-       private final ParserSessionArgs pargs;
+       private final HttpPartSerializerSession serializer;
+       private final HttpPartParserSession parser;
 
        /**
         * Constructor.
@@ -42,19 +40,16 @@ public class HttpPart {
         * @param partType The HTTP part type.
         * @param schema Schema information about the part.
         * @param serializer The part serializer to use to serialize the part.
-        * @param args Session arguments to pass to the serializer.
         * @param part The part POJO being serialized.
         */
-       public HttpPart(String name, HttpPartType partType, HttpPartSchema 
schema, HttpPartSerializer serializer, SerializerSessionArgs args, Object part) 
{
+       public HttpPart(String name, HttpPartType partType, HttpPartSchema 
schema, HttpPartSerializerSession serializer, Object part) {
                this.name = name;
                this.partType = partType;
                this.schema = schema;
                this.serializer = serializer;
-               this.sargs = args;
                this.opart = part;
                this.spart = null;
                this.parser = null;
-               this.pargs = null;
        }
 
        /**
@@ -67,18 +62,15 @@ public class HttpPart {
         * @param partType The HTTP part type.
         * @param schema Schema information about the part.
         * @param parser The part parser to use to parse the part.
-        * @param args Session arguments to pass to the parser.
         * @param part The part string being parsed.
         */
-       public HttpPart(String name, HttpPartType partType, HttpPartSchema 
schema, HttpPartParser parser, ParserSessionArgs args, String part) {
+       public HttpPart(String name, HttpPartType partType, HttpPartSchema 
schema, HttpPartParserSession parser, String part) {
                this.name = name;
                this.partType = partType;
                this.schema = schema;
                this.parser = parser;
-               this.pargs = args;
                this.spart = part;
                this.serializer = null;
-               this.sargs = null;
                this.opart = null;
        }
 
@@ -101,7 +93,7 @@ public class HttpPart {
        public String asString() throws SchemaValidationException, 
SerializeException {
                if (spart != null)
                        return spart;
-               return serializer.createPartSession(sargs).serialize(partType, 
schema, opart);
+               return serializer.serialize(partType, schema, opart);
        }
 
        /**
@@ -113,6 +105,6 @@ public class HttpPart {
         * @throws ParseException Malformed input encountered.
         */
        public <T> T asType(Class<T> c) throws SchemaValidationException, 
ParseException {
-               return parser.createPartSession(pargs).parse(partType, schema, 
spart, parser.getClassMeta(c));
+               return parser.parse(partType, schema, spart, c);
        }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParser.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParser.java
index fc37a2d..b47cf12 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParser.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/SimplePartParser.java
@@ -47,6 +47,10 @@ public class SimplePartParser extends BaseHttpPartParser {
        /** Reusable instance of {@link SimplePartParser}, all default 
settings. */
        public static final SimplePartParser DEFAULT = new SimplePartParser();
 
+       /** Reusable instance of {@link SimplePartParser}, all default 
settings. */
+       public static final SimplePartParserSession DEFAULT_SESSION = 
DEFAULT.createPartSession(null);
+
+
        
//-------------------------------------------------------------------------------------------------------------------
        // Instance
        
//-------------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanPropertyMeta.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanPropertyMeta.java
index 7b180c4..fcd0327 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanPropertyMeta.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanPropertyMeta.java
@@ -115,21 +115,43 @@ public class RequestBeanPropertyMeta {
         * @param _default The default serializer to use if not defined on the 
annotation.
         * @return The serializer to use for serializing the bean property 
value.
         */
+       @Deprecated
        public HttpPartSerializer getSerializer(HttpPartSerializer _default) {
                return serializer == null ? _default : serializer;
        }
 
        /**
+        * Returns the serializer to use for serializing the bean property 
value.
+        *
+        * @param _default The default serializer to use if not defined on the 
annotation.
+        * @return The serializer to use for serializing the bean property 
value.
+        */
+       public HttpPartSerializerSession 
getSerializer(HttpPartSerializerSession _default) {
+               return serializer == null ? _default : 
serializer.createPartSession(null);
+       }
+
+       /**
         * Returns the parser to use for parsing the bean property value.
         *
         * @param _default The default parsing to use if not defined on the 
annotation.
         * @return The parsing to use for serializing the bean property value.
         */
+       @Deprecated
        public HttpPartParser getParser(HttpPartParser _default) {
                return parser == null ? _default : parser;
        }
 
        /**
+        * Returns the parser to use for parsing the bean property value.
+        *
+        * @param _default The default parsing to use if not defined on the 
annotation.
+        * @return The parsing to use for serializing the bean property value.
+        */
+       public HttpPartParserSession getParser(HttpPartParserSession _default) {
+               return parser == null ? _default : 
parser.createPartSession(null);
+       }
+
+       /**
         * Returns the schema information gathered from annotations on the 
method and return type.
         *
         * @return
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanPropertyMeta.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanPropertyMeta.java
index 6ac33fc..b71c8c0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanPropertyMeta.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanPropertyMeta.java
@@ -121,21 +121,43 @@ public class ResponseBeanPropertyMeta {
         * @param _default The default serializer to use if not defined on the 
annotation.
         * @return The serializer to use for serializing the bean property 
value.
         */
+       @Deprecated
        public HttpPartSerializer getSerializer(HttpPartSerializer _default) {
                return serializer == null ? _default : serializer;
        }
 
        /**
+        * Returns the serializer to use for serializing the bean property 
value.
+        *
+        * @param _default The default serializer to use if not defined on the 
annotation.
+        * @return The serializer to use for serializing the bean property 
value.
+        */
+       public HttpPartSerializerSession 
getSerializer(HttpPartSerializerSession _default) {
+               return serializer == null ? _default : 
serializer.createPartSession(null);
+       }
+
+       /**
         * Returns the parser to use for parsing the bean property value.
         *
         * @param _default The default parser to use if not defined on the 
annotation.
         * @return The parser to use for parsing the bean property value.
         */
+       @Deprecated
        public HttpPartParser getParser(HttpPartParser _default) {
                return parser == null ? _default : parser;
        }
 
        /**
+        * Returns the parser to use for parsing the bean property value.
+        *
+        * @param _default The default parser to use if not defined on the 
annotation.
+        * @return The parser to use for parsing the bean property value.
+        */
+       public HttpPartParserSession getParser(HttpPartParserSession _default) {
+               return parser == null ? _default : 
parser.createPartSession(null);
+       }
+
+       /**
         * Returns the schema information gathered from annotations on the 
method and return type.
         *
         * @return
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java
index 88f82a2..07d020f 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java
@@ -1703,7 +1703,7 @@ public class RestClientBuilderTest {
                        .header("Check", "Foo")
                        .header("Foo", bean, new XPartSerializer(), null)
                        .build();
-               
rc.get("/checkHeader").header(AddFlag.DEFAULT_FLAGS,"Foo",bean,new 
XPartSerializer(),null).run().getBody().assertValue("['x{f:1}','x{f:1}']");
+               
rc.get("/checkHeader").header(AddFlag.DEFAULT_FLAGS,"Foo",bean,new 
XPartSerializer().createPartSession(null),null).run().getBody().assertValue("['x{f:1}','x{f:1}']");
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodArg.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodArg.java
index ad2a975..1e64aa6 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodArg.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodArg.java
@@ -93,11 +93,22 @@ public final class RemoteMethodArg {
         * @param _default The default serializer to use if the serializer was 
not defined via annotations.
         * @return The HTTP part serializer, or <jk>null</jk> if not specified.
         */
+       @Deprecated
        public HttpPartSerializer getSerializer(HttpPartSerializer _default) {
                return serializer == null ? _default : serializer;
        }
 
        /**
+        * Returns the HTTP part serializer to use for serializing this part.
+        *
+        * @param _default The default serializer to use if the serializer was 
not defined via annotations.
+        * @return The HTTP part serializer, or <jk>null</jk> if not specified.
+        */
+       public HttpPartSerializerSession 
getSerializer(HttpPartSerializerSession _default) {
+               return serializer == null ? _default : 
serializer.createPartSession(null);
+       }
+
+       /**
         * Returns the HTTP part schema information about this part.
         *
         * @return The HTTP part schema information, or <jk>null</jk> if not 
found.
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
index 8ebcb6c..48646ac 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
@@ -317,7 +317,7 @@ import org.apache.http.client.CookieStore;
  *     <ul>
  *             <li class='jm'>{@link RestRequest#header(String,Object) 
header(String,Object)}
  *             <li class='jm'>{@link RestRequest#header(EnumSet,String,Object) 
header(EnumSet&gt;AddFlag&gt;,String,Object)}
- *             <li class='jm'>{@link 
RestRequest#header(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema) 
header(EnumSet&gt;AddFlag&gt;,String,Object,HttpPartSerializer,HttpPartSchema)}
+ *             <li class='jm'>{@link 
RestRequest#header(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema)
 header(EnumSet&gt;AddFlag&gt;,String,Object,HttpPartSerializer,HttpPartSchema)}
  *             <li class='jm'>{@link RestRequest#header(Object) header(Object)}
  *             <li class='jm'>{@link RestRequest#header(EnumSet,Object) 
header(EnumSet&gt;AddFlag&gt;,Object)}
  *             <li class='jm'>{@link RestRequest#headers(Object...) 
headers(Object...)}
@@ -408,7 +408,7 @@ import org.apache.http.client.CookieStore;
  *     <ul>
  *             <li class='jm'>{@link RestRequest#query(String,Object) 
query(String,Object)}
  *             <li class='jm'>{@link RestRequest#query(EnumSet,String,Object) 
query(EnumSet&lt;AddFlag&gt;,String,Object)}
- *             <li class='jm'>{@link 
RestRequest#query(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema) 
query(EnumSet&lt;AddFlag&gt;,String,Object,HttpPartSerializer,HttpPartSchema)}
+ *             <li class='jm'>{@link 
RestRequest#query(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema)
 
query(EnumSet&lt;AddFlag&gt;,String,Object,HttpPartSerializerSession,HttpPartSchema)}
  *             <li class='jm'>{@link RestRequest#query(Object...) 
query(Object...)}
  *             <li class='jm'>{@link RestRequest#query(EnumSet,Object...) 
query(EnumSet&lt;AddFlag&gt;,Object...)}
  *             <li class='jm'>{@link RestRequest#queryPairs(Object...) 
queryPairs(Object...)}
@@ -448,7 +448,7 @@ import org.apache.http.client.CookieStore;
  *     <ul>
  *             <li class='jm'>{@link RestRequest#formData(String,Object) 
formData(String,Object)}
  *             <li class='jm'>{@link 
RestRequest#formData(EnumSet,String,Object) 
formData(EnumSet&lt;AddFlag&gt;,String,Object)}
- *             <li class='jm'>{@link 
RestRequest#formData(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema) 
formData(EnumSet&lt;AddFlag&gt;,String,Object,HttpPartSerializer,HttpPartSchema)}
+ *             <li class='jm'>{@link 
RestRequest#formData(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema)
 
formData(EnumSet&lt;AddFlag&gt;,String,Object,HttpPartSerializerSession,HttpPartSchema)}
  *             <li class='jm'>{@link RestRequest#formData(Object...) 
formData(Object...)}
  *             <li class='jm'>{@link RestRequest#formData(EnumSet,Object...) 
formData(EnumSet&lt;AddFlag&gt;,Object...)}
  *             <li class='jm'>{@link RestRequest#formDataPairs(Object...) 
formDataPairs(Object...)}
@@ -1126,7 +1126,7 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable {
         *                      <ul>
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#formData(String,Object) 
formData(String,Object)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#formData(EnumSet,String,Object) 
formData(EnumSet&lt;AddFlag&gt;,String,Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#formData(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema)
 
formData(EnumSet&lt;AddFlag&gt;,String,Object,HttpPartSerializer,HttpPartSchema)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#formData(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema)
 
formData(EnumSet&lt;AddFlag&gt;,String,Object,HttpPartSerializerSession,HttpPartSchema)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#formData(Object...) 
formData(Object...)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#formData(EnumSet,Object...) 
formData(EnumSet&lt;AddFlag&gt;Object...)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#formDataPairs(Object...) 
formDataPairs(Object...)}
@@ -1195,7 +1195,7 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable {
         *                      <ul>
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#header(String,Object) 
header(String,Object)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#header(EnumSet,String,Object) 
header(EnumSet&gt;AddFlag&gt;,String,Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#header(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema)
 header(EnumSet&gt;AddFlag&gt;,String,Object,HttpPartSerializer,HttpPartSchema)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#header(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema)
 
header(EnumSet&gt;AddFlag&gt;,String,Object,HttpPartSerializerSession,HttpPartSchema)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#header(Object) header(Object)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#header(EnumSet,Object) 
header(EnumSet&gt;AddFlag&gt;,Object)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#headers(Object...) 
headers(Object...)}
@@ -1424,7 +1424,7 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable {
         *                      <ul>
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#query(String,Object) 
query(String,Object)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#query(EnumSet,String,Object) 
query(EnumSet&lt;AddFlag&gt;,String,Object)}
-        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#query(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema)
 query(EnumSet&lt;AddFlag&gt;,String,Object,HttpPartSerializer,HttpPartSchema)}
+        *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#query(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema)
 
query(EnumSet&lt;AddFlag&gt;,String,Object,HttpPartSerializerSession,HttpPartSchema)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#query(Object...) query(Object...)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#query(EnumSet,Object...) 
query(EnumSet&lt;AddFlag&gt;,Object...)}
         *                              <li class='jm'>{@link 
org.apache.juneau.rest.client2.RestRequest#queryPairs(Object...) 
queryPairs(Object...)}
@@ -1579,7 +1579,9 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable {
                this.partParser = getInstanceProperty(RESTCLIENT_partParser, 
HttpPartParser.class, OpenApiParser.class, ResourceResolver.FUZZY, ps);
                this.executorService = 
getInstanceProperty(RESTCLIENT_executorService, ExecutorService.class, null);
 
-               Function<Object,Object> f = x -> x instanceof 
SerializedNameValuePair.Builder ? 
((SerializedNameValuePair.Builder)x).serializer(partSerializer, false).build() 
: x;
+               HttpPartSerializerSession partSerializerSession = 
partSerializer.createPartSession(null);
+
+               Function<Object,Object> f = x -> x instanceof 
SerializedNameValuePair.Builder ? 
((SerializedNameValuePair.Builder)x).serializer(partSerializerSession, 
false).build() : x;
 
                this.headers = Collections.unmodifiableList(
                        getListProperty(RESTCLIENT_headers, Object.class)
@@ -2436,7 +2438,7 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable {
                                                        throw new 
RemoteMetadataException(interfaceClass, "Root URI has not been specified.  
Cannot construct absolute path to remote resource.");
 
                                                String httpMethod = 
rmm.getHttpMethod();
-                                               HttpPartSerializer s = 
getPartSerializer();
+                                               HttpPartSerializerSession s = 
getPartSerializerSession();
 
                                                try {
                                                        RestRequest rc = 
request(httpMethod, url, hasContent(httpMethod));
@@ -2468,7 +2470,7 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable {
                                                                                
for (RequestBeanPropertyMeta p : rbm.getProperties()) {
                                                                                
        Object val = p.getGetter().invoke(bean);
                                                                                
        HttpPartType pt = p.getPartType();
-                                                                               
        HttpPartSerializer ps = p.getSerializer(s);
+                                                                               
        HttpPartSerializerSession ps = p.getSerializer(s);
                                                                                
        String pn = p.getPartName();
                                                                                
        HttpPartSchema schema = p.getSchema();
                                                                                
        boolean sie = schema.isSkipIfEmpty();
@@ -2939,12 +2941,12 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable {
        // Other methods.
        
//-----------------------------------------------------------------------------------------------------------------
 
-       HttpPartSerializer getPartSerializer() {
-               return partSerializer;
+       HttpPartSerializerSession getPartSerializerSession() {
+               return partSerializer == null ? null : 
partSerializer.createPartSession(null);
        }
 
-       HttpPartParser getPartParser() {
-               return partParser;
+       HttpPartParserSession getPartParserSession() {
+               return partParser == null ? null : 
partParser.createPartSession(null);
        }
 
        private Pattern absUrlPattern = Pattern.compile("^\\w+\\:\\/\\/.*");
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientUtils.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientUtils.java
index e98df64..480fe3e 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientUtils.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientUtils.java
@@ -76,20 +76,20 @@ class RestClientUtils {
                return l;
        }
 
-       static Header toHeader(EnumSet<AddFlag> flags, String name, Object 
value, HttpPartSerializer serializer, HttpPartSchema schema) {
+       static Header toHeader(EnumSet<AddFlag> flags, String name, Object 
value, HttpPartSerializerSession serializer, HttpPartSchema schema) {
                return new SerializedHeader(name, value, serializer, schema, 
flags.contains(SKIP_IF_EMPTY));
        }
 
-       static NameValuePair toQuery(EnumSet<AddFlag> flags, String name, 
Object value, HttpPartSerializer serializer, HttpPartSchema schema) {
+       static NameValuePair toQuery(EnumSet<AddFlag> flags, String name, 
Object value, HttpPartSerializerSession serializer, HttpPartSchema schema) {
                return new SerializedNameValuePair(name, value, QUERY,  
serializer, schema, flags.contains(SKIP_IF_EMPTY));
        }
 
-       static NameValuePair toFormData(EnumSet<AddFlag> flags, String name, 
Object value, HttpPartSerializer serializer, HttpPartSchema schema) {
+       static NameValuePair toFormData(EnumSet<AddFlag> flags, String name, 
Object value, HttpPartSerializerSession serializer, HttpPartSchema schema) {
                return new SerializedNameValuePair(name, value, FORMDATA,  
serializer, schema, flags.contains(SKIP_IF_EMPTY));
        }
 
        @SuppressWarnings("rawtypes")
-       static List<Header> toHeaders(EnumSet<AddFlag> flags, Map headers, 
HttpPartSerializer serializer, HttpPartSchema schema) {
+       static List<Header> toHeaders(EnumSet<AddFlag> flags, Map headers, 
HttpPartSerializerSession serializer, HttpPartSchema schema) {
                List<Header> l = new ArrayList<>();
                for (Map.Entry e : (Set<Map.Entry>)headers.entrySet())
                        l.add(new SerializedHeader(stringify(e.getKey()), 
e.getValue(), serializer, null, flags.contains(SKIP_IF_EMPTY)));
@@ -97,7 +97,7 @@ class RestClientUtils {
        }
 
        @SuppressWarnings("rawtypes")
-       static List<NameValuePair> toQuery(EnumSet<AddFlag> flags, Map params, 
HttpPartSerializer serializer, HttpPartSchema schema) {
+       static List<NameValuePair> toQuery(EnumSet<AddFlag> flags, Map params, 
HttpPartSerializerSession serializer, HttpPartSchema schema) {
                List<NameValuePair> l = new ArrayList<>();
                for (Map.Entry e : (Set<Map.Entry>)params.entrySet())
                        l.add(new 
SerializedNameValuePair(stringify(e.getKey()), e.getValue(), QUERY, serializer, 
null, flags.contains(SKIP_IF_EMPTY)));
@@ -105,7 +105,7 @@ class RestClientUtils {
        }
 
        @SuppressWarnings("rawtypes")
-       static List<NameValuePair> toFormData(EnumSet<AddFlag> flags, Map 
params, HttpPartSerializer serializer, HttpPartSchema schema) {
+       static List<NameValuePair> toFormData(EnumSet<AddFlag> flags, Map 
params, HttpPartSerializerSession serializer, HttpPartSchema schema) {
                List<NameValuePair> l = new ArrayList<>();
                for (Map.Entry e : (Set<Map.Entry>)params.entrySet())
                        l.add(new 
SerializedNameValuePair(stringify(e.getKey()), e.getValue(), FORMDATA, 
serializer, null, flags.contains(SKIP_IF_EMPTY)));
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
index 1ac9d7b..1b22123 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
@@ -72,7 +72,7 @@ public final class RestRequest extends BeanSession implements 
HttpUriRequest, Co
        private boolean hasInput;                              // input() was 
called, even if it's setting 'null'.
        private Serializer serializer;
        private Parser parser;
-       private HttpPartSerializer partSerializer;
+       private HttpPartSerializerSession partSerializer;
        private HttpPartSchema requestBodySchema;
        private URIBuilder uriBuilder;
        private NameValuePairs formData;
@@ -93,7 +93,7 @@ public final class RestRequest extends BeanSession implements 
HttpUriRequest, Co
                this.client = client;
                this.request = request;
                this.errorCodes = client.errorCodes;
-               this.partSerializer = client.getPartSerializer();
+               this.partSerializer = client.getPartSerializerSession();
                this.uriBuilder = new URIBuilder(uri);
        }
 
@@ -394,7 +394,7 @@ public final class RestRequest extends BeanSession 
implements HttpUriRequest, Co
         * @throws RestCallException Error occurred.
         */
        @SuppressWarnings("unchecked")
-       public RestRequest path(String name, Object value, HttpPartSerializer 
serializer, HttpPartSchema schema) throws RestCallException {
+       public RestRequest path(String name, Object value, 
HttpPartSerializerSession serializer, HttpPartSchema schema) throws 
RestCallException {
                serializer = (serializer == null ? partSerializer : serializer);
                boolean isMulti = isEmpty(name) || "*".equals(name) || value 
instanceof NameValuePairs;
                if (! isMulti) {
@@ -673,7 +673,7 @@ public final class RestRequest extends BeanSession 
implements HttpUriRequest, Co
         * @throws RestCallException Invalid input.
         */
        @SuppressWarnings("unchecked")
-       public RestRequest query(EnumSet<AddFlag> flags, String name, Object 
value, HttpPartSerializer serializer, HttpPartSchema schema) throws 
RestCallException {
+       public RestRequest query(EnumSet<AddFlag> flags, String name, Object 
value, HttpPartSerializerSession serializer, HttpPartSchema schema) throws 
RestCallException {
                serializer = (serializer == null ? partSerializer : serializer);
                flags = AddFlag.orDefault(flags);
                boolean isMulti = isEmpty(name) || "*".equals(name) || value 
instanceof NameValuePairs;
@@ -1050,7 +1050,7 @@ public final class RestRequest extends BeanSession 
implements HttpUriRequest, Co
         * @throws RestCallException Invalid input.
         */
        @SuppressWarnings("unchecked")
-       public RestRequest formData(EnumSet<AddFlag> flags, String name, Object 
value, HttpPartSerializer serializer, HttpPartSchema schema) throws 
RestCallException {
+       public RestRequest formData(EnumSet<AddFlag> flags, String name, Object 
value, HttpPartSerializerSession serializer, HttpPartSchema schema) throws 
RestCallException {
                serializer = (serializer == null ? partSerializer : serializer);
                flags = AddFlag.orDefault(flags);
                boolean isMulti = isEmpty(name) || "*".equals(name) || value 
instanceof NameValuePairs;
@@ -1497,7 +1497,7 @@ public final class RestRequest extends BeanSession 
implements HttpUriRequest, Co
         * @throws RestCallException Invalid input.
         */
        @SuppressWarnings("unchecked")
-       public RestRequest header(EnumSet<AddFlag> flags, String name, Object 
value, HttpPartSerializer serializer, HttpPartSchema schema) throws 
RestCallException {
+       public RestRequest header(EnumSet<AddFlag> flags, String name, Object 
value, HttpPartSerializerSession serializer, HttpPartSchema schema) throws 
RestCallException {
                serializer = (serializer == null ? partSerializer : serializer);
                flags = AddFlag.orDefault(flags);
                boolean isMulti = isEmpty(name) || "*".equals(name) || value 
instanceof NameValuePairs;
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java
index d90a674..3618bc4 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest.client2;
 
-import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
 
 import static org.apache.juneau.httppart.HttpPartType.*;
@@ -47,7 +46,7 @@ public final class RestResponse implements HttpResponse {
        private final RestRequest request;
        private final HttpResponse response;
        private final Parser parser;
-       private HttpPartParser partParser;
+       private HttpPartParserSession partParser;
        private RestResponseBody responseBody;
        private boolean isClosed;
 
@@ -64,7 +63,7 @@ public final class RestResponse implements HttpResponse {
                this.parser = parser;
                this.response = response == null ? new BasicHttpResponse(null, 
0, null) : response;
                this.responseBody = new RestResponseBody(client, request, this, 
parser);
-               this.partParser = client.getPartParser();
+               this.partParser = client.getPartParserSession();
        }
 
        
//------------------------------------------------------------------------------------------------------------------
@@ -238,7 +237,7 @@ public final class RestResponse implements HttpResponse {
                try {
                        Class<T> c = 
(Class<T>)rbm.getClassMeta().getInnerClass();
                        final RestClient rc = this.client;
-                       final HttpPartParser p = 
ObjectUtils.firstNonNull(partParser, rc.getPartParser());
+                       final HttpPartParserSession p = partParser == null ? 
rc.getPartParserSession() : partParser;
                        return (T)Proxy.newProxyInstance(
                                c.getClassLoader(),
                                new Class[] { c },
@@ -247,7 +246,7 @@ public final class RestResponse implements HttpResponse {
                                        public Object invoke(Object proxy, 
Method method, Object[] args) throws Throwable {
                                                ResponseBeanPropertyMeta pm = 
rbm.getProperty(method.getName());
                                                if (pm != null) {
-                                                       HttpPartParser pp = 
pm.getParser(p);
+                                                       HttpPartParserSession 
pp = pm.getParser(p);
                                                        HttpPartSchema schema = 
pm.getSchema();
                                                        String name = 
pm.getPartName();
                                                        ClassMeta<?> type = 
rc.getClassMeta(method.getGenericReturnType());
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
index ce03208..0023f46 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseHeader.java
@@ -61,7 +61,7 @@ public class RestResponseHeader implements Header {
        private final Header header;
        private final RestRequest request;
        private final RestResponse response;
-       private HttpPartParser parser;
+       private HttpPartParserSession parser;
        private HttpPartSchema schema;
 
        /**
@@ -108,8 +108,8 @@ public class RestResponseHeader implements Header {
         *      <br>If <jk>null</jk>, {@link SimplePartParser#DEFAULT} will be 
used.
         * @return This object (for method chaining).
         */
-       public RestResponseHeader parser(HttpPartParser value) {
-               this.parser = value == null ? SimplePartParser.DEFAULT : value;
+       public RestResponseHeader parser(HttpPartParserSession value) {
+               this.parser = value == null ? SimplePartParser.DEFAULT_SESSION 
: value;
                return this;
        }
 
@@ -241,7 +241,7 @@ public class RestResponseHeader implements Header {
         */
        public <T> T as(ClassMeta<T> type) throws RestCallException {
                try {
-                       return parser.createPartSession(null).parse(HEADER, 
schema, asString(), type);
+                       return parser.parse(HEADER, schema, asString(), type);
                } catch (ParseException e) {
                        throw new RestCallException(e);
                }
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/NameValuePairs.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/NameValuePairs.java
index 43d8976..dcfa825 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/NameValuePairs.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/NameValuePairs.java
@@ -181,7 +181,7 @@ public final class NameValuePairs extends 
LinkedList<NameValuePair> {
         * @param skipIfEmpty If value is a blank string, the value should 
return as <jk>null</jk>.
         * @return This object (for method chaining).
         */
-       public NameValuePairs append(String name, Object value, HttpPartType 
partType, HttpPartSerializer serializer, HttpPartSchema schema, boolean 
skipIfEmpty) {
+       public NameValuePairs append(String name, Object value, HttpPartType 
partType, HttpPartSerializerSession serializer, HttpPartSchema schema, boolean 
skipIfEmpty) {
                super.add(new SerializedNameValuePair(name, value, partType, 
serializer, schema, skipIfEmpty));
                return this;
        }
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedHeader.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedHeader.java
index 8cdd634..b6b62d3 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedHeader.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedHeader.java
@@ -38,7 +38,7 @@ public final class SerializedHeader extends BasicHeader {
        private static final long serialVersionUID = 1L;
 
        private Object value;
-       private HttpPartSerializer serializer;
+       private HttpPartSerializerSession serializer;
        private HttpPartSchema schema;
        private boolean skipIfEmpty;
 
@@ -65,7 +65,7 @@ public final class SerializedHeader extends BasicHeader {
         *      <br>Only used if serializer is schema-aware (e.g. {@link 
OpenApiSerializer}).
         * @param skipIfEmpty If value is a blank string, the value should 
return as <jk>null</jk>.
         */
-       public SerializedHeader(String name, Object value, HttpPartSerializer 
serializer, HttpPartSchema schema, boolean skipIfEmpty) {
+       public SerializedHeader(String name, Object value, 
HttpPartSerializerSession serializer, HttpPartSchema schema, boolean 
skipIfEmpty) {
                super(name, null);
                this.value = value;
                this.serializer = serializer;
@@ -86,7 +86,7 @@ public final class SerializedHeader extends BasicHeader {
        public static class Builder {
                String name;
                Object value;
-               HttpPartSerializer serializer;
+               HttpPartSerializerSession serializer;
                HttpPartSchema schema;
 
                /**
@@ -117,7 +117,7 @@ public final class SerializedHeader extends BasicHeader {
                 * @param value The new value for this property.
                 * @return This object (for method chaining).
                 */
-               public Builder serializer(HttpPartSerializer value) {
+               public Builder serializer(HttpPartSerializerSession value) {
                        return serializer(value, true);
                }
 
@@ -128,7 +128,7 @@ public final class SerializedHeader extends BasicHeader {
                 * @param overwrite If <jk>true</jk>, overwrites the existing 
value if the old value is <jk>null</jk>.
                 * @return This object (for method chaining).
                 */
-               public Builder serializer(HttpPartSerializer value, boolean 
overwrite) {
+               public Builder serializer(HttpPartSerializerSession value, 
boolean overwrite) {
                        if (overwrite || serializer == null)
                                this.serializer = value;
                        return this;
@@ -166,7 +166,7 @@ public final class SerializedHeader extends BasicHeader {
                        }
                        if (isEmpty(value) && skipIfEmpty && 
schema.getDefault() == null)
                                return null;
-                       return 
serializer.createPartSession(null).serialize(HttpPartType.HEADER, schema, 
value);
+                       return serializer.serialize(HttpPartType.HEADER, 
schema, value);
                } catch (SchemaValidationException e) {
                        throw new FormattedRuntimeException(e, "Validation 
error on request {0} parameter ''{1}''=''{2}''", HttpPartType.HEADER, 
getName(), value);
                } catch (SerializeException e) {
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedNameValuePair.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedNameValuePair.java
index 5b5b044..039ac00 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedNameValuePair.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedNameValuePair.java
@@ -37,7 +37,7 @@ public final class SerializedNameValuePair implements 
NameValuePair {
        private String name;
        private Object value;
        private HttpPartType type;
-       private HttpPartSerializer serializer;
+       private HttpPartSerializerSession serializer;
        private HttpPartSchema schema;
        private boolean skipIfEmpty;
 
@@ -65,7 +65,7 @@ public final class SerializedNameValuePair implements 
NameValuePair {
         *      <br>Only used if serializer is schema-aware (e.g. {@link 
OpenApiSerializer}).
         * @param skipIfEmpty If value is a blank string, the value should 
return as <jk>null</jk>.
         */
-       public SerializedNameValuePair(String name, Object value, HttpPartType 
type, HttpPartSerializer serializer, HttpPartSchema schema, boolean 
skipIfEmpty) {
+       public SerializedNameValuePair(String name, Object value, HttpPartType 
type, HttpPartSerializerSession serializer, HttpPartSchema schema, boolean 
skipIfEmpty) {
                this.name = name;
                this.value = value;
                this.type = type;
@@ -89,7 +89,7 @@ public final class SerializedNameValuePair implements 
NameValuePair {
                String name;
                Object value;
                HttpPartType type;
-               HttpPartSerializer serializer;
+               HttpPartSerializerSession serializer;
                HttpPartSchema schema;
 
                /**
@@ -132,6 +132,18 @@ public final class SerializedNameValuePair implements 
NameValuePair {
                 * @return This object (for method chaining).
                 */
                public Builder serializer(HttpPartSerializer value) {
+                       if (value != null)
+                               return 
serializer(value.createPartSession(null));
+                       return this;
+               }
+
+               /**
+                * Sets the serializer to use for serializing the value to a 
string value.
+                *
+                * @param value The new value for this property.
+                * @return This object (for method chaining).
+                */
+               public Builder serializer(HttpPartSerializerSession value) {
                        return serializer(value, true);
                }
 
@@ -142,7 +154,7 @@ public final class SerializedNameValuePair implements 
NameValuePair {
                 * @param overwrite If <jk>true</jk>, overwrites the existing 
value if the old value is <jk>null</jk>.
                 * @return This object (for method chaining).
                 */
-               public Builder serializer(HttpPartSerializer value, boolean 
overwrite) {
+               public Builder serializer(HttpPartSerializerSession value, 
boolean overwrite) {
                        if (overwrite || serializer == null)
                                this.serializer = value;
                        return this;
@@ -185,7 +197,7 @@ public final class SerializedNameValuePair implements 
NameValuePair {
                        }
                        if (isEmpty(value) && skipIfEmpty && 
schema.getDefault() == null)
                                return null;
-                       return 
serializer.createPartSession(null).serialize(type, schema, value);
+                       return serializer.serialize(type, schema, value);
                } catch (SchemaValidationException e) {
                        throw new FormattedRuntimeException(e, "Validation 
error on request {0} parameter ''{1}''=''{2}''", type, name, value);
                } catch (SerializeException e) {
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormData.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormData.java
index 59bdd3e..3fef82e 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormData.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestFormData.java
@@ -58,9 +58,9 @@ public class RequestFormData extends 
LinkedHashMap<String,String[]> {
        private static final long serialVersionUID = 1L;
 
        private final RestRequest req;
-       private final HttpPartParser parser;
+       private final HttpPartParserSession parser;
 
-       RequestFormData(RestRequest req, HttpPartParser parser) {
+       RequestFormData(RestRequest req, HttpPartParserSession parser) {
                this.req = req;
                this.parser = parser;
        }
@@ -263,7 +263,7 @@ public class RequestFormData extends 
LinkedHashMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, Class<T> type) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, Class<T> type) throws BadRequest, InternalServerError {
                return getInner(parser, schema, name, null, getClassMeta(type));
        }
 
@@ -301,7 +301,7 @@ public class RequestFormData extends 
LinkedHashMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, T def, Class<T> type) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, T def, Class<T> type) throws BadRequest, InternalServerError {
                return getInner(parser, schema, name, def, getClassMeta(type));
        }
 
@@ -342,7 +342,7 @@ public class RequestFormData extends 
LinkedHashMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T getAll(HttpPartParser parser, HttpPartSchema schema, 
String name, Class<T> type) throws BadRequest, InternalServerError {
+       public <T> T getAll(HttpPartParserSession parser, HttpPartSchema 
schema, String name, Class<T> type) throws BadRequest, InternalServerError {
                return getAllInner(parser, schema, name, null, 
getClassMeta(type));
        }
 
@@ -417,7 +417,7 @@ public class RequestFormData extends 
LinkedHashMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, Type type, Type...args) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, Type type, Type...args) throws BadRequest, InternalServerError {
                return getInner(parser, schema, name, null, 
this.<T>getClassMeta(type, args));
        }
 
@@ -467,7 +467,7 @@ public class RequestFormData extends 
LinkedHashMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, T def, Type type, Type...args) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, T def, Type type, Type...args) throws BadRequest, 
InternalServerError {
                return getInner(parser, schema, name, def, 
this.<T>getClassMeta(type, args));
        }
 
@@ -517,12 +517,12 @@ public class RequestFormData extends 
LinkedHashMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T getAll(HttpPartParser parser, HttpPartSchema schema, 
String name, Type type, Type...args) throws BadRequest, InternalServerError {
+       public <T> T getAll(HttpPartParserSession parser, HttpPartSchema 
schema, String name, Type type, Type...args) throws BadRequest, 
InternalServerError {
                return getAllInner(parser, schema, name, null, 
this.<T>getClassMeta(type, args));
        }
 
        /* Workhorse method */
-       private <T> T getInner(HttpPartParser parser, HttpPartSchema schema, 
String name, T def, ClassMeta<T> cm) throws BadRequest, InternalServerError {
+       private <T> T getInner(HttpPartParserSession parser, HttpPartSchema 
schema, String name, T def, ClassMeta<T> cm) throws BadRequest, 
InternalServerError {
                try {
                        if (cm.isMapOrBean() && isOneOf(name, "*", "")) {
                                OMap m = new OMap();
@@ -550,7 +550,7 @@ public class RequestFormData extends 
LinkedHashMap<String,String[]> {
 
        /* Workhorse method */
        @SuppressWarnings("rawtypes")
-       <T> T getAllInner(HttpPartParser parser, HttpPartSchema schema, String 
name, T def, ClassMeta<T> cm) throws BadRequest, InternalServerError {
+       <T> T getAllInner(HttpPartParserSession parser, HttpPartSchema schema, 
String name, T def, ClassMeta<T> cm) throws BadRequest, InternalServerError {
                String[] p = get(name);
                if (p == null)
                        return def;
@@ -578,10 +578,10 @@ public class RequestFormData extends 
LinkedHashMap<String,String[]> {
                throw new InternalServerError("Invalid call to 
getParameters(String, ClassMeta).  Class type must be a Collection or array.");
        }
 
-       private <T> T parse(HttpPartParser parser, HttpPartSchema schema, 
String val, ClassMeta<T> c) throws SchemaValidationException, ParseException {
+       private <T> T parse(HttpPartParserSession parser, HttpPartSchema 
schema, String val, ClassMeta<T> c) throws SchemaValidationException, 
ParseException {
                if (parser == null)
                        parser = this.parser;
-               return 
parser.createPartSession(req.getParserSessionArgs()).parse(HttpPartType.FORMDATA,
 schema, val, c);
+               return parser.parse(HttpPartType.FORMDATA, schema, val, c);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
index f6400b0..68e8577 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestHeaders.java
@@ -43,7 +43,7 @@ public class RequestHeaders extends TreeMap<String,String[]> {
        private static final long serialVersionUID = 1L;
 
        private final RestRequest req;
-       private HttpPartParser parser;
+       private HttpPartParserSession parser;
        private RequestQuery queryParams;
        private Set<String> allowedQueryParams;
 
@@ -52,7 +52,7 @@ public class RequestHeaders extends TreeMap<String,String[]> {
                this.req = req;
        }
 
-       RequestHeaders parser(HttpPartParser parser) {
+       RequestHeaders parser(HttpPartParserSession parser) {
                this.parser = parser;
                return this;
        }
@@ -271,7 +271,7 @@ public class RequestHeaders extends 
TreeMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, Class<T> type) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, Class<T> type) throws BadRequest, InternalServerError {
                return getInner(parser, schema, name, null, getClassMeta(type));
        }
 
@@ -309,7 +309,7 @@ public class RequestHeaders extends 
TreeMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, T def, Class<T> type) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, T def, Class<T> type) throws BadRequest, InternalServerError {
                return getInner(parser, schema, name, def, getClassMeta(type));
        }
 
@@ -380,12 +380,12 @@ public class RequestHeaders extends 
TreeMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, Type type, Type...args) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, Type type, Type...args) throws BadRequest, InternalServerError {
                return getInner(parser, schema, name, null, 
this.<T>getClassMeta(type, args));
        }
 
        /* Workhorse method */
-       private <T> T getInner(HttpPartParser parser, HttpPartSchema schema, 
String name, T def, ClassMeta<T> cm) throws BadRequest, InternalServerError {
+       private <T> T getInner(HttpPartParserSession parser, HttpPartSchema 
schema, String name, T def, ClassMeta<T> cm) throws BadRequest, 
InternalServerError {
                try {
                        if (cm.isMapOrBean() && isOneOf(name, "*", "")) {
                                OMap m = new OMap();
@@ -409,10 +409,10 @@ public class RequestHeaders extends 
TreeMap<String,String[]> {
        }
 
        /* Workhorse method */
-       private <T> T parse(HttpPartParser parser, HttpPartSchema schema, 
String val, ClassMeta<T> cm) throws SchemaValidationException, ParseException {
+       private <T> T parse(HttpPartParserSession parser, HttpPartSchema 
schema, String val, ClassMeta<T> cm) throws SchemaValidationException, 
ParseException {
                if (parser == null)
                        parser = this.parser;
-               return 
parser.createPartSession(req.getParserSessionArgs()).parse(HttpPartType.HEADER, 
schema, val, cm);
+               return parser.parse(HttpPartType.HEADER, schema, val, cm);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPath.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPath.java
index b22ab91..1ce2c9d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPath.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestPath.java
@@ -45,7 +45,7 @@ public class RequestPath extends TreeMap<String,String> {
        static final String REST_PATHVARS_ATTR = "juneau.pathVars";
 
        private final RestRequest req;
-       private HttpPartParser parser;
+       private HttpPartParserSession parser;
 
        RequestPath(RestRequest req) {
                super(String.CASE_INSENSITIVE_ORDER);
@@ -57,7 +57,7 @@ public class RequestPath extends TreeMap<String,String> {
                                put(e.getKey(), e.getValue());
        }
 
-       RequestPath parser(HttpPartParser parser) {
+       RequestPath parser(HttpPartParserSession parser) {
                this.parser = parser;
                return this;
        }
@@ -168,7 +168,7 @@ public class RequestPath extends TreeMap<String,String> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, Class<T> type) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, Class<T> type) throws BadRequest, InternalServerError {
                return getInner(parser, schema, name, null, 
this.<T>getClassMeta(type));
        }
 
@@ -248,12 +248,12 @@ public class RequestPath extends TreeMap<String,String> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, Type type, Type...args) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, Type type, Type...args) throws BadRequest, InternalServerError {
                return getInner(parser, schema, name, null, 
this.<T>getClassMeta(type, args));
        }
 
        /* Workhorse method */
-       private <T> T getInner(HttpPartParser parser, HttpPartSchema schema, 
String name, T def, ClassMeta<T> cm) throws BadRequest, InternalServerError {
+       private <T> T getInner(HttpPartParserSession parser, HttpPartSchema 
schema, String name, T def, ClassMeta<T> cm) throws BadRequest, 
InternalServerError {
                try {
                        if (cm.isMapOrBean() && isOneOf(name, "*", "")) {
                                OMap m = new OMap();
@@ -277,10 +277,10 @@ public class RequestPath extends TreeMap<String,String> {
        }
 
        /* Workhorse method */
-       private <T> T parse(HttpPartParser parser, HttpPartSchema schema, 
String val, ClassMeta<T> cm) throws SchemaValidationException, ParseException {
+       private <T> T parse(HttpPartParserSession parser, HttpPartSchema 
schema, String val, ClassMeta<T> cm) throws SchemaValidationException, 
ParseException {
                if (parser == null)
                        parser = this.parser;
-               return 
parser.createPartSession(req.getParserSessionArgs()).parse(HttpPartType.PATH, 
schema, val, cm);
+               return parser.parse(HttpPartType.PATH, schema, val, cm);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQuery.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQuery.java
index 5f2c75c..5ade3a8 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQuery.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RequestQuery.java
@@ -47,13 +47,13 @@ public final class RequestQuery extends 
LinkedHashMap<String,String[]> {
        private static final long serialVersionUID = 1L;
 
        private final RestRequest req;
-       private HttpPartParser parser;
+       private HttpPartParserSession parser;
 
        RequestQuery(RestRequest req) {
                this.req = req;
        }
 
-       RequestQuery parser(HttpPartParser parser) {
+       RequestQuery parser(HttpPartParserSession parser) {
                this.parser = parser;
                return this;
        }
@@ -298,7 +298,7 @@ public final class RequestQuery extends 
LinkedHashMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, Class<T> type) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, Class<T> type) throws BadRequest, InternalServerError {
                return getInner(parser, schema, name, null, getClassMeta(type));
        }
 
@@ -336,7 +336,7 @@ public final class RequestQuery extends 
LinkedHashMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, T def, Class<T> type) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, T def, Class<T> type) throws BadRequest, InternalServerError {
                return getInner(parser, schema, name, def, getClassMeta(type));
        }
 
@@ -413,7 +413,7 @@ public final class RequestQuery extends 
LinkedHashMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, Type type, Type...args) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, Type type, Type...args) throws BadRequest, InternalServerError {
                return getInner(parser, schema, name, null, 
(ClassMeta<T>)getClassMeta(type, args));
        }
 
@@ -463,7 +463,7 @@ public final class RequestQuery extends 
LinkedHashMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T get(HttpPartParser parser, HttpPartSchema schema, String 
name, T def, Type type, Type...args) throws BadRequest, InternalServerError {
+       public <T> T get(HttpPartParserSession parser, HttpPartSchema schema, 
String name, T def, Type type, Type...args) throws BadRequest, 
InternalServerError {
                return getInner(parser, schema, name, def, 
(ClassMeta<T>)getClassMeta(type, args));
        }
 
@@ -533,7 +533,7 @@ public final class RequestQuery extends 
LinkedHashMap<String,String[]> {
         * @throws BadRequest Thrown if input could not be parsed or fails 
schema validation.
         * @throws InternalServerError Thrown if any other exception occurs.
         */
-       public <T> T getAll(HttpPartParser parser, HttpPartSchema schema, 
String name, Type type, Type...args) throws BadRequest, InternalServerError {
+       public <T> T getAll(HttpPartParserSession parser, HttpPartSchema 
schema, String name, Type type, Type...args) throws BadRequest, 
InternalServerError {
                return getAllInner(parser, schema, name, null, 
(ClassMeta<T>)getClassMeta(type, args));
        }
 
@@ -615,7 +615,7 @@ public final class RequestQuery extends 
LinkedHashMap<String,String[]> {
        }
 
        /* Workhorse method */
-       private <T> T getInner(HttpPartParser parser, HttpPartSchema schema, 
String name, T def, ClassMeta<T> cm) throws BadRequest, InternalServerError {
+       private <T> T getInner(HttpPartParserSession parser, HttpPartSchema 
schema, String name, T def, ClassMeta<T> cm) throws BadRequest, 
InternalServerError {
                try {
                        if (cm.isMapOrBean() && isOneOf(name, "*", "")) {
                                OMap m = new OMap();
@@ -643,7 +643,7 @@ public final class RequestQuery extends 
LinkedHashMap<String,String[]> {
 
        /* Workhorse method */
        @SuppressWarnings("rawtypes")
-       private <T> T getAllInner(HttpPartParser parser, HttpPartSchema schema, 
String name, T def, ClassMeta<T> cm) throws BadRequest, InternalServerError {
+       private <T> T getAllInner(HttpPartParserSession parser, HttpPartSchema 
schema, String name, T def, ClassMeta<T> cm) throws BadRequest, 
InternalServerError {
                String[] p = get(name);
                if (p == null)
                        return def;
@@ -671,10 +671,10 @@ public final class RequestQuery extends 
LinkedHashMap<String,String[]> {
                throw new InternalServerError("Invalid call to 
getParameters(String, ClassMeta).  Class type must be a Collection or array.");
        }
 
-       private <T> T parse(HttpPartParser parser, HttpPartSchema schema, 
String val, ClassMeta<T> c) throws SchemaValidationException, ParseException {
+       private <T> T parse(HttpPartParserSession parser, HttpPartSchema 
schema, String val, ClassMeta<T> c) throws SchemaValidationException, 
ParseException {
                if (parser == null)
                        parser = this.parser;
-               return 
parser.createPartSession(req.getParserSessionArgs()).parse(HttpPartType.QUERY, 
schema, val, c);
+               return parser.parse(HttpPartType.QUERY, schema, val, c);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
index 4fe4c9e..43ed079 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestParamDefaults.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest;
 
-import static org.apache.juneau.internal.ObjectUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.rest.RestParamType.*;
 
@@ -237,7 +236,8 @@ class RestParamDefaults {
 
                @Override /* RestMethodParam */
                public Object resolve(RestRequest req, RestResponse res) throws 
Exception {
-                       return req.getPathMatch().get(partParser, schema, name, 
type);
+                       HttpPartParserSession ps = partParser == null ? 
req.getPartParser() : partParser.createPartSession(req.getParserSessionArgs());
+                       return req.getPathMatch().get(ps, schema, name, type);
                }
        }
 
@@ -280,7 +280,8 @@ class RestParamDefaults {
 
                @Override /* RestMethodParam */
                public Object resolve(RestRequest req, RestResponse res) throws 
Exception {
-                       return req.getHeaders().get(partParser, schema, name, 
type);
+                       HttpPartParserSession ps = partParser == null ? 
req.getPartParser() : partParser.createPartSession(req.getParserSessionArgs());
+                       return req.getHeaders().get(ps, schema, name, type);
                }
        }
 
@@ -359,7 +360,8 @@ class RestParamDefaults {
                                                ResponsePartMeta rpm = 
req.getResponseHeaderMeta(o);
                                                if (rpm == null)
                                                        rpm = 
ResponseHeaderObject.this.meta;
-                                               res.setHeader(new 
HttpPart(name, HttpPartType.HEADER, rpm.getSchema(), 
firstNonNull(rpm.getSerializer(), req.getPartSerializer()), 
req.getSerializerSessionArgs(), o));
+                                               HttpPartSerializerSession pss = 
rpm.getSerializer() == null ? req.getPartSerializer() : 
rpm.getSerializer().createPartSession(req.getSerializerSessionArgs());
+                                               res.setHeader(new 
HttpPart(name, HttpPartType.HEADER, rpm.getSchema(), pss, o));
                                        } catch (SerializeException | 
SchemaValidationException e) {
                                                throw new RuntimeException(e);
                                        }
@@ -463,9 +465,10 @@ class RestParamDefaults {
 
                @Override /* RestMethodParam */
                public Object resolve(RestRequest req, RestResponse res) throws 
Exception {
+                       HttpPartParserSession ps = partParser == null ? 
req.getPartParser() : partParser.createPartSession(req.getParserSessionArgs());
                        if (multiPart)
-                               return req.getFormData().getAll(partParser, 
schema, name, type);
-                       return req.getFormData().get(partParser, schema, name, 
type);
+                               return req.getFormData().getAll(ps, schema, 
name, type);
+                       return req.getFormData().get(ps, schema, name, type);
                }
        }
 
@@ -499,9 +502,10 @@ class RestParamDefaults {
 
                @Override /* RestMethodParam */
                public Object resolve(RestRequest req, RestResponse res) throws 
Exception {
+                       HttpPartParserSession ps = partParser == null ? 
req.getPartParser() : partParser.createPartSession(req.getParserSessionArgs());
                        if (multiPart)
-                               return req.getQuery().getAll(partParser, 
schema, name, type);
-                       return req.getQuery().get(partParser, schema, name, 
type);
+                               return req.getQuery().getAll(ps, schema, name, 
type);
+                       return req.getQuery().get(ps, schema, name, type);
                }
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index f9f652c..18e5574 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -117,6 +117,8 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
        private SerializerSessionArgs serializerSessionArgs;
        private ParserSessionArgs parserSessionArgs;
        private RestResponse res;
+       private HttpPartSerializerSession partSerializerSession;
+       private HttpPartParserSession partParserSession;
 
        /**
         * Constructor.
@@ -192,15 +194,17 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
                this.javaMethod = rjm.method;
                this.properties = properties;
                this.beanSession = rjm.createSession();
+               this.partParserSession = 
rjm.partParser.createPartSession(getParserSessionArgs());
+               this.partSerializerSession = 
rjm.partSerializer.createPartSession(getSerializerSessionArgs());
                this.pathParams
-                       .parser(rjm.partParser);
+                       .parser(partParserSession);
                this.queryParams
                        .addDefault(rjm.defaultQuery)
-                       .parser(rjm.partParser);
+                       .parser(partParserSession);
                this.headers
                        .addDefault(rjm.reqHeaders)
                        .addDefault(context.getReqHeaders())
-                       .parser(rjm.partParser);
+                       .parser(partParserSession);
                this.attrs = new RequestAttributes(this, rjm.reqAttrs);
                this.body
                        .encoders(rjm.encoders)
@@ -659,7 +663,7 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
        public RequestFormData getFormData() throws InternalServerError {
                try {
                        if (formData == null) {
-                               formData = new RequestFormData(this, 
restJavaMethod == null ? OpenApiParser.DEFAULT : restJavaMethod.partParser);
+                               formData = new RequestFormData(this, 
getPartParser());
                                if (! body.isLoaded()) {
                                        formData.putAll(getParameterMap());
                                } else {
@@ -1156,8 +1160,8 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
         *
         * @return The part serializer associated with this request.
         */
-       public HttpPartParser getPartParser() {
-               return restJavaMethod == null ? OpenApiParser.DEFAULT : 
restJavaMethod.partParser;
+       public HttpPartParserSession getPartParser() {
+               return partParserSession == null ? 
OpenApiParser.DEFAULT.createPartSession(null) : partParserSession;
        }
 
        /**
@@ -1165,8 +1169,8 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
         *
         * @return The part serializer associated with this request.
         */
-       public HttpPartSerializer getPartSerializer() {
-               return restJavaMethod == null ? OpenApiSerializer.DEFAULT : 
restJavaMethod.partSerializer;
+       public HttpPartSerializerSession getPartSerializer() {
+               return partSerializerSession == null ? 
OpenApiSerializer.DEFAULT.createPartSession(null) : partSerializerSession;
        }
 
        /**
@@ -1656,7 +1660,7 @@ public final class RestRequest extends 
HttpServletRequestWrapper {
                                        public Object invoke(Object proxy, 
Method method, Object[] args) throws Throwable {
                                                RequestBeanPropertyMeta pm = 
rbm.getProperty(method.getName());
                                                if (pm != null) {
-                                                       HttpPartParser pp = 
pm.getParser(getPartParser());
+                                                       HttpPartParserSession 
pp = pm.getParser(getPartParser());
                                                        HttpPartSchema schema = 
pm.getSchema();
                                                        String name = 
pm.getPartName();
                                                        ClassMeta<?> type = 
getContext().getClassMeta(method.getGenericReturnType());
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/reshandlers/DefaultHandler.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/reshandlers/DefaultHandler.java
index d0f6690..e924609 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/reshandlers/DefaultHandler.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/reshandlers/DefaultHandler.java
@@ -92,10 +92,10 @@ public class DefaultHandler implements ResponseHandler {
                                                        String k = 
stringify(key);
                                                        Object v = m.get(key);
                                                        HttpPartSchema s = 
hm.getSchema().getProperty(k);
-                                                       res.setHeader(new 
HttpPart(k, RESPONSE_HEADER, s, hm.getSerializer(req.getPartSerializer()), 
req.getSerializerSessionArgs(), v));
+                                                       res.setHeader(new 
HttpPart(k, RESPONSE_HEADER, s, hm.getSerializer(req.getPartSerializer()), v));
                                                }
                                        } else {
-                                               res.setHeader(new HttpPart(n, 
RESPONSE_HEADER, hm.getSchema(), hm.getSerializer(req.getPartSerializer()), 
req.getSerializerSessionArgs(), ho));
+                                               res.setHeader(new HttpPart(n, 
RESPONSE_HEADER, hm.getSchema(), hm.getSerializer(req.getPartSerializer()), 
ho));
                                        }
                                } catch (Exception e) {
                                        throw new InternalServerError(e, "Could 
not set header ''{0}''", hm.getPartName());

Reply via email to