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 4611d01  Context API refactoring.
4611d01 is described below

commit 4611d01b29564d2ad9dfc3cd2c2d95a59abeaa54
Author: JamesBognar <[email protected]>
AuthorDate: Sun Aug 29 16:00:50 2021 -0400

    Context API refactoring.
---
 .../java/org/apache/juneau/rest/RestContext.java   | 96 ---------------------
 .../org/apache/juneau/rest/RestContextBuilder.java | 36 --------
 .../java/org/apache/juneau/rest/RestConverter.java |  8 +-
 .../org/apache/juneau/rest/RestConverterList.java  | 96 +++++++++++++++++++--
 .../java/org/apache/juneau/rest/RestOpContext.java | 25 +++---
 .../apache/juneau/rest/RestOpContextBuilder.java   | 99 ++++++++++++++++++++++
 .../org/apache/juneau/rest/annotation/Rest.java    |  2 +-
 .../juneau/rest/annotation/RestAnnotation.java     |  2 +-
 .../org/apache/juneau/rest/annotation/RestGet.java |  2 +-
 .../juneau/rest/annotation/RestGetAnnotation.java  |  2 +-
 .../org/apache/juneau/rest/annotation/RestOp.java  |  2 +-
 .../juneau/rest/annotation/RestOpAnnotation.java   |  2 +-
 .../apache/juneau/rest/annotation/RestPost.java    |  2 +-
 .../juneau/rest/annotation/RestPostAnnotation.java |  2 +-
 .../org/apache/juneau/rest/annotation/RestPut.java |  2 +-
 .../juneau/rest/annotation/RestPutAnnotation.java  |  2 +-
 .../juneau/rest/converters/Introspectable.java     |  2 +-
 .../apache/juneau/rest/converters/Queryable.java   |  2 +-
 .../apache/juneau/rest/converters/Traversable.java |  2 +-
 19 files changed, 216 insertions(+), 170 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 8d2f9bc..2922099 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
@@ -64,7 +64,6 @@ import org.apache.juneau.plaintext.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.args.*;
-import org.apache.juneau.rest.converters.*;
 import org.apache.juneau.rest.logging.*;
 import org.apache.juneau.http.header.*;
 import org.apache.juneau.http.response.*;
@@ -150,101 +149,6 @@ public class RestContext extends BeanContext {
        public static final String REST_beanStore = PREFIX + ".beanStore.o";
 
        /**
-        * Configuration property:  Class-level response converters.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.rest.RestContext#REST_converters REST_converters}
-        *      <li><b>Name:</b>  <js>"RestContext.converters.lo"</js>
-        *      <li><b>Data type:</b>  <c>List&lt;{@link 
org.apache.juneau.rest.RestConverter}|Class&lt;{@link 
org.apache.juneau.rest.RestConverter}&gt;&gt;</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#converters()}
-        *                      <li class='ja'>{@link 
org.apache.juneau.rest.annotation.RestOp#converters()}
-        *              </ul>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestContextBuilder#converters(Class...)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.RestContextBuilder#converters(RestConverter...)}
-        *              </ul>
-        * </ul>
-        *
-        * <h5 class='section'>Description:</h5>
-        * <p>
-        * Associates one or more {@link RestConverter converters} with a 
resource class.
-        * <br>These converters get called immediately after execution of the 
REST method in the same order specified in the
-        * annotation.
-        * <br>The object passed into this converter is the object returned 
from the Java method or passed into
-        * the {@link RestResponse#setOutput(Object)} method.
-        *
-        * <p>
-        * Can be used for performing post-processing on the response object 
before serialization.
-        *
-        * <p>
-        *      When multiple converters are specified, they're executed in the 
order they're specified in the annotation
-        *      (e.g. first the results will be traversed, then the resulting 
node will be searched/sorted).
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Our converter.</jc>
-        *      <jk>public class</jk> MyConverter <jk>implements</jk> 
RestConverter {
-        *              <ja>@Override</ja>
-        *              <jk>public</jk> Object convert(RestRequest 
<jv>req</jv>, Object <jv>o</jv>) {
-        *                      <jc>// Do something with object and return 
another object.</jc>
-        *                      <jc>// Or just return the same object for a 
no-op.</jc>
-        *              }
-        *      }
-        *
-        *      <jc>// Option #1 - Registered via annotation resolving to a 
config file setting with default value.</jc>
-        *      <ja>@Rest</ja>(converters={MyConverter.<jk>class</jk>})
-        *      <jk>public class</jk> MyResource {
-        *
-        *              <jc>// Option #2 - Registered 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>.converters(MyConverter.<jk>class</jk>);
-        *
-        *                      <jc>// Same, but using property.</jc>
-        *                      
<jv>builder</jv>.set(<jsf>REST_converters</jsf>, MyConverter.<jk>class</jk>);
-        *
-        *                      <jc>// Pass in an instance instead.</jc>
-        *                      <jv>builder</jv>.converters(<jk>new</jk> 
MyConverter());
-        *              }
-        *
-        *              <jc>// Option #3 - Registered 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>.converters(MyConverter.<jk>class</jk>);
-        *              }
-        *      }
-        * </p>
-        *
-        * <ul class='seealso'>
-        *      <li class='jc'>{@link Traversable} - Allows URL additional path 
info to address individual elements in a POJO tree.
-        *      <li class='jc'>{@link Queryable} - Allows query/view/sort 
functions to be performed on POJOs.
-        *      <li class='jc'>{@link Introspectable} - Allows Java public 
methods to be invoked on the returned POJOs.
-        *      <li class='link'>{@doc RestConverters}
-        * </ul>
-        *
-        * <ul class='notes'>
-        *      <li>
-        *              When defined as a class, the implementation must have 
one of the following constructors:
-        *              <ul>
-        *                      <li><code><jk>public</jk> T(BeanContext)</code>
-        *                      <li><code><jk>public</jk> T()</code>
-        *                      <li><code><jk>public static</jk> T 
<jsm>create</jsm>(RestContext)</code>
-        *                      <li><code><jk>public static</jk> T 
<jsm>create</jsm>()</code>
-        *              </ul>
-        *      <li>
-        *              Inner classes of the REST resource class are allowed.
-        * </ul>
-        */
-       public static final String REST_converters = PREFIX + ".converters.lo";
-
-       /**
         * Configuration property:  Debug mode.
         *
         * <h5 class='section'>Property:</h5>
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 d8893db..03fef47 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
@@ -1035,42 +1035,6 @@ public class RestContextBuilder extends 
BeanContextBuilder implements ServletCon
        }
 
        /**
-        * <i><l>RestContext</l> configuration property:&emsp;</i>  Class-level 
response converters.
-        *
-        * <p>
-        * Associates one or more {@link RestConverter converters} with a 
resource class.
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_converters}
-        * </ul>
-        *
-        * @param values The values to add to this setting.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestContextBuilder converters(Class<?>...values) {
-               return prependTo(REST_converters, values);
-       }
-
-       /**
-        * <i><l>RestContext</l> configuration property:&emsp;</i>  Response 
converters.
-        *
-        * <p>
-        * Same as {@link #converters(Class...)} except input is 
pre-constructed instances.
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_converters}
-        * </ul>
-        *
-        * @param values The values to add to this setting.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestContextBuilder converters(RestConverter...values) {
-               return prependTo(REST_converters, values);
-       }
-
-       /**
         * <i><l>RestContext</l> configuration property:&emsp;</i>  Debug mode.
         *
         * <p>
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverter.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverter.java
index 9fd6416..76c095b 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverter.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverter.java
@@ -29,9 +29,8 @@ import org.apache.juneau.serializer.*;
  * <ul class='javatree'>
  *     <li class='ja'>{@link Rest#converters()}
  *     <li class='ja'>{@link RestOp#converters()}
- *     <li class='jf'>{@link RestContext#REST_converters}
- *     <li class='jm'>{@link RestContextBuilder#converters(Class...)}
- *     <li class='jm'>{@link RestContextBuilder#converters(RestConverter...)}
+ *     <li class='jm'>{@link RestOpContextBuilder#converters(Class...)}
+ *     <li class='jm'>{@link RestOpContextBuilder#converters(RestConverter...)}
  * </ul>
  *
  * <h5 class='section'>Example:</h5>
@@ -74,7 +73,8 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- *     <li class='jf'>{@link RestContext#REST_converters} - Registering 
converters with REST resources.
+ *     <li class='jm'>{@link RestOpContextBuilder#converters(Class...)}
+ *     <li class='jm'>{@link RestOpContextBuilder#converters(RestConverter...)}
  *     <li class='link'>{@doc RestConverters}
  * </ul>
  */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverterList.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverterList.java
index 83904da..3bf6130 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverterList.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestConverterList.java
@@ -12,23 +12,107 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.rest;
 
+import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
+import org.apache.juneau.cp.*;
 
 /**
  * A list of {@link RestConverter} objects.
  */
-public class RestConverterList extends AList<RestConverter> {
+public class RestConverterList {
 
-       private static final long serialVersionUID = 1L;
+       private final RestConverter[] entries;
 
        /**
         * Static creator.
         *
         * @return An empty list.
         */
-       @SuppressWarnings("unchecked")
-       public static RestConverterList create() {
-               return new RestConverterList();
+       public static Builder create() {
+               return new Builder();
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param builder The builder containing the contents for this list.
+        */
+       protected RestConverterList(Builder builder) {
+               entries =
+                       builder
+                               .entries
+                               .stream()
+                               .map(x -> instantiate(x, builder.beanStore))
+                               .toArray(RestConverter[]::new);
+       }
+
+       /**
+        * Builder for {@link RestConverterList} objects.
+        */
+       public static class Builder {
+
+               AList<Object> entries;
+               BeanStore beanStore;
+
+               /**
+                * Create an empty builder.
+                */
+               protected Builder() {
+                       this.entries = AList.create();
+               }
+
+               /**
+                * Creates a new {@link RestConverterList} object using a 
snapshot of the settings defined in this builder.
+                *
+                * @return A new {@link RestConverterList} object.
+                */
+               public RestConverterList build() {
+                       return new RestConverterList(this);
+               }
+
+               /**
+                * Appends the specified rest matcher classes to the list.
+                *
+                * @param values The values to add.
+                * @return This object (for method chaining).
+                */
+               @SuppressWarnings("unchecked")
+               public Builder append(Class<? extends RestConverter>...values) {
+                       entries.append((Object[])values);
+                       return this;
+               }
+
+               /**
+                * Appends the specified rest matcher objects to the list.
+                *
+                * @param values The values to add.
+                * @return This object (for method chaining).
+                */
+               public Builder append(RestConverter...values) {
+                       entries.append((Object[])values);
+                       return this;
+               }
+
+               /**
+                * Specifies the bean store to use for instantiating rest 
matcher classes.
+                *
+                * @param value The bean store to use for instantiating rest 
matcher classes.
+                * @return This object (for method chaining).
+                */
+               public Builder beanStore(BeanStore value) {
+                       beanStore = value;
+                       return this;
+               }
+       }
+
+       private static RestConverter instantiate(Object o, BeanStore bs) {
+               if (o instanceof RestConverter)
+                       return (RestConverter)o;
+               try {
+                       return (RestConverter)bs.createBean((Class<?>)o);
+               } catch (ExecutableException e) {
+                       throw new ConfigException(e, "Could not instantiate 
class {0}", o);
+               }
        }
 
        /**
@@ -37,6 +121,6 @@ public class RestConverterList extends AList<RestConverter> {
         * @return The contents of this list as a {@link RestConverter} array.
         */
        public RestConverter[] asArray() {
-               return asArrayOf(RestConverter.class);
+               return entries;
        }
 }
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 11f46a0..13cd929 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
@@ -161,7 +161,7 @@ public class RestOpContext extends BeanContext implements 
Comparable<RestOpConte
                        partParser = createPartParser(r, cp, bs);
                        bs.addBean(HttpPartParser.class, partParser);
 
-                       converters = createConverters(r, cp, bs).asArray();
+                       converters = createConverters(r, builder, bs).asArray();
                        bs.addBean(RestConverter[].class, converters);
 
                        guards = createGuards(r, builder, bs).asArray();
@@ -225,9 +225,9 @@ public class RestOpContext extends BeanContext implements 
Comparable<RestOpConte
         * <p>
         * Instantiates based on the following logic:
         * <ul>
-        *      <li>Looks for {@link RestContext#REST_converters} value set via 
any of the following:
+        *      <li>Looks for REST conveters set via any of the following:
         *              <ul>
-        *                      <li>{@link 
RestContextBuilder#converters(Class...)}/{@link 
RestContextBuilder#converters(RestConverter...)}
+        *                      <li>{@link 
RestOpContextBuilder#converters(Class...)}/{@link 
RestOpContextBuilder#converters(RestConverter...)}
         *                      <li>{@link RestOp#converters()}.
         *                      <li>{@link Rest#converters()}.
         *              </ul>
@@ -244,31 +244,26 @@ public class RestOpContext extends BeanContext implements 
Comparable<RestOpConte
         * </ul>
         *
         * @param resource The REST resource object.
-        * @param properties TODO
+        * @param builder The builder for this object.
         * @param beanStore The bean store to use for retrieving and creating 
beans.
         * @return The result converters for this REST resource method.
         * @throws Exception If result converters could not be instantiated.
-        * @see RestContext#REST_converters
+        * @see RestOpContextBuilder#converters(Class...)
         */
-       protected RestConverterList createConverters(Object resource, 
ContextProperties properties, BeanStore beanStore) throws Exception {
-
-               RestConverterList x = RestConverterList.create();
-
-               x.append(properties.getInstanceArray(REST_converters, 
RestConverter.class, beanStore).orElse(new RestConverter[0]));
+       protected RestConverterList createConverters(Object resource, 
RestOpContextBuilder builder, BeanStore beanStore) throws Exception {
 
-               if (x.isEmpty())
-                       x = 
beanStore.getBean(RestConverterList.class).orElse(x);
+               RestConverterList.Builder x = 
builder.converters.beanStore(beanStore);
 
                x = BeanStore
                        .of(beanStore, resource)
-                       .addBean(RestConverterList.class, x)
-                       .beanCreateMethodFinder(RestConverterList.class, 
resource)
+                       .addBean(RestConverterList.Builder.class, x)
+                       
.beanCreateMethodFinder(RestConverterList.Builder.class, resource)
                        .find("createConverters", Method.class)
                        .thenFind("createConverters")
                        .withDefault(x)
                        .run();
 
-               return x;
+               return x.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 c5e70a2..fc22448 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
@@ -27,6 +27,7 @@ import org.apache.juneau.http.response.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.reflect.*;
 import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.converters.*;
 import org.apache.juneau.svl.*;
 import java.lang.reflect.Method;
 import java.nio.charset.*;
@@ -49,6 +50,7 @@ public class RestOpContextBuilder extends BeanContextBuilder {
        List<MediaType> produces, consumes;
        Set<String> roleGuard, rolesDeclared;
        RestGuardList.Builder guards = RestGuardList.create();
+       RestConverterList.Builder converters = RestConverterList.create();
 
        Charset defaultCharset;
        Long maxInput;
@@ -216,6 +218,103 @@ public class RestOpContextBuilder extends 
BeanContextBuilder {
        }
 
        /**
+        * Response converters.
+        *
+        * <p>
+        * Associates one or more {@link RestConverter converters} with a 
resource class.
+        * <br>These converters get called immediately after execution of the 
REST method in the same order specified in the
+        * annotation.
+        * <br>The object passed into this converter is the object returned 
from the Java method or passed into
+        * the {@link RestResponse#setOutput(Object)} method.
+        *
+        * <p>
+        * Can be used for performing post-processing on the response object 
before serialization.
+        *
+        * <p>
+        *      When multiple converters are specified, they're executed in the 
order they're specified in the annotation
+        *      (e.g. first the results will be traversed, then the resulting 
node will be searched/sorted).
+        *
+        * <h5 class='section'>Example:</h5>
+        * <p class='bcode w800'>
+        *      <jc>// Our converter.</jc>
+        *      <jk>public class</jk> MyConverter <jk>implements</jk> 
RestConverter {
+        *              <ja>@Override</ja>
+        *              <jk>public</jk> Object convert(RestRequest 
<jv>req</jv>, Object <jv>o</jv>) {
+        *                      <jc>// Do something with object and return 
another object.</jc>
+        *                      <jc>// Or just return the same object for a 
no-op.</jc>
+        *              }
+        *      }
+        *
+        *      <jc>// Option #1 - Registered via annotation resolving to a 
config file setting with default value.</jc>
+        *      <ja>@Rest</ja>(converters={MyConverter.<jk>class</jk>})
+        *      <jk>public class</jk> MyResource {
+        *
+        *              <jc>// Option #2 - Registered 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>.converters(MyConverter.<jk>class</jk>);
+        *
+        *                      <jc>// Pass in an instance instead.</jc>
+        *                      <jv>builder</jv>.converters(<jk>new</jk> 
MyConverter());
+        *              }
+        *
+        *              <jc>// Option #3 - Registered 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>.converters(MyConverter.<jk>class</jk>);
+        *              }
+        *      }
+        * </p>
+        *
+        * <ul class='notes'>
+        *      <li>
+        *              When defined as a class, the implementation must have 
one of the following constructors:
+        *              <ul>
+        *                      <li><code><jk>public</jk> T(BeanContext)</code>
+        *                      <li><code><jk>public</jk> T()</code>
+        *                      <li><code><jk>public static</jk> T 
<jsm>create</jsm>(RestContext)</code>
+        *                      <li><code><jk>public static</jk> T 
<jsm>create</jsm>()</code>
+        *              </ul>
+        *      <li>
+        *              Inner classes of the REST resource class are allowed.
+        * </ul>
+        *
+        * <ul class='seealso'>
+        *      <li class='jc'>{@link Traversable} - Allows URL additional path 
info to address individual elements in a POJO tree.
+        *      <li class='jc'>{@link Queryable} - Allows query/view/sort 
functions to be performed on POJOs.
+        *      <li class='jc'>{@link Introspectable} - Allows Java public 
methods to be invoked on the returned POJOs.
+        *      <li class='ja'>{@link Rest#converters()}
+        *      <li class='link'>{@doc RestConverters}
+        * </ul>
+        *
+        *
+        * @param values The values to add to this setting.
+        * @return This object (for method chaining).
+        */
+       @SuppressWarnings("unchecked")
+       @FluentSetter
+       public RestOpContextBuilder converters(Class<? extends 
RestConverter>...values) {
+               converters.append(values);
+               return this;
+       }
+
+       /**
+        * Response converters.
+        *
+        * <p>
+        * Same as {@link #converters(Class...)} except input is 
pre-constructed instances.
+        *
+        * @param values The values to add to this setting.
+        * @return This object (for method chaining).
+        */
+       @FluentSetter
+       public RestOpContextBuilder converters(RestConverter...values) {
+               converters.append(values);
+               return this;
+       }
+
+       /**
         * Debug mode.
         *
         * <p>
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 70c2b0b..c28bf28 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
@@ -291,7 +291,7 @@ public @interface Rest {
         * Associates one or more {@link RestConverter converters} with a 
resource class.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_converters}
+        *      <li class='jm'>{@link 
RestOpContextBuilder#converters(Class...)} - Registering converters with REST 
resources.
         * </ul>
         */
        Class<? extends RestConverter>[] converters() 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 3f64b66..a7650fb 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
@@ -1105,7 +1105,7 @@ public class RestAnnotation {
                        b.prependTo(REST_encoders, a.encoders());
                        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.converters(a.converters());
                        b.guards(a.guards());
                        
value(a.defaultCharset()).map(Charset::forName).ifPresent(x -> 
b.defaultCharset(x));
                        value(a.maxInput()).ifPresent(x -> b.maxInput(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 5fcb202..2c79a1d 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
@@ -119,7 +119,7 @@ public @interface RestGet {
         * Associates one or more {@link RestConverter converters} with this 
method.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_converters}
+        *      <li class='jm'>{@link 
RestOpContextBuilder#converters(Class...)} - Registering converters with REST 
resources.
         * </ul>
         */
        Class<? extends RestConverter>[] converters() 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 8db30b5..b2d4016 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
@@ -519,7 +519,7 @@ public class RestGetAnnotation {
                        stringStream(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        stringStream(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
-                       b.prependTo(REST_converters, a.converters());
+                       b.converters(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());
                        value(a.clientVersion()).ifPresent(x -> 
b.clientVersion(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 f952c35..e9c92f2 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
@@ -135,7 +135,7 @@ public @interface RestOp {
         * Associates one or more {@link RestConverter converters} with this 
method.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_converters}
+        *      <li class='jm'>{@link 
RestOpContextBuilder#converters(Class...)} - Registering converters with REST 
resources.
         * </ul>
         */
        Class<? extends RestConverter>[] converters() 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 a709fde..102f6ae 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
@@ -623,7 +623,7 @@ public class RestOpAnnotation {
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
contentType(string(a.defaultContentType())));
-                       b.prependTo(REST_converters, a.converters());
+                       b.converters(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());
                        value(a.clientVersion()).ifPresent(x -> 
b.clientVersion(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 3e3e1ac..a787b90 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
@@ -137,7 +137,7 @@ public @interface RestPost {
         * Associates one or more {@link RestConverter converters} with this 
method.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_converters}
+        *      <li class='jm'>{@link 
RestOpContextBuilder#converters(Class...)} - Registering converters with REST 
resources.
         * </ul>
         */
        Class<? extends RestConverter>[] converters() 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 cb9d910..cb329c7 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
@@ -608,7 +608,7 @@ public class RestPostAnnotation {
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
contentType(string(a.defaultContentType())));
-                       b.prependTo(REST_converters, a.converters());
+                       b.converters(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());
                        value(a.clientVersion()).ifPresent(x -> 
b.clientVersion(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 5fa3084..156a447 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
@@ -137,7 +137,7 @@ public @interface RestPut {
         * Associates one or more {@link RestConverter converters} with this 
method.
         *
         * <ul class='seealso'>
-        *      <li class='jf'>{@link RestContext#REST_converters}
+        *      <li class='jm'>{@link 
RestOpContextBuilder#converters(Class...)} - Registering converters with REST 
resources.
         * </ul>
         */
        Class<? extends RestConverter>[] converters() 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 8459b51..46fd32b 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
@@ -608,7 +608,7 @@ public class RestPutAnnotation {
                        stringStream(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
accept(string(a.defaultAccept())));
                        b.appendToIfNotEmpty(REST_defaultRequestHeaders, 
contentType(string(a.defaultContentType())));
-                       b.prependTo(REST_converters, a.converters());
+                       b.converters(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());
                        value(a.clientVersion()).ifPresent(x -> 
b.clientVersion(x));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Introspectable.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Introspectable.java
index b53b3a7..619f30d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Introspectable.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Introspectable.java
@@ -43,7 +43,7 @@ import org.apache.juneau.utils.*;
  *
  * <ul class='seealso'>
  *     <li class='jc'>{@link PojoIntrospector} - Additional information on 
introspection of POJO methods.
- *     <li class='jf'>{@link RestContext#REST_converters} - Registering 
converters with REST resources.
+ *     <li class='jm'>{@link RestOpContextBuilder#converters(Class...)} - 
Registering converters with REST resources.
  *     <li class='link'>{@doc RestConverters}
  * </ul>
  */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Queryable.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Queryable.java
index 7375d06..55890b2 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Queryable.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Queryable.java
@@ -64,7 +64,7 @@ import org.apache.juneau.utils.*;
  *
  * <ul class='seealso'>
  *     <li class='jc'>{@link PojoQuery} - Additional information on filtering 
POJO models.
- *     <li class='jf'>{@link RestContext#REST_converters} - Registering 
converters with REST resources.
+ *     <li class='jm'>{@link RestOpContextBuilder#converters(Class...)} - 
Registering converters with REST resources.
  *     <li class='link'>{@doc RestConverters}
  * </ul>
  */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java
index 2adae4b..cccc07a 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/converters/Traversable.java
@@ -37,7 +37,7 @@ import org.apache.juneau.utils.*;
  *
  * <ul class='seealso'>
  *     <li class='jc'>{@link PojoRest} - Additional information on addressing 
elements in a POJO tree using URL notation.
- *     <li class='jf'>{@link RestContext#REST_converters} - Registering 
converters with REST resources.
+ *     <li class='jm'>{@link RestOpContextBuilder#converters(Class...)} - 
Registering converters with REST resources.
  *     <li class='link'>{@doc RestConverters}
  * </ul>
  */

Reply via email to