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 6bc6d74  Context API refactoring.
6bc6d74 is described below

commit 6bc6d74e670697039c7bb4e17bca37c8e8d8ab8a
Author: JamesBognar <[email protected]>
AuthorDate: Fri Sep 24 16:22:20 2021 -0400

    Context API refactoring.
---
 .../org/apache/juneau/rest/client/RestClient.java  | 128 +--------------------
 .../juneau/rest/client/RestClientBuilder.java      |  63 ++--------
 .../juneau/rest/mock/MockRestClientBuilder.java    |  10 +-
 .../http/remote/Remote_CommonInterfaces_Test.java  |   4 +-
 .../juneau/http/remote/RrpcInterfaceTest.java      |   2 +-
 .../client/RestClient_Config_RestClient_Test.java  |   8 +-
 6 files changed, 26 insertions(+), 189 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 77d2938..c67fda6 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -881,7 +881,7 @@ import org.apache.juneau.utils.*;
  * Enabling debug mode has the following effects:
  * <ul>
  *     <li>{@link Context#CONTEXT_debug} is enabled.
- *     <li>{@link #RESTCLIENT_leakDetection} is enabled.
+ *     <li>{@link RestClientBuilder#detectLeaks()} is enabled.
  *     <li>{@link RestClientBuilder#logToConsole()} is called.
  * </ul>
  *
@@ -1022,45 +1022,6 @@ public class RestClient extends BeanContextable 
implements HttpClient, Closeable
        private static final String PREFIX = "RestClient.";
 
        /**
-        * Configuration property:  Ignore errors.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.rest.client.RestClient#RESTCLIENT_ignoreErrors 
RESTCLIENT_ignoreErrors}
-        *      <li><b>Name:</b>  <js>"RestClient.ignoreErrors.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ignoreErrors()}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#ignoreErrors(boolean)}
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.client.RestRequest#ignoreErrors()}
-        *              </ul>
-        * </ul>
-        *
-        * <h5 class='section'>Description:</h5>
-        *
-        * <p>
-        * When enabled, HTTP error response codes (e.g. <l>&gt;=400</l>) will 
not cause a {@link RestCallException} to
-        * be thrown.
-        * <p>
-        * Note that this is equivalent to <c>builder.errorCodes(x -&gt; 
<jk>false</jk>);</c>
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Create a client that doesn't throws a RestCallException 
when a 500 error occurs.</jc>
-        *      RestClient
-        *              .<jsm>create</jsm>()
-        *              .ignoreErrors()
-        *              .build()
-        *              .get(<js>"/error"</js>)  <jc>// Throws a 500 error</jc>
-        *              .run()
-        *              .assertStatus().is(500);
-        * </p>
-        */
-       public static final String RESTCLIENT_ignoreErrors = PREFIX + 
"ignoreErrors.b";
-
-       /**
         * Configuration property:  Call interceptors.
         *
         * <h5 class='section'>Property:</h5>
@@ -1115,83 +1076,6 @@ public class RestClient extends BeanContextable 
implements HttpClient, Closeable
        public static final String RESTCLIENT_interceptors_add = PREFIX + 
"interceptors.so/add";
 
        /**
-        * Configuration property:  Keep HttpClient open.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.rest.client.RestClient#RESTCLIENT_keepHttpClientOpen 
RESTCLIENT_keepHttpClientOpen}
-        *      <li><b>Name:</b>  <js>"RestClient.keepHttpClientOpen.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  
<c>RestClient.keepHttpClientOpen</c>
-        *      <li><b>Environment variable:</b>  
<c>RESTCLIENT_KEEPHTTPCLIENTOPEN</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#keepHttpClientOpen()}
-        *              </ul>
-        * </ul>
-        *
-        * <h5 class='section'>Description:</h5>
-        * <p>
-        * Don't close this client when the {@link RestClient#close()} method 
is called.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Create a client with a customized client and don't close 
the client  service.</jc>
-        *      RestClient <jv>client</jv> = RestClient
-        *              .<jsm>create</jsm>()
-        *              .httpClient(<jv>myHttpClient</jv>)
-        *              .keepHttpClientOpen()
-        *              .build();
-        *
-        *      <jv>client</jv>.closeQuietly();  <jc>// Customized HttpClient 
won't be closed.</jc>
-        * </p>
-        */
-       public static final String RESTCLIENT_keepHttpClientOpen = PREFIX + 
"keepHttpClientOpen.b";
-
-       /**
-        * Configuration property:  Enable leak detection.
-        *
-        * <h5 class='section'>Property:</h5>
-        * <ul class='spaced-list'>
-        *      <li><b>ID:</b>  {@link 
org.apache.juneau.rest.client.RestClient#RESTCLIENT_leakDetection 
RESTCLIENT_leakDetection}
-        *      <li><b>Name:</b>  <js>"RestClient.leakDetection.b"</js>
-        *      <li><b>Data type:</b>  <jk>boolean</jk>
-        *      <li><b>System property:</b>  <c>RestClient.leakDetection</c>
-        *      <li><b>Environment variable:</b>  
<c>RESTCLIENT_LEAKDETECTION</c>
-        *      <li><b>Default:</b>  <jk>false</jk>
-        *      <li><b>Methods:</b>
-        *              <ul>
-        *                      <li class='jm'>{@link 
org.apache.juneau.rest.client.RestClientBuilder#leakDetection()}
-        *              </ul>
-        * </ul>
-        *
-        * <h5 class='section'>Description:</h5>
-        * <p>
-        * Enable client and request/response leak detection.
-        *
-        * <p>
-        * Causes messages to be logged to the console if clients or 
request/response objects are not properly closed
-        * when the <c>finalize</c> methods are invoked.
-        *
-        * <p>
-        * Automatically enabled with {@link Context#CONTEXT_debug}.
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Create a client that logs a message if </jc>
-        *      RestClient <jv>client</jv> = RestClient
-        *              .<jsm>create</jsm>()
-        *              .leakDetection()
-        *              .logToConsole()  <jc>// Also log the error message to 
System.err</jc>
-        *              .build();
-        *
-        *      <jv>client</jv>.closeQuietly();  <jc>// Customized HttpClient 
won't be closed.</jc>
-        * </p>
-        */
-       public static final String RESTCLIENT_leakDetection = PREFIX + 
"leakDetection.b";
-
-       /**
         * Configuration property:  Logger.
         *
         * <h5 class='section'>Property:</h5>
@@ -1398,7 +1282,7 @@ public class RestClient extends BeanContextable 
implements HttpClient, Closeable
        final CloseableHttpClient httpClient;
 
        private final HttpClientConnectionManager connectionManager;
-       private final boolean keepHttpClientOpen, leakDetection, 
skipEmptyHeaderData, skipEmptyQueryData, skipEmptyFormData;
+       private final boolean keepHttpClientOpen, detectLeaks, 
skipEmptyHeaderData, skipEmptyQueryData, skipEmptyFormData;
        private final BeanStore beanStore;
        private final UrlEncodingSerializer urlEncodingSerializer;  // Used for 
form posts only.
        final HttpPartSerializer partSerializer;
@@ -1474,14 +1358,14 @@ public class RestClient extends BeanContextable 
implements HttpClient, Closeable
                console = ofNullable(builder.console).orElse(System.err);
                executorService = builder.executorService;
                executorServiceShutdownOnClose = 
builder.executorServiceShutdownOnClose;
+               ignoreErrors = builder.ignoreErrors;
+               keepHttpClientOpen = builder.keepHttpClientOpen;
+               detectLeaks = builder.detectLeaks;
 
                ContextProperties cp = 
getContextProperties().copy().apply(getBeanContext().getContextProperties()).build();
 
                beanStore.addBean(ContextProperties.class, cp);
 
-               this.keepHttpClientOpen = 
cp.getBoolean(RESTCLIENT_keepHttpClientOpen).orElse(false);
-               this.leakDetection = 
cp.getBoolean(RESTCLIENT_leakDetection).orElse(isDebug());
-               this.ignoreErrors = 
cp.getBoolean(RESTCLIENT_ignoreErrors).orElse(false);
                this.logger = cp.getInstance(RESTCLIENT_logger, 
Logger.class).orElseGet(()->Logger.getLogger(RestClient.class.getName()));
                this.logRequests = cp.getInstance(RESTCLIENT_logRequests, 
DetailLevel.class).orElse(isDebug() ? DetailLevel.FULL : DetailLevel.NONE);
                this.logRequestsLevel = 
cp.getInstance(RESTCLIENT_logRequestsLevel, Level.class).orElse(isDebug() ? 
Level.WARNING : Level.OFF);
@@ -2707,7 +2591,7 @@ public class RestClient extends BeanContextable 
implements HttpClient, Closeable
 
        @Override
        protected void finalize() throws Throwable {
-               if (leakDetection && ! isClosed && ! keepHttpClientOpen) {
+               if (detectLeaks && ! isClosed && ! keepHttpClientOpen) {
                        StringBuilder sb = new StringBuilder("WARNING:  
RestClient garbage collected before it was finalized.");  // NOT DEBUG
                        if (creationStack != null) {
                                sb.append("\nCreation Stack:");  // NOT DEBUG
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
index 3224bf7..1809eaa 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
@@ -102,7 +102,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
        private boolean pooled;
 
        String rootUri;
-       boolean skipEmptyHeaderData, skipEmptyFormData, skipEmptyQueryData, 
executorServiceShutdownOnClose;
+       boolean skipEmptyHeaderData, skipEmptyFormData, skipEmptyQueryData, 
executorServiceShutdownOnClose, ignoreErrors, keepHttpClientOpen, detectLeaks;
        Predicate<Integer> errorCodes = x ->  x<=0 || x>=400;
        HttpClientConnectionManager connectionManager;
        PrintStream console;
@@ -1276,6 +1276,7 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
        @FluentSetter
        public RestClientBuilder debug() {
                super.debug();
+               detectLeaks();
                return headers(Debug.TRUE);
        }
 
@@ -2364,19 +2365,16 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         *      <jv>client</jv>.closeQuietly();  <jc>// Customized HttpClient 
won't be closed.</jc>
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestClient#RESTCLIENT_keepHttpClientOpen}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public RestClientBuilder keepHttpClientOpen() {
-               return set(RESTCLIENT_keepHttpClientOpen);
+               keepHttpClientOpen = true;
+               return this;
        }
 
        /**
-        * <i><l>RestClient</l> configuration property:&emsp;</i>  Ignore 
errors.
+        * Ignore errors.
         *
         * <p>
         * When enabled, HTTP error response codes (e.g. <l>&gt;=400</l>) will 
not cause a {@link RestCallException} to
@@ -2396,48 +2394,12 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         *              .assertStatus().is(500);
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestClient#RESTCLIENT_ignoreErrors}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
        public RestClientBuilder ignoreErrors() {
-               return ignoreErrors(true);
-       }
-
-       /**
-        * <i><l>RestClient</l> configuration property:&emsp;</i>  Ignore 
errors.
-        *
-        * <p>
-        * When enabled, HTTP error response codes (e.g. <l>&gt;=400</l>) will 
not cause a {@link RestCallException} to
-        * be thrown.
-        * <p>
-        * Note that this is equivalent to <c>builder.errorCodes(x -&gt; 
<jk>false</jk>);</c>
-        *
-        * <h5 class='section'>Example:</h5>
-        * <p class='bcode w800'>
-        *      <jc>// Create a client that doesn't throws a RestCallException 
when a 500 error occurs.</jc>
-        *      RestClient
-        *              .<jsm>create</jsm>()
-        *              .ignoreErrors(<jk>true</jk>)
-        *              .build()
-        *              .get(<js>"/error"</js>)  <jc>// Throws a 500 error</jc>
-        *              .run()
-        *              .assertStatus().is(500);
-        * </p>
-        *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestClient#RESTCLIENT_ignoreErrors}
-        * </ul>
-        *
-        * @param value The new value for this property.
-        * @return This object (for method chaining).
-        */
-       @FluentSetter
-       public RestClientBuilder ignoreErrors(boolean value) {
-               return set(RESTCLIENT_ignoreErrors, value);
+               ignoreErrors = true;
+               return this;
        }
 
        /**
@@ -2599,22 +2561,19 @@ public class RestClientBuilder extends 
BeanContextableBuilder {
         *      <jc>// Create a client that logs a message if </jc>
         *      RestClient <jv>client</jv> = RestClient
         *              .<jsm>create</jsm>()
-        *              .leakDetection()
+        *              .detectLeaks()
         *              .logToConsole()  <jc>// Also log the error message to 
System.err</jc>
         *              .build();
         *
         *      <jv>client</jv>.closeQuietly();  <jc>// Customized HttpClient 
won't be closed.</jc>
         * </p>
         *
-        * <ul class='seealso'>
-        *      <li class='jf'>{@link RestClient#RESTCLIENT_leakDetection}
-        * </ul>
-        *
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder leakDetection() {
-               return set(RESTCLIENT_leakDetection);
+       public RestClientBuilder detectLeaks() {
+               detectLeaks = true;
+               return this;
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
index 60ebd0e..fae09d5 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java
@@ -995,12 +995,6 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder ignoreErrors(boolean value) {
-               super.ignoreErrors(value);
-               return this;
-       }
-
-       @Override /* GENERATED - RestClientBuilder */
        public MockRestClientBuilder ignoreRecursions() {
                super.ignoreRecursions();
                return this;
@@ -1049,8 +1043,8 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder leakDetection() {
-               super.leakDetection();
+       public MockRestClientBuilder detectLeaks() {
+               super.detectLeaks();
                return this;
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_CommonInterfaces_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_CommonInterfaces_Test.java
index 5c8bbec..5bcdca3 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_CommonInterfaces_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_CommonInterfaces_Test.java
@@ -398,7 +398,7 @@ public class Remote_CommonInterfaces_Test {
 
        @Test
        public void e01_predefinedExceptions() {
-               E x = 
MockRestClient.create(E1.class).ignoreErrors(false).noTrace().build().getRemote(E.class);
+               E x = 
MockRestClient.create(E1.class).noTrace().build().getRemote(E.class);
                
assertThrown(()->x.badRequest()).isType(BadRequest.class).message().is(BadRequest.REASON_PHRASE);
                
assertThrown(()->x.conflict()).message().is(Conflict.REASON_PHRASE);
                
assertThrown(()->x.expectationFailed()).message().is(ExpectationFailed.REASON_PHRASE);
@@ -571,7 +571,7 @@ public class Remote_CommonInterfaces_Test {
 
        @Test
        public void e02_predefinedExceptions_customMessages() {
-               E x = 
MockRestClient.create(E2.class).ignoreErrors(false).noTrace().build().getRemote(E.class);
+               E x = 
MockRestClient.create(E2.class).noTrace().build().getRemote(E.class);
                assertThrown(()->x.badRequest()).message().is("foo");
                assertThrown(()->x.conflict()).message().is("foo");
                assertThrown(()->x.expectationFailed()).message().is("foo");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java
index fb6bee4..4b2a7f7 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterfaceTest.java
@@ -925,7 +925,7 @@ public class RrpcInterfaceTest {
        public RrpcInterfaceTest(String label, Serializer serializer, Parser 
parser) {
                proxy = cache.get(label);
                if (proxy == null) {
-                       proxy = 
MockRestClient.create(InterfaceProxyResource.class).serializer(serializer).parser(parser).ignoreErrors(false).noTrace().build().getRrpcInterface(InterfaceProxy.class,"/proxy");
+                       proxy = 
MockRestClient.create(InterfaceProxyResource.class).serializer(serializer).parser(parser).noTrace().build().getRrpcInterface(InterfaceProxy.class,"/proxy");
                        cache.put(label,proxy);
                }
        }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
index ab932df..9dd1fc6 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
@@ -117,8 +117,8 @@ public class RestClient_Config_RestClient_Test {
 
        @Test
        public void a02_errorCodes() throws Exception {
-               RestClient x1 = client().errorCodes(x -> x == 
200).ignoreErrors(false).build();
-               RestClient x2 = client().ignoreErrors(false).build();
+               RestClient x1 = client().errorCodes(x -> x == 200).build();
+               RestClient x2 = client().build();
                assertThrown(()->x1.get("/echo").run()).is(x -> 
((RestCallException)x).getResponseCode() == 200);
                assertThrown(()->x2.get("/echo").errorCodes(x -> x == 
200).run()).is(x -> ((RestCallException)x).getResponseCode() == 200);
        }
@@ -348,13 +348,13 @@ public class RestClient_Config_RestClient_Test {
 
        @Test
        public void a07_leakDetection() throws Throwable {
-               client().leakDetection().build(A7.class).finalize();
+               client().detectLeaks().build(A7.class).finalize();
                assertEquals("WARNING:  RestClient garbage collected before it 
was finalized.",A7.lastMessage);
 
                client().debug().build(A7.class).finalize();
                assertTrue(A7.lastMessage.startsWith("WARNING:  RestClient 
garbage collected before it was finalized.\nCreation Stack:\n\t"));
 
-               client().leakDetection().build(A7.class).finalize();
+               client().detectLeaks().build(A7.class).finalize();
                assertEquals("WARNING:  RestClient garbage collected before it 
was finalized.",A7.lastMessage);
        }
 

Reply via email to