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 82d0f2e  Context API refactoring.
82d0f2e is described below

commit 82d0f2ea95cb365762b1e13416cb317c634a1074
Author: JamesBognar <[email protected]>
AuthorDate: Sun Sep 19 12:32:21 2021 -0400

    Context API refactoring.
---
 .../java/org/apache/juneau/rest/RestConverter.java |   6 +-
 .../java/org/apache/juneau/rest/RestOpContext.java |  50 +---
 .../apache/juneau/rest/RestOpContextBuilder.java   | 287 ++++++++++++++-------
 .../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 +-
 16 files changed, 204 insertions(+), 165 deletions(-)

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 76c095b..d14f1c5 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,8 +29,7 @@ import org.apache.juneau.serializer.*;
  * <ul class='javatree'>
  *     <li class='ja'>{@link Rest#converters()}
  *     <li class='ja'>{@link RestOp#converters()}
- *     <li class='jm'>{@link RestOpContextBuilder#converters(Class...)}
- *     <li class='jm'>{@link RestOpContextBuilder#converters(RestConverter...)}
+ *     <li class='jm'>{@link RestOpContextBuilder#converters()}
  * </ul>
  *
  * <h5 class='section'>Example:</h5>
@@ -73,8 +72,7 @@ import org.apache.juneau.serializer.*;
  * </ul>
  *
  * <ul class='seealso'>
- *     <li class='jm'>{@link RestOpContextBuilder#converters(Class...)}
- *     <li class='jm'>{@link RestOpContextBuilder#converters(RestConverter...)}
+ *     <li class='jm'>{@link RestOpContextBuilder#converters()}
  *     <li class='link'>{@doc RestConverters}
  * </ul>
  */
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 1f7b9be..e260bc3 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
@@ -157,8 +157,7 @@ public class RestOpContext extends BeanContext implements 
Comparable<RestOpConte
                        partParser = createPartParser(r, builder, bs);
                        bs.addBean(HttpPartParser.class, partParser);
 
-                       converters = createConverters(r, builder, bs).asArray();
-                       bs.addBean(RestConverter[].class, converters);
+                       converters = bs.add(RestConverter[].class, 
builder.converters().build().asArray());
 
                        guards = createGuards(r, builder, bs).asArray();
 
@@ -216,53 +215,6 @@ public class RestOpContext extends BeanContext implements 
Comparable<RestOpConte
        }
 
        /**
-        * Instantiates the result converters for this REST resource method.
-        *
-        * <p>
-        * Instantiates based on the following logic:
-        * <ul>
-        *      <li>Looks for REST conveters set via any of the following:
-        *              <ul>
-        *                      <li>{@link 
RestOpContextBuilder#converters(Class...)}/{@link 
RestOpContextBuilder#converters(RestConverter...)}
-        *                      <li>{@link RestOp#converters()}.
-        *                      <li>{@link Rest#converters()}.
-        *              </ul>
-        *      <li>Looks for a static or non-static <c>createConverters()</> 
method that returns <c>{@link RestConverter}[]</c> on the
-        *              resource class with any of the following arguments:
-        *              <ul>
-        *                      <li>{@link Method} - The Java method this 
context belongs to.
-        *                      <li>{@link RestContext}
-        *                      <li>{@link BeanStore}
-        *                      <li>Any {@doc RestInjection injected beans}.
-        *              </ul>
-        *      <li>Resolves it via the bean store registered in this context.
-        *      <li>Instantiates a <c>RestConverter[0]</c>.
-        * </ul>
-        *
-        * @param resource The REST resource object.
-        * @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 RestOpContextBuilder#converters(Class...)
-        */
-       protected RestConverterList createConverters(Object resource, 
RestOpContextBuilder builder, BeanStore beanStore) throws Exception {
-
-               RestConverterList.Builder x = 
builder.converters.beanStore(beanStore);
-
-               x = BeanStore
-                       .of(beanStore, resource)
-                       .addBean(RestConverterList.Builder.class, x)
-                       .createMethodFinder(RestConverterList.Builder.class, 
resource)
-                       .find("createConverters", Method.class)
-                       .thenFind("createConverters")
-                       .withDefault(x)
-                       .run();
-
-               return x.build();
-       }
-
-       /**
         * Instantiates the guards for this REST resource method.
         *
         * <p>
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 f230dda..788122b 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
@@ -17,6 +17,8 @@ import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.rest.HttpRuntimeException.*;
 import java.lang.annotation.*;
 import java.util.*;
+import java.util.function.*;
+
 import org.apache.http.*;
 import org.apache.juneau.*;
 import org.apache.juneau.collections.*;
@@ -51,6 +53,9 @@ public class RestOpContextBuilder extends BeanContextBuilder {
        String httpMethod, clientVersion;
        Enablement debug;
        List<String> path;
+
+       private RestConverterList.Builder converters;
+
        PartList.Builder defaultFormData, defaultQueryData;
        NamedAttributeList defaultRequestAttributes;
        HeaderList.Builder defaultRequestHeaders, defaultResponseHeaders;
@@ -58,7 +63,6 @@ public class RestOpContextBuilder extends BeanContextBuilder {
        List<MediaType> produces, consumes;
        Set<String> roleGuard, rolesDeclared;
        RestGuardList.Builder guards = RestGuardList.create();
-       RestConverterList.Builder converters = RestConverterList.create();
        EncoderGroup.Builder encoders;
        SerializerGroup.Builder serializers;
        ParserGroup.Builder parsers;
@@ -98,7 +102,10 @@ public class RestOpContextBuilder extends 
BeanContextBuilder {
 
                this.restContext = context;
                this.restMethod = method;
-               this.beanStore = context.getRootBeanStore();
+               this.beanStore = BeanStore
+                       .of(context.getRootBeanStore(), 
context.builder.resource().get())
+                       .addBean(java.lang.reflect.Method.class, method);
+
                this.defaultFormData = PartList.create();
                this.defaultQueryData = PartList.create();
                this.defaultRequestAttributes = NamedAttributeList.create();
@@ -131,6 +138,185 @@ public class RestOpContextBuilder extends 
BeanContextBuilder {
        }
 
        /**
+        * Returns the REST servlet/bean instance that this context is defined 
against.
+        *
+        * @return The REST servlet/bean instance that this context is defined 
against.
+        */
+       public final Supplier<?> resource() {
+               return restContext.builder.resource();
+       }
+
+       /**
+        * Returns the default classes list.
+        *
+        * <p>
+        * This defines the implementation classes for a variety of bean types.
+        *
+        * <p>
+        * Default classes are inherited from the parent REST object.
+        * Typically used on the top-level {@link RestContextBuilder} to affect 
class types for that REST object and all children.
+        *
+        * <p>
+        * Modifying the default class list on this builder does not affect the 
default class list on the parent builder, but changes made
+        * here are inherited by child builders.
+        *
+        * @return The default classes list for this builder.
+        */
+       public final DefaultClassList defaultClasses() {
+               return restContext.builder.defaultClasses();
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // beanStore
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns access to the bean store being used by this builder.
+        *
+        * <p>
+        * Can be used to add more beans to the bean store.
+        *
+        * @return The bean store being used by this builder.
+        */
+       public final BeanStore beanStore() {
+               return beanStore;
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // converters
+       
//-----------------------------------------------------------------------------------------------------------------
+
+       /**
+        * Returns the builder for the {@link RestConverterList} object in the 
REST context.
+        *
+        * @return The builder for the {@link RestConverterList} object in the 
REST context.
+        */
+       public final RestConverterList.Builder converters() {
+               if (converters == null)
+                       converters = createConverters(beanStore(), resource());
+               return converters;
+       }
+
+       /**
+        * 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 beanStore
+        *      The factory used for creating beans and retrieving injected 
beans.
+        * @param resource
+        *      The REST servlet/bean instance that this context is defined 
against.
+        * @return The rest converter list builder for this REST method.
+        */
+       protected RestConverterList.Builder createConverters(BeanStore 
beanStore, Supplier<?> resource) {
+
+               // Default value.
+               Value<RestConverterList.Builder> v = Value.of(
+                       RestConverterList
+                               .create()
+                               .beanStore(beanStore)
+               );
+
+               // Specify the implementation class if its set as a default.
+               defaultClasses()
+                       .get(RestConverterList.class)
+                       .ifPresent(x -> v.get().type(x));
+
+               // Replace with builder from bean store.
+               beanStore
+                       .getBean(RestConverterList.Builder.class)
+                       .map(x -> x.copy())
+                       .ifPresent(x->v.set(x));
+
+               // Replace with bean from bean store.
+               beanStore
+                       .getBean(RestConverterList.class)
+                       .ifPresent(x->v.get().impl(x));
+
+               // Replace with builder from:  public [static] 
RestConverterList.Builder createConverters(<args>)
+               beanStore
+                       .beanCreateMethodFinder(RestConverterList.Builder.class)
+                       .addBean(RestConverterList.Builder.class, v.get())
+                       .find("createConverters")
+                       .run(x -> v.set(x));
+
+               // Replace with bean from:  public [static] RestConverterList 
createConverters(<args>)
+               beanStore
+                       .beanCreateMethodFinder(RestConverterList.class)
+                       .addBean(RestConverterList.Builder.class, v.get())
+                       .find("createConverters")
+                       .run(x -> v.get().impl(x));
+
+               return v.get();
+       }
+
+       /**
         * When enabled, append <js>"/*"</js> to path patterns if not already 
present.
         *
         * @return This object (for method chaining).
@@ -350,103 +536,6 @@ 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).
-        * @throws IllegalArgumentException if any class does not extend from 
{@link RestConverter}.
-        */
-       @FluentSetter
-       public RestOpContextBuilder converters(Class<?>...values) {
-               converters.append(assertClassArrayArgIsType("values", 
RestConverter.class, 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 8e4e610..ad85cb9 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
@@ -311,7 +311,7 @@ public @interface Rest {
         * Associates one or more {@link RestConverter converters} with a 
resource class.
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
RestOpContextBuilder#converters(Class...)} - Registering converters with REST 
resources.
+        *      <li class='jm'>{@link RestOpContextBuilder#converters()} - 
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 06dd5b3..6296221 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
@@ -1123,7 +1123,7 @@ public class RestAnnotation {
 
                        strings(a.produces()).map(MediaType::of).forEach(x -> 
b.produces(x));
                        strings(a.consumes()).map(MediaType::of).forEach(x -> 
b.consumes(x));
-                       b.converters(a.converters());
+                       b.converters().append(a.converters());
                        b.guards(a.guards());
                        
string(a.defaultCharset()).map(Charset::forName).ifPresent(x -> 
b.defaultCharset(x));
                        string(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 f04aa80..3ad5a06 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
@@ -121,7 +121,7 @@ public @interface RestGet {
         * Associates one or more {@link RestConverter converters} with this 
method.
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
RestOpContextBuilder#converters(Class...)} - Registering converters with REST 
resources.
+        *      <li class='jm'>{@link RestOpContextBuilder#converters()} - 
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 808264e..270420e 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
@@ -535,7 +535,7 @@ public class RestGetAnnotation {
                        strings(a.defaultRequestAttributes()).map(x -> 
BasicNamedAttribute.ofPair(x)).forEach(x -> b.defaultRequestAttributes(x));
                        strings(a.defaultQueryData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultQueryData(x));
                        string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
-                       b.converters(a.converters());
+                       b.converters().append(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());
                        string(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 0fad7a8..6b10682 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
@@ -138,7 +138,7 @@ public @interface RestOp {
         * Associates one or more {@link RestConverter converters} with this 
method.
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
RestOpContextBuilder#converters(Class...)} - Registering converters with REST 
resources.
+        *      <li class='jm'>{@link RestOpContextBuilder#converters()} - 
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 932109e..26d305d 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
@@ -642,7 +642,7 @@ public class RestOpAnnotation {
                        strings(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
                        string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
                        string(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders(x));
-                       b.converters(a.converters());
+                       b.converters().append(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());
                        string(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 061266b..39e48cc 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
@@ -140,7 +140,7 @@ public @interface RestPost {
         * Associates one or more {@link RestConverter converters} with this 
method.
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
RestOpContextBuilder#converters(Class...)} - Registering converters with REST 
resources.
+        *      <li class='jm'>{@link RestOpContextBuilder#converters()} - 
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 7fe33a4..094bb36 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
@@ -626,7 +626,7 @@ public class RestPostAnnotation {
                        strings(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
                        string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
                        string(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders(x));
-                       b.converters(a.converters());
+                       b.converters().append(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());
                        string(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 1b138ca..8aed45b 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
@@ -140,7 +140,7 @@ public @interface RestPut {
         * Associates one or more {@link RestConverter converters} with this 
method.
         *
         * <ul class='seealso'>
-        *      <li class='jm'>{@link 
RestOpContextBuilder#converters(Class...)} - Registering converters with REST 
resources.
+        *      <li class='jm'>{@link RestOpContextBuilder#converters()} - 
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 cd036c9..1b7d856 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
@@ -626,7 +626,7 @@ public class RestPutAnnotation {
                        strings(a.defaultFormData()).map(x -> 
basicPart(x)).forEach(x -> b.defaultFormData(x));
                        string(a.defaultAccept()).map(x -> 
accept(x)).ifPresent(x -> b.defaultRequestHeaders(x));
                        string(a.defaultContentType()).map(x -> 
contentType(x)).ifPresent(x -> b.defaultRequestHeaders(x));
-                       b.converters(a.converters());
+                       b.converters().append(a.converters());
                        b.guards(a.guards());
                        b.matchers(a.matchers());
                        string(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 619f30d..41d1bb4 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='jm'>{@link RestOpContextBuilder#converters(Class...)} - 
Registering converters with REST resources.
+ *     <li class='jm'>{@link RestOpContextBuilder#converters()} - 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 55890b2..cde4264 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='jm'>{@link RestOpContextBuilder#converters(Class...)} - 
Registering converters with REST resources.
+ *     <li class='jm'>{@link RestOpContextBuilder#converters()} - 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 cccc07a..ccd67bf 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='jm'>{@link RestOpContextBuilder#converters(Class...)} - 
Registering converters with REST resources.
+ *     <li class='jm'>{@link RestOpContextBuilder#converters()} - Registering 
converters with REST resources.
  *     <li class='link'>{@doc RestConverters}
  * </ul>
  */

Reply via email to