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>>=400</l>) will
not cause a {@link RestCallException} to
- * be thrown.
- * <p>
- * Note that this is equivalent to <c>builder.errorCodes(x ->
<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: </i> Ignore
errors.
+ * Ignore errors.
*
* <p>
* When enabled, HTTP error response codes (e.g. <l>>=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: </i> Ignore
errors.
- *
- * <p>
- * When enabled, HTTP error response codes (e.g. <l>>=400</l>) will
not cause a {@link RestCallException} to
- * be thrown.
- * <p>
- * Note that this is equivalent to <c>builder.errorCodes(x ->
<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);
}