You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2020/04/02 23:05:21 UTC
[juneau] branch master updated: Move to using part parser sessions
for efficiency.
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 <ja...@apache.org>
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>AddFlag>,String,Object)}
- * <li class='jm'>{@link RestRequest#header(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema) header(EnumSet>AddFlag>,String,Object,HttpPartSerializer,HttpPartSchema)}
+ * <li class='jm'>{@link RestRequest#header(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema) header(EnumSet>AddFlag>,String,Object,HttpPartSerializer,HttpPartSchema)}
* <li class='jm'>{@link RestRequest#header(Object) header(Object)}
* <li class='jm'>{@link RestRequest#header(EnumSet,Object) header(EnumSet>AddFlag>,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<AddFlag>,String,Object)}
- * <li class='jm'>{@link RestRequest#query(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema) query(EnumSet<AddFlag>,String,Object,HttpPartSerializer,HttpPartSchema)}
+ * <li class='jm'>{@link RestRequest#query(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema) query(EnumSet<AddFlag>,String,Object,HttpPartSerializerSession,HttpPartSchema)}
* <li class='jm'>{@link RestRequest#query(Object...) query(Object...)}
* <li class='jm'>{@link RestRequest#query(EnumSet,Object...) query(EnumSet<AddFlag>,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<AddFlag>,String,Object)}
- * <li class='jm'>{@link RestRequest#formData(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema) formData(EnumSet<AddFlag>,String,Object,HttpPartSerializer,HttpPartSchema)}
+ * <li class='jm'>{@link RestRequest#formData(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema) formData(EnumSet<AddFlag>,String,Object,HttpPartSerializerSession,HttpPartSchema)}
* <li class='jm'>{@link RestRequest#formData(Object...) formData(Object...)}
* <li class='jm'>{@link RestRequest#formData(EnumSet,Object...) formData(EnumSet<AddFlag>,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<AddFlag>,String,Object)}
- * <li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#formData(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema) formData(EnumSet<AddFlag>,String,Object,HttpPartSerializer,HttpPartSchema)}
+ * <li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#formData(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema) formData(EnumSet<AddFlag>,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<AddFlag>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>AddFlag>,String,Object)}
- * <li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#header(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema) header(EnumSet>AddFlag>,String,Object,HttpPartSerializer,HttpPartSchema)}
+ * <li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#header(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema) header(EnumSet>AddFlag>,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>AddFlag>,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<AddFlag>,String,Object)}
- * <li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#query(EnumSet,String,Object,HttpPartSerializer,HttpPartSchema) query(EnumSet<AddFlag>,String,Object,HttpPartSerializer,HttpPartSchema)}
+ * <li class='jm'>{@link org.apache.juneau.rest.client2.RestRequest#query(EnumSet,String,Object,HttpPartSerializerSession,HttpPartSchema) query(EnumSet<AddFlag>,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<AddFlag>,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());