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 d8ec44c Context API refactoring.
d8ec44c is described below
commit d8ec44c1666fd4ccc86897643df3f4e859e56a29
Author: JamesBognar <[email protected]>
AuthorDate: Sat Aug 28 19:15:36 2021 -0400
Context API refactoring.
---
.../java/org/apache/juneau/rest/RestContext.java | 143 +----------------
.../org/apache/juneau/rest/RestContextBuilder.java | 171 +++++++++------------
.../java/org/apache/juneau/rest/RestOpContext.java | 4 +-
.../apache/juneau/rest/RestOpContextBuilder.java | 69 +++++++++
.../org/apache/juneau/rest/annotation/Rest.java | 5 +-
.../juneau/rest/annotation/RestAnnotation.java | 9 +-
.../org/apache/juneau/rest/annotation/RestGet.java | 3 +-
.../juneau/rest/annotation/RestGetAnnotation.java | 3 +-
.../org/apache/juneau/rest/annotation/RestOp.java | 5 +-
.../juneau/rest/annotation/RestOpAnnotation.java | 5 +-
.../apache/juneau/rest/annotation/RestPost.java | 5 +-
.../juneau/rest/annotation/RestPostAnnotation.java | 5 +-
.../org/apache/juneau/rest/annotation/RestPut.java | 5 +-
.../juneau/rest/annotation/RestPutAnnotation.java | 5 +-
14 files changed, 176 insertions(+), 261 deletions(-)
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 9de62f4..44cb212 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -383,70 +383,6 @@ public class RestContext extends BeanContext {
public static final String REST_children = PREFIX + ".children.lo";
/**
- * Configuration property: Supported content media types.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.rest.RestContext#REST_consumes REST_consumes}
- * <li><b>Name:</b> <js>"RestContext.consumes.ls"</js>
- * <li><b>Data type:</b> <c>List<String></c>
- * <li><b>System property:</b> <c>RestContext.consumes</c>
- * <li><b>Environment variable:</b> <c>RESTCONTEXT_CONSUMES</c>
- * <li><b>Default:</b> empty list
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.rest.annotation.Rest#consumes()}
- * <li class='ja'>{@link
org.apache.juneau.rest.annotation.RestOp#consumes()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#consumes(String...)}
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#consumes(MediaType...)}
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#consumesReplace(String...)}
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#consumesReplace(MediaType...)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * Overrides the media types inferred from the parsers that identify
what media types can be consumed by the resource.
- * <br>An example where this might be useful if you have parsers
registered that handle media types that you
- * don't want exposed in the Swagger documentation.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Option #1 - Defined via annotation resolving to a config
file setting with default value.</jc>
- *
<ja>@Rest</ja>(consumes={<js>"$C{REST/supportedConsumes,application/json}"</js>})
- * <jk>public class</jk> MyResource {
- *
- * <jc>// Option #2 - Defined via builder passed in
through resource constructor.</jc>
- * <jk>public</jk> MyResource(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
- *
- * <jc>// Using method on builder.</jc>
- * <jv>builder</jv>.consumes(<jk>false</jk>,
<js>"application/json"</js>)
- *
- * <jc>// Same, but using property.</jc>
- * <jv>builder</jv>.set(<jsf>REST_consumes</jsf>,
<js>"application/json"</js>);
- * }
- *
- * <jc>// Option #3 - Defined via builder passed in
through init method.</jc>
- * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
- * <jk>public void</jk> init(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
- * <jv>builder</jv>.consumes(<jk>false</jk>,
<js>"application/json"</js>);
- * }
- * }
- * </p>
- *
- * <p>
- * This affects the returned values from the following:
- * <ul class='javatree'>
- * <li class='jm'>{@link RestContext#getConsumes()
RestContext.getConsumes()}
- * </ul>
- */
- public static final String REST_consumes = PREFIX + ".consumes.ls";
-
- /**
* Configuration property: REST context class.
*
* <h5 class='section'>Property:</h5>
@@ -1649,71 +1585,6 @@ public class RestContext extends BeanContext {
public static final String REST_partSerializer = PREFIX +
".partSerializer.o";
/**
- * Configuration property: Supported accept media types.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.rest.RestContext#REST_produces REST_produces}
- * <li><b>Name:</b> <js>"RestContext.produces.ls"</js>
- * <li><b>Data type:</b> <c>List<String></c>
- * <li><b>System property:</b> <c>RestContext.produces</c>
- * <li><b>Environment variable:</b> <c>RESTCONTEXT_PRODUCES</c>
- * <li><b>Default:</b> empty list
- * <li><b>Session property:</b> <jk>false</jk>
- * <li><b>Annotations:</b>
- * <ul>
- * <li class='ja'>{@link
org.apache.juneau.rest.annotation.Rest#produces()}
- * <li class='ja'>{@link
org.apache.juneau.rest.annotation.RestOp#produces()}
- * </ul>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#produces(String...)}
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#produces(MediaType...)}
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#producesReplace(String...)}
- * <li class='jm'>{@link
org.apache.juneau.rest.RestContextBuilder#producesReplace(MediaType...)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * Overrides the media types inferred from the serializers that
identify what media types can be produced by the resource.
- * <br>An example where this might be useful if you have serializers
registered that handle media types that you
- * don't want exposed in the Swagger documentation.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Option #1 - Defined via annotation resolving to a config
file setting with default value.</jc>
- *
<ja>@Rest</ja>(produces={<js>"$C{REST/supportedProduces,application/json}"</js>})
- * <jk>public class</jk> MyResource {
- *
- * <jc>// Option #2 - Defined via builder passed in
through resource constructor.</jc>
- * <jk>public</jk> MyResource(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
- *
- * <jc>// Using method on builder.</jc>
- * <jv>builder</jv>.produces(<jk>false</jk>,
<js>"application/json"</js>)
- *
- * <jc>// Same, but using property.</jc>
- * <jv>builder</jv>.set(<jsf>REST_produces</jsf>,
<js>"application/json"</js>);
- * }
- *
- * <jc>// Option #3 - Defined via builder passed in
through init method.</jc>
- * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
- * <jk>public void</jk> init(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
- * <jv>builder</jv>.produces(<jk>false</jk>,
<js>"application/json"</js>);
- * }
- * }
- * </p>
- *
- * <p>
- * This affects the returned values from the following:
- * <ul class='javatree'>
- * <li class='jm'>{@link RestContext#getProduces()
RestContext.getProduces()}
- * <li class='jm'>{@link
SwaggerProvider#getSwagger(RestContext,Locale)} - Affects produces field.
- * </ul>
- */
- public static final String REST_produces = PREFIX + ".produces.ls";
-
- /**
* Configuration property: Render response stack traces in responses.
*
* <h5 class='section'>Property:</h5>
@@ -2806,20 +2677,18 @@ public class RestContext extends BeanContext {
restOperations = createRestOperations(r, cp, bf);
- List<MediaType> _produces = cp.getList(REST_produces,
MediaType.class).orElse(null);
- List<MediaType> _consumes = cp.getList(REST_consumes,
MediaType.class).orElse(null);
List<RestOpContext> opContexts =
restOperations.getOpContexts();
- if (_produces != null)
- produces = AList.unmodifiable(_produces);
+ if (builder.produces != null)
+ produces = AList.unmodifiable(builder.produces);
else {
Set<MediaType> s = opContexts.isEmpty() ?
emptySet() : new
LinkedHashSet<>(opContexts.get(0).getSerializers().getSupportedMediaTypes());
opContexts.forEach(x ->
s.retainAll(x.getSerializers().getSupportedMediaTypes()));
produces = AList.unmodifiable(s);
}
- if (_consumes != null)
- consumes = AList.unmodifiable(_consumes);
+ if (builder.consumes != null)
+ consumes = AList.unmodifiable(builder.consumes);
else {
Set<MediaType> s = opContexts.isEmpty() ?
emptySet() : new
LinkedHashSet<>(opContexts.get(0).getParsers().getSupportedMediaTypes());
opContexts.forEach(x ->
s.retainAll(x.getParsers().getSupportedMediaTypes()));
@@ -5353,7 +5222,7 @@ public class RestContext extends BeanContext {
* Consists of the media types for production common to all operations
on this class.
*
* <p>
- * Can be overridden by {@link RestContext#REST_produces}.
+ * Can be overridden by {@link
RestContextBuilder#produces(MediaType...)}.
*
* @return
* An unmodifiable list of supported <c>Accept</c> header values
for this resource.
@@ -5370,7 +5239,7 @@ public class RestContext extends BeanContext {
* Consists of the media types for consumption common to all operations
on this class.
*
* <p>
- * Can be overridden by {@link RestContext#REST_consumes}.
+ * Can be overridden by {@link
RestContextBuilder#consumes(MediaType...)}.
*
* @return
* An unmodifiable list of supported <c>Content-Type</c> header
values for this resource.
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index cee0ab8..5843142 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -117,6 +117,7 @@ public class RestContextBuilder extends BeanContextBuilder
implements ServletCon
UriResolution uriResolution;
Charset defaultCharset;
long maxInput;
+ List<MediaType> consumes, produces;
RestContextBuilder(Optional<RestContext> parentContext,
Optional<ServletConfig> servletConfig, Class<?> resourceClass, Optional<Object>
resource) throws ServletException {
try {
@@ -2122,49 +2123,47 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
}
/**
- * <i><l>RestContext</l> configuration property: </i> Supported
accept media types.
+ * Supported accept media types.
*
* <p>
* Overrides the media types inferred from the serializers that
identify what media types can be produced by the resource.
+ * <br>An example where this might be useful if you have serializers
registered that handle media types that you
+ * don't want exposed in the Swagger documentation.
*
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_produces}
- * </ul>
- *
- * @param values The values to add to this setting.
- * @return This object (for method chaining).
- */
- @FluentSetter
- public RestContextBuilder produces(String...values) {
- return prependTo(REST_produces, values);
- }
-
- /**
- * <i><l>RestContext</l> configuration property: </i> Supported
accept media types.
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Option #1 - Defined via annotation resolving to a config
file setting with default value.</jc>
+ *
<ja>@Rest</ja>(produces={<js>"$C{REST/supportedProduces,application/json}"</js>})
+ * <jk>public class</jk> MyResource {
*
- * <p>
- * Same as {@link #produces(String...)} but replaces any previous
values.
+ * <jc>// Option #2 - Defined via builder passed in
through resource constructor.</jc>
+ * <jk>public</jk> MyResource(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
*
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_produces}
- * </ul>
+ * <jc>// Using method on builder.</jc>
+ * <jv>builder</jv>.produces(<jk>false</jk>,
<js>"application/json"</js>)
+ * }
*
- * @param values The values to set on this setting.
- * @return This object (for method chaining).
- */
- @FluentSetter
- public RestContextBuilder producesReplace(String...values) {
- return set(REST_produces, values);
- }
-
- /**
- * <i><l>RestContext</l> configuration property: </i> Supported
accept media types.
+ * <jc>// Option #3 - Defined via builder passed in
through init method.</jc>
+ * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+ * <jk>public void</jk> init(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
+ * <jv>builder</jv>.produces(<jk>false</jk>,
<js>"application/json"</js>);
+ * }
+ * }
+ * </p>
*
* <p>
- * Same as {@link #produces(String...)} except input is {@link
MediaType} instances.
+ * This affects the returned values from the following:
+ * <ul class='javatree'>
+ * <li class='jm'>{@link RestContext#getProduces()
RestContext.getProduces()}
+ * <li class='jm'>{@link
SwaggerProvider#getSwagger(RestContext,Locale)} - Affects produces field.
+ * </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_produces}
+ * <li class='ja'>{@link Rest#produces}
+ * <li class='ja'>{@link RestOp#produces}
+ * <li class='ja'>{@link RestGet#produces}
+ * <li class='ja'>{@link RestPut#produces}
+ * <li class='ja'>{@link RestPost#produces}
* </ul>
*
* @param values The values to add to this setting.
@@ -2172,71 +2171,53 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
*/
@FluentSetter
public RestContextBuilder produces(MediaType...values) {
- return prependTo(REST_produces, values);
- }
-
- /**
- * <i><l>RestContext</l> configuration property: </i> Supported
accept media types.
- *
- * <p>
- * Same as {@link #produces(MediaType...)} but replaces any previous
values.
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_produces}
- * </ul>
- *
- * @param values The values to set on this setting.
- * @return This object (for method chaining).
- */
- @FluentSetter
- public RestContextBuilder producesReplace(MediaType...values) {
- return set(REST_produces, values);
+ if (produces == null)
+ produces = new ArrayList<>(Arrays.asList(values));
+ else
+ produces.addAll(Arrays.asList(values));
+ return this;
}
/**
- * <i><l>RestContext</l> configuration property: </i> Supported
content media types.
+ * Supported content media types.
*
* <p>
* Overrides the media types inferred from the parsers that identify
what media types can be consumed by the resource.
+ * <br>An example where this might be useful if you have parsers
registered that handle media types that you
+ * don't want exposed in the Swagger documentation.
*
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_consumes}
- * </ul>
- *
- * @param values The values to add to this setting.
- * @return This object (for method chaining).
- */
- @FluentSetter
- public RestContextBuilder consumes(String...values) {
- return prependTo(REST_consumes, values);
- }
-
- /**
- * <i><l>RestContext</l> configuration property: </i> Supported
content media types.
+ * <h5 class='section'>Example:</h5>
+ * <p class='bcode w800'>
+ * <jc>// Option #1 - Defined via annotation resolving to a config
file setting with default value.</jc>
+ *
<ja>@Rest</ja>(consumes={<js>"$C{REST/supportedConsumes,application/json}"</js>})
+ * <jk>public class</jk> MyResource {
*
- * <p>
- * Same as {@link #consumes(String...)} but replaces any existing
values.
+ * <jc>// Option #2 - Defined via builder passed in
through resource constructor.</jc>
+ * <jk>public</jk> MyResource(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
*
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_consumes}
- * </ul>
+ * <jc>// Using method on builder.</jc>
+ * <jv>builder</jv>.consumes(<jk>false</jk>,
<js>"application/json"</js>)
+ * }
*
- * @param values The values to set on this setting.
- * @return This object (for method chaining).
- */
- @FluentSetter
- public RestContextBuilder consumesReplace(String...values) {
- return set(REST_consumes, values);
- }
-
- /**
- * <i><l>RestContext</l> configuration property: </i> Supported
content media types.
+ * <jc>// Option #3 - Defined via builder passed in
through init method.</jc>
+ * <ja>@RestHook</ja>(<jsf>INIT</jsf>)
+ * <jk>public void</jk> init(RestContextBuilder
<jv>builder</jv>) <jk>throws</jk> Exception {
+ * <jv>builder</jv>.consumes(<jk>false</jk>,
<js>"application/json"</js>);
+ * }
+ * }
+ * </p>
*
* <p>
- * Same as {@link #consumes(String...)} except input is {@link
MediaType} instances.
+ * This affects the returned values from the following:
+ * <ul class='javatree'>
+ * <li class='jm'>{@link RestContext#getConsumes()
RestContext.getConsumes()}
+ * </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_consumes}
+ * <li class='ja'>{@link Rest#consumes}
+ * <li class='ja'>{@link RestOp#consumes}
+ * <li class='ja'>{@link RestPut#consumes}
+ * <li class='ja'>{@link RestPost#consumes}
* </ul>
*
* @param values The values to add to this setting.
@@ -2244,25 +2225,11 @@ public class RestContextBuilder extends
BeanContextBuilder implements ServletCon
*/
@FluentSetter
public RestContextBuilder consumes(MediaType...values) {
- return prependTo(REST_consumes, values);
- }
-
- /**
- * <i><l>RestContext</l> configuration property: </i> Supported
content media types.
- *
- * <p>
- * Same as {@link #consumes(MediaType...)} except replaces any existing
values.
- *
- * <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_consumes}
- * </ul>
- *
- * @param values The values to set on this setting.
- * @return This object (for method chaining).
- */
- @FluentSetter
- public RestContextBuilder consumesReplace(MediaType...values) {
- return set(REST_consumes, values);
+ if (consumes == null)
+ consumes = new ArrayList<>(Arrays.asList(values));
+ else
+ consumes.addAll(Arrays.asList(values));
+ return this;
}
/**
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
index 45bfa9e..5813cbb 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
@@ -182,8 +182,8 @@ public class RestOpContext extends BeanContext implements
Comparable<RestOpConte
jsonSchemaGenerator = createJsonSchemaGenerator(r, cp,
bs);
bs.addBean(JsonSchemaGenerator.class,
jsonSchemaGenerator);
- supportedAcceptTypes =
unmodifiableList(cp.getList(REST_produces,
MediaType.class).orElse(serializers.getSupportedMediaTypes()));
- supportedContentTypes =
unmodifiableList(cp.getList(REST_consumes,
MediaType.class).orElse(parsers.getSupportedMediaTypes()));
+ supportedAcceptTypes =
unmodifiableList(ofNullable(builder.produces).orElse(serializers.getSupportedMediaTypes()));
+ supportedContentTypes =
unmodifiableList(ofNullable(builder.consumes).orElse(parsers.getSupportedMediaTypes()));
defaultRequestHeaders = createDefaultRequestHeaders(r,
builder, bs, method, context).build();
defaultResponseHeaders =
createDefaultResponseHeaders(r, builder, bs, method, context).build();
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
index d8a8b63..5b9e916 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContextBuilder.java
@@ -44,6 +44,7 @@ public class RestOpContextBuilder extends BeanContextBuilder {
NamedAttributeList defaultRequestAttributes;
HeaderListBuilder defaultRequestHeaders, defaultResponseHeaders;
RestMatcherListBuilder restMatchers;
+ List<MediaType> produces, consumes;
Charset defaultCharset;
Long maxInput;
@@ -632,6 +633,74 @@ public class RestOpContextBuilder extends
BeanContextBuilder {
return this;
}
+ /**
+ * Supported accept media types.
+ *
+ * <p>
+ * Overrides the media types inferred from the serializers that
identify what media types can be produced by the resource.
+ * <br>An example where this might be useful if you have serializers
registered that handle media types that you
+ * don't want exposed in the Swagger documentation.
+ *
+ * <p>
+ * This affects the returned values from the following:
+ * <ul class='javatree'>
+ * <li class='jm'>{@link RestContext#getProduces()
RestContext.getProduces()}
+ * <li class='jm'>{@link
SwaggerProvider#getSwagger(RestContext,Locale)} - Affects produces field.
+ * </ul>
+ *
+ * <ul class='seealso'>
+ * <li class='ja'>{@link Rest#produces}
+ * <li class='ja'>{@link RestOp#produces}
+ * <li class='ja'>{@link RestGet#produces}
+ * <li class='ja'>{@link RestPut#produces}
+ * <li class='ja'>{@link RestPost#produces}
+ * </ul>
+ *
+ * @param values The values to add to this setting.
+ * @return This object (for method chaining).
+ */
+ @FluentSetter
+ public RestOpContextBuilder produces(MediaType...values) {
+ if (produces == null)
+ produces = new ArrayList<>(Arrays.asList(values));
+ else
+ produces.addAll(Arrays.asList(values));
+ return this;
+ }
+
+ /**
+ * Supported content media types.
+ *
+ * <p>
+ * Overrides the media types inferred from the parsers that identify
what media types can be consumed by the resource.
+ * <br>An example where this might be useful if you have parsers
registered that handle media types that you
+ * don't want exposed in the Swagger documentation.
+ *
+ * <p>
+ * This affects the returned values from the following:
+ * <ul class='javatree'>
+ * <li class='jm'>{@link RestContext#getConsumes()
RestContext.getConsumes()}
+ * </ul>
+ *
+ * <ul class='seealso'>
+ * <li class='ja'>{@link Rest#consumes}
+ * <li class='ja'>{@link RestOp#consumes}
+ * <li class='ja'>{@link RestPut#consumes}
+ * <li class='ja'>{@link RestPost#consumes}
+ * </ul>
+ *
+ * @param values The values to add to this setting.
+ * @return This object (for method chaining).
+ */
+ @FluentSetter
+ public RestOpContextBuilder consumes(MediaType...values) {
+ if (consumes == null)
+ consumes = new ArrayList<>(Arrays.asList(values));
+ else
+ consumes.addAll(Arrays.asList(values));
+ return this;
+ }
+
// <FluentSetters>
@Override /* GENERATED - ContextBuilder */
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
index 9e3a544..9c2193d 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/Rest.java
@@ -24,6 +24,7 @@ import org.apache.juneau.annotation.*;
import org.apache.juneau.config.*;
import org.apache.juneau.cp.*;
import org.apache.juneau.encoders.*;
+import org.apache.juneau.http.header.*;
import org.apache.juneau.httppart.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.rest.logging.*;
@@ -265,7 +266,7 @@ public @interface Rest {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_consumes}
+ * <li class='jm'>{@link RestContextBuilder#consumes(MediaType...)}
* </ul>
*/
String[] consumes() default {};
@@ -896,7 +897,7 @@ public @interface Rest {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_produces}
+ * <li class='jm'>{@link RestContextBuilder#produces(MediaType...)}
* </ul>
*/
String[] produces() default {};
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
index ffebf75..73d5ec0 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestAnnotation.java
@@ -24,6 +24,7 @@ import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.cp.*;
import org.apache.juneau.encoders.*;
+import org.apache.juneau.http.header.*;
import org.apache.juneau.httppart.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
@@ -1042,8 +1043,8 @@ public class RestAnnotation {
b.setIf(a.partSerializer() !=
HttpPartSerializer.Null.class, REST_partSerializer, a.partSerializer());
b.setIf(a.partParser() != HttpPartParser.Null.class,
REST_partParser, a.partParser());
- b.setIfNotEmpty(REST_produces,
stringList(a.produces()));
- b.setIfNotEmpty(REST_consumes,
stringList(a.consumes()));
+ stringStream(a.produces()).map(MediaType::of).forEach(x
-> b.produces(x));
+ stringStream(a.consumes()).map(MediaType::of).forEach(x
-> b.consumes(x));
stringStream(a.defaultRequestAttributes()).map(x ->
BasicNamedAttribute.ofPair(x)).forEach(x ->
b.appendTo(REST_defaultRequestAttributes, x));
stringStream(a.defaultRequestHeaders()).map(x ->
stringHeader(x)).forEach(x -> b.appendTo(REST_defaultRequestHeaders, x));
stringStream(a.defaultResponseHeaders()).map(x ->
stringHeader(x)).forEach(x -> b.appendTo(REST_defaultResponseHeaders, x));
@@ -1102,8 +1103,8 @@ public class RestAnnotation {
b.setIf(a.partSerializer() !=
HttpPartSerializer.Null.class, REST_partSerializer, a.partSerializer());
b.setIf(a.partParser() != HttpPartParser.Null.class,
REST_partParser, a.partParser());
b.prependTo(REST_encoders, a.encoders());
- b.setIfNotEmpty(REST_produces,
stringList(a.produces()));
- b.setIfNotEmpty(REST_consumes,
stringList(a.consumes()));
+ stringStream(a.produces()).map(MediaType::of).forEach(x
-> b.produces(x));
+ stringStream(a.consumes()).map(MediaType::of).forEach(x
-> b.consumes(x));
b.prependTo(REST_converters, a.converters());
b.prependTo(REST_guards, reverse(a.guards()));
value(a.defaultCharset()).map(Charset::forName).ifPresent(x ->
b.defaultCharset(x));
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
index 188bfc7..aef77f1 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGet.java
@@ -21,6 +21,7 @@ import java.nio.charset.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.dto.swagger.*;
+import org.apache.juneau.http.header.*;
/**
* Identifies a REST GET operation Java method on a {@link RestServlet}
implementation class.
@@ -412,7 +413,7 @@ public @interface RestGet {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_produces}
+ * <li class='jm'>{@link
RestOpContextBuilder#produces(MediaType...)}
* </ul>
*/
String[] produces() default {};
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
index d2572e2..593b5d2 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestGetAnnotation.java
@@ -23,6 +23,7 @@ import java.nio.charset.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
+import org.apache.juneau.http.header.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.rest.*;
@@ -512,7 +513,7 @@ public class RestGetAnnotation {
b.set(REST_serializers,
merge(ConverterUtils.toType(b.peek(REST_serializers), Object[].class),
a.serializers()));
b.set(REST_encoders,
merge(ConverterUtils.toType(b.peek(REST_encoders), Object[].class),
a.encoders()));
value(a.contextClass(),
RestOpContext.Null.class).ifPresent(x -> b.contextClass(x));
- b.setIfNotEmpty(REST_produces,
stringList(a.produces()));
+ stringStream(a.produces()).map(MediaType::of).forEach(x
-> b.produces(x));
stringStream(a.defaultRequestHeaders()).map(x ->
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
stringStream(a.defaultResponseHeaders()).map(x ->
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
stringStream(a.defaultRequestAttributes()).map(x ->
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
index 14304e5..185b0bd 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOp.java
@@ -20,6 +20,7 @@ import java.nio.charset.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.rest.*;
+import org.apache.juneau.http.header.*;
import org.apache.juneau.http.remote.*;
import org.apache.juneau.dto.swagger.*;
@@ -113,7 +114,7 @@ public @interface RestOp {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_consumes}
+ * <li class='jm'>{@link
RestOpContextBuilder#consumes(MediaType...)}
* </ul>
*/
String[] consumes() default {};
@@ -613,7 +614,7 @@ public @interface RestOp {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_produces}
+ * <li class='jm'>{@link
RestOpContextBuilder#produces(MediaType...)}
* </ul>
*/
String[] produces() default {};
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
index 5e34d85..f9c668a 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestOpAnnotation.java
@@ -23,6 +23,7 @@ import java.nio.charset.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
+import org.apache.juneau.http.header.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.rest.*;
@@ -613,8 +614,8 @@ public class RestOpAnnotation {
b.set(REST_parsers,
merge(ConverterUtils.toType(b.peek(REST_parsers), Object[].class),
a.parsers()));
b.set(REST_encoders,
merge(ConverterUtils.toType(b.peek(REST_encoders), Object[].class),
a.encoders()));
value(a.contextClass(),
RestOpContext.Null.class).ifPresent(x -> b.contextClass(x));
- b.setIfNotEmpty(REST_produces,
stringList(a.produces()));
- b.setIfNotEmpty(REST_consumes,
stringList(a.consumes()));
+ stringStream(a.produces()).map(MediaType::of).forEach(x
-> b.produces(x));
+ stringStream(a.consumes()).map(MediaType::of).forEach(x
-> b.consumes(x));
stringStream(a.defaultRequestHeaders()).map(x ->
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
stringStream(a.defaultResponseHeaders()).map(x ->
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
stringStream(a.defaultRequestAttributes()).map(x ->
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
index 8f85585..60a353c 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPost.java
@@ -21,6 +21,7 @@ import java.nio.charset.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.dto.swagger.*;
+import org.apache.juneau.http.header.*;
/**
* Identifies a REST POST operation Java method on a {@link RestServlet}
implementation class.
@@ -115,7 +116,7 @@ public @interface RestPost {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_consumes}
+ * <li class='jm'>{@link
RestOpContextBuilder#consumes(MediaType...)}
* </ul>
*/
String[] consumes() default {};
@@ -539,7 +540,7 @@ public @interface RestPost {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_produces}
+ * <li class='jm'>{@link
RestOpContextBuilder#produces(MediaType...)}
* </ul>
*/
String[] produces() default {};
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
index ac4a714..0ccf4da 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPostAnnotation.java
@@ -23,6 +23,7 @@ import java.nio.charset.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
+import org.apache.juneau.http.header.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.rest.*;
@@ -598,8 +599,8 @@ public class RestPostAnnotation {
b.set(REST_parsers,
merge(ConverterUtils.toType(b.peek(REST_parsers), Object[].class),
a.parsers()));
b.set(REST_encoders,
merge(ConverterUtils.toType(b.peek(REST_encoders), Object[].class),
a.encoders()));
value(a.contextClass(),
RestOpContext.Null.class).ifPresent(x -> b.contextClass(x));
- b.setIfNotEmpty(REST_produces,
stringList(a.produces()));
- b.setIfNotEmpty(REST_consumes,
stringList(a.consumes()));
+ stringStream(a.produces()).map(MediaType::of).forEach(x
-> b.produces(x));
+ stringStream(a.consumes()).map(MediaType::of).forEach(x
-> b.consumes(x));
stringStream(a.defaultRequestHeaders()).map(x ->
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
stringStream(a.defaultResponseHeaders()).map(x ->
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
stringStream(a.defaultRequestAttributes()).map(x ->
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
index 9139625..f8207f9 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPut.java
@@ -21,6 +21,7 @@ import java.nio.charset.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.rest.*;
import org.apache.juneau.dto.swagger.*;
+import org.apache.juneau.http.header.*;
/**
* Identifies a REST PUT operation Java method on a {@link RestServlet}
implementation class.
@@ -115,7 +116,7 @@ public @interface RestPut {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_consumes}
+ * <li class='jm'>{@link
RestOpContextBuilder#consumes(MediaType...)}
* </ul>
*/
String[] consumes() default {};
@@ -539,7 +540,7 @@ public @interface RestPut {
* </ul>
*
* <ul class='seealso'>
- * <li class='jf'>{@link RestContext#REST_produces}
+ * <li class='jm'>{@link
RestOpContextBuilder#produces(MediaType...)}
* </ul>
*/
String[] produces() default {};
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
index b931366..9d0124b 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/RestPutAnnotation.java
@@ -23,6 +23,7 @@ import java.nio.charset.*;
import org.apache.juneau.*;
import org.apache.juneau.annotation.*;
+import org.apache.juneau.http.header.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.rest.*;
@@ -598,8 +599,8 @@ public class RestPutAnnotation {
b.set(REST_parsers,
merge(ConverterUtils.toType(b.peek(REST_parsers), Object[].class),
a.parsers()));
b.set(REST_encoders,
merge(ConverterUtils.toType(b.peek(REST_encoders), Object[].class),
a.encoders()));
value(a.contextClass(),
RestOpContext.Null.class).ifPresent(x -> b.contextClass(x));
- b.setIfNotEmpty(REST_produces,
stringList(a.produces()));
- b.setIfNotEmpty(REST_consumes,
stringList(a.consumes()));
+ stringStream(a.produces()).map(MediaType::of).forEach(x
-> b.produces(x));
+ stringStream(a.consumes()).map(MediaType::of).forEach(x
-> b.consumes(x));
stringStream(a.defaultRequestHeaders()).map(x ->
stringHeader(x)).forEach(x -> b.defaultRequestHeaders(x));
stringStream(a.defaultResponseHeaders()).map(x ->
stringHeader(x)).forEach(x -> b.defaultResponseHeaders(x));
stringStream(a.defaultRequestAttributes()).map(x ->
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));