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 ded9712 Context API refactoring.
ded9712 is described below
commit ded9712a34ab8b1fce3fc2de16b924f59b7aebde
Author: JamesBognar <[email protected]>
AuthorDate: Fri Sep 24 09:25:26 2021 -0400
Context API refactoring.
---
.../org/apache/juneau/rest/client/RestClient.java | 41 +---------------------
.../juneau/rest/client/RestClientBuilder.java | 31 +++++++++++++---
.../apache/juneau/rest/mock/MockRestClient.java | 5 +--
.../org/apache/juneau/http/remote/Remote_Test.java | 13 -------
.../client/RestClient_Config_RestClient_Test.java | 4 +--
5 files changed, 32 insertions(+), 62 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 6c252cb..2023ce5 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
@@ -1607,45 +1607,6 @@ public class RestClient extends BeanContextable
implements HttpClient, Closeable
*/
public static final String RESTCLIENT_partParser = PREFIX +
"partParser.o";
- /**
- * Configuration property: Root URI.
- *
- * <h5 class='section'>Property:</h5>
- * <ul class='spaced-list'>
- * <li><b>ID:</b> {@link
org.apache.juneau.rest.client.RestClient#RESTCLIENT_rootUri RESTCLIENT_rootUri}
- * <li><b>Name:</b> <js>"RestClient.rootUri.s"</js>
- * <li><b>Data type:</b> <c>String</c>
- * <li><b>System property:</b> <c>RestClient.rootUri</c>
- * <li><b>Environment variable:</b> <c>RESTCLIENT_ROOTURI</c>
- * <li><b>Default:</b> <jk>false</jk>
- * <li><b>Methods:</b>
- * <ul>
- * <li class='jm'>{@link
org.apache.juneau.rest.client.RestClientBuilder#rootUri(Object)}
- * </ul>
- * </ul>
- *
- * <h5 class='section'>Description:</h5>
- * <p>
- * When set, relative URI strings passed in through the various rest
call methods (e.g. {@link RestClient#get(Object)}
- * will be prefixed with the specified root.
- * <br>This root URI is ignored on those methods if you pass in a
{@link URL}, {@link URI}, or an absolute URI string.
- *
- * <h5 class='section'>Example:</h5>
- * <p class='bcode w800'>
- * <jc>// Create a client that uses UON format by default for HTTP
parts.</jc>
- * RestClient <jv>client</jv> = RestClient
- * .<jsm>create</jsm>()
- * .rootUri(<js>"http://localhost:10000/foo"</js>)
- * .build();
- *
- * Bar <jv>bar</jv> = <jv>client</jv>
- * .get(<js>"/bar"</js>) <jc>// Relative to
http://localhost:10000/foo</jc>
- * .run()
- * .getBody().as(Bar.<jk>class</jk>);
- * </p>
- */
- public static final String RESTCLIENT_rootUri = PREFIX + "rootUri.s";
-
final HeaderList.Builder headerData;
final PartList.Builder queryData, formData, pathData;
final CloseableHttpClient httpClient;
@@ -1720,6 +1681,7 @@ public class RestClient extends BeanContextable
implements HttpClient, Closeable
skipEmptyHeaderData = builder.skipEmptyHeaderData;
skipEmptyQueryData = builder.skipEmptyQueryData;
skipEmptyFormData = builder.skipEmptyFormData;
+ rootUri = builder.getRootUri();
ContextProperties cp =
getContextProperties().copy().apply(getBeanContext().getContextProperties()).build();
@@ -1731,7 +1693,6 @@ public class RestClient extends BeanContextable
implements HttpClient, Closeable
this.keepHttpClientOpen =
cp.getBoolean(RESTCLIENT_keepHttpClientOpen).orElse(false);
this.errorCodes = cp.getInstance(RESTCLIENT_errorCodes,
Predicate.class).orElse(ERROR_CODES_DEFAULT);
this.executorServiceShutdownOnClose =
cp.getBoolean(RESTCLIENT_executorServiceShutdownOnClose).orElse(false);
- this.rootUri =
StringUtils.nullIfEmpty(cp.getString(RESTCLIENT_rootUri).orElse("").replaceAll("\\/$",
""));
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()));
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 63184ac..308edd5 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
@@ -15,6 +15,8 @@ package org.apache.juneau.rest.client;
import static org.apache.juneau.rest.client.RestClient.*;
import static org.apache.juneau.internal.ClassUtils.*;
import static org.apache.juneau.internal.ExceptionUtils.*;
+import static org.apache.juneau.internal.StringUtils.*;
+
import java.io.*;
import java.lang.annotation.*;
import java.lang.reflect.*;
@@ -94,6 +96,7 @@ public class RestClientBuilder extends BeanContextableBuilder
{
private HeaderList.Builder headerData;
private PartList.Builder queryData, formData, pathData;
private boolean pooled;
+ private String rootUri;
boolean skipEmptyHeaderData, skipEmptyFormData, skipEmptyQueryData;
@@ -2981,10 +2984,6 @@ public class RestClientBuilder extends
BeanContextableBuilder {
* .getBody().as(Bar.<jk>class</jk>);
* </p>
*
- * <ul class='seealso'>
- * <li class='jf'>{@link RestClient#RESTCLIENT_rootUri}
- * </ul>
- *
* @param value
* The root URI to prefix to relative URI strings.
* <br>Trailing slashes are trimmed.
@@ -2993,7 +2992,29 @@ public class RestClientBuilder extends
BeanContextableBuilder {
*/
@FluentSetter
public RestClientBuilder rootUri(Object value) {
- return set(RESTCLIENT_rootUri, value);
+ String s = stringify(value);
+ if (! isEmpty(s))
+ s = s.replaceAll("\\/$", "");
+ if (isEmpty(s))
+ rootUri = null;
+ else if (s.indexOf("://") == -1)
+ throw runtimeException("Invalid rootUri value: ''{0}''.
Must be a valid absolute URL.", value);
+ else
+ rootUri = s;
+ return this;
+ }
+
+ /**
+ * Returns the root URI defined for this client.
+ *
+ * <p>
+ * Returns <jk>null</jk> in leu of an empty string.
+ * Trailing slashes are trimmed.
+ *
+ * @return The root URI defined for this client.
+ */
+ public String getRootUri() {
+ return rootUri;
}
/**
diff --git
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
index 79b24fe..a93ad30 100644
---
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
+++
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.internal.StringUtils.*;
import static org.apache.juneau.rest.util.RestUtils.*;
import static org.apache.juneau.Enablement.*;
import static java.util.Collections.*;
+import static java.util.Optional.*;
import java.io.*;
import java.net.*;
@@ -273,7 +274,7 @@ public class MockRestClient extends RestClient implements
HttpClientConnection {
Object restBean =
cp.getInstance(MOCKRESTCLIENT_restBean, Object.class).orElse(null);
String contextPath = cp.get(MOCKRESTCLIENT_contextPath,
String.class).orElse(null);
String servletPath = cp.get(MOCKRESTCLIENT_servletPath,
String.class).orElse(null);
- String rootUrl = cp.get(RESTCLIENT_rootUri,
String.class).orElse("http://localhost");
+ String rootUrl =
ofNullable(builder.getRootUri()).orElse("http://localhost");
Class<?> c = restBean instanceof Class ?
(Class<?>)restBean : restBean.getClass();
if (! REST_CONTEXTS.containsKey(c)) {
@@ -298,7 +299,7 @@ public class MockRestClient extends RestClient implements
HttpClientConnection {
rootUrl = rootUrl + emptyIfNull(contextPath) +
emptyIfNull(servletPath);
builder.set(MOCKRESTCLIENT_servletPath, servletPath);
- builder.set(RESTCLIENT_rootUri, rootUrl);
+ builder.rootUri(rootUrl);
return builder;
} catch (Exception e) {
throw new ConfigException(e, "Could not initialize
MockRestClient");
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java
index 9d0ba92..2cdf199 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java
@@ -278,13 +278,6 @@ public class Remote_Test {
assertEquals("quux",x.x5x());
}
- @Test
- public void c02_rootUriNotSpecified() throws Exception {
- C1 x = client(C.class).rootUri("").build().getRemote(C1.class);
- assertThrown(()->x.x1()).message().is("Invalid remote
definition found on class org.apache.juneau.http.remote.Remote_Test$C1. Root
URI has not been specified. Cannot construct absolute path to remote
resource.");
- }
-
-
@Rest(path="/C3")
public static class C3a implements BasicSimpleJsonRest {
@RestOp
@@ -486,12 +479,6 @@ public class Remote_Test {
assertEquals("foo",x.echo("foo"));
}
- @Test
- public void e02_rrpc_noRootPath() throws Exception {
- RestClient x = client(E.class).rootUri("").build();
-
assertThrown(()->x.getRrpcInterface(E1.class)).message().is("Invalid remote
definition found on class org.apache.juneau.http.remote.Remote_Test$E1. Root
URI has not been specified. Cannot construct absolute path to remote
interface.");
- }
-
@Remote(path="/proxy")
public interface E3 {
String echo(String body);
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 7a49824..c894810 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
@@ -489,8 +489,8 @@ public class RestClient_Config_RestClient_Test {
@Test
public void a13_toString() throws Exception {
- String s = client().rootUri("foo").build().toString();
- assertTrue(s.contains("rootUri: 'foo'"));
+ String s = client().rootUri("https://foo").build().toString();
+ assertTrue(s.contains("rootUri: 'https://foo'"));
}
@Test