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

Reply via email to