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 990928c  RestClient tests.
990928c is described below

commit 990928c06e304fc3cb76030a76466f00c76f344a
Author: JamesBognar <[email protected]>
AuthorDate: Fri Jun 5 17:17:39 2020 -0400

    RestClient tests.
---
 .../java/org/apache/juneau/BeanContextBuilder.java |  8 ++---
 .../org/apache/juneau/http/BasicNameValuePair.java | 25 +++++++++++++-
 .../apache/juneau/http/ContentEncodingEnum.java    | 38 --------------------
 .../org/apache/juneau/http/NameValuePairs.java     | 19 ++++++++++
 .../org/apache/juneau/http/SerializedHeader.java   | 23 +++++++++++--
 .../juneau/http/SerializedNameValuePair.java       | 10 ++++--
 .../juneau/http/header/BasicCsvArrayHeader.java    | 11 +++---
 .../org/apache/juneau/http/header/BasicHeader.java | 22 ++++++++----
 .../org/apache/juneau/internal/StringUtils.java    | 15 +-------
 .../apache/juneau/rest/client2/RestClientTest.java | 40 ++++++++++++++++++++++
 10 files changed, 137 insertions(+), 74 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
index 5f8b3c3..2739e45 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
@@ -1124,7 +1124,7 @@ public class BeanContextBuilder extends ContextBuilder {
        @FluentSetter
        public BeanContextBuilder bpi(Map<String,Object> values) {
                for (Map.Entry<String,Object> e : values.entrySet())
-                       prependTo(BEAN_annotations, new 
BeanAnnotation(e.getKey()).bpi(asString(e.getValue())));
+                       prependTo(BEAN_annotations, new 
BeanAnnotation(e.getKey()).bpi(stringify(e.getValue())));
                return this;
        }
 
@@ -1297,7 +1297,7 @@ public class BeanContextBuilder extends ContextBuilder {
        @FluentSetter
        public BeanContextBuilder bpx(Map<String,Object> values) {
                for (Map.Entry<String,Object> e : values.entrySet())
-                       prependTo(BEAN_annotations, new 
BeanAnnotation(e.getKey()).bpx(asString(e.getValue())));
+                       prependTo(BEAN_annotations, new 
BeanAnnotation(e.getKey()).bpx(stringify(e.getValue())));
                return this;
        }
 
@@ -1463,7 +1463,7 @@ public class BeanContextBuilder extends ContextBuilder {
        @FluentSetter
        public BeanContextBuilder bpro(Map<String,Object> values) {
                for (Map.Entry<String,Object> e : values.entrySet())
-                       prependTo(BEAN_annotations, new 
BeanAnnotation(e.getKey()).bpro(asString(e.getValue())));
+                       prependTo(BEAN_annotations, new 
BeanAnnotation(e.getKey()).bpro(stringify(e.getValue())));
                return this;
        }
 
@@ -1635,7 +1635,7 @@ public class BeanContextBuilder extends ContextBuilder {
        @FluentSetter
        public BeanContextBuilder bpwo(Map<String,Object> values) {
                for (Map.Entry<String,Object> e : values.entrySet())
-                       prependTo(BEAN_annotations, new 
BeanAnnotation(e.getKey()).bpwo(asString(e.getValue())));
+                       prependTo(BEAN_annotations, new 
BeanAnnotation(e.getKey()).bpwo(stringify(e.getValue())));
                return this;
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicNameValuePair.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicNameValuePair.java
index df9191d..6910f0f 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicNameValuePair.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicNameValuePair.java
@@ -13,6 +13,9 @@
 package org.apache.juneau.http;
 
 import static org.apache.juneau.internal.StringUtils.*;
+
+import java.util.function.*;
+
 import org.apache.http.*;
 
 /**
@@ -38,6 +41,20 @@ public class BasicNameValuePair implements NameValuePair {
        }
 
        /**
+        * Convenience creator using supplier.
+        *
+        * <p>
+        * Value is re-evaluated on each call to {@link #getValue()}.
+        *
+        * @param name The parameter name.
+        * @param value The parameter value supplier.
+        * @return A new {@link BasicNameValuePair} object.
+        */
+       public static BasicNameValuePair of(String name, Supplier<?> value) {
+               return new BasicNameValuePair(name, value);
+       }
+
+       /**
         * Constructor.
         *
         * @param name The parameter name.
@@ -55,6 +72,12 @@ public class BasicNameValuePair implements NameValuePair {
 
        @Override /* NameValuePair */
        public String getValue() {
-               return stringify(value);
+               return stringify(unwrap(value));
+       }
+
+       private Object unwrap(Object o) {
+               if (o instanceof Supplier)
+                       return ((Supplier<?>)o).get();
+               return o;
        }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentEncodingEnum.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentEncodingEnum.java
deleted file mode 100644
index 10f7da9..0000000
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentEncodingEnum.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// 
***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not 
use this file except in compliance            *
-// * with the License.  You may obtain a copy of the License at                
                                              *
-// *                                                                           
                                              *
-// *  http://www.apache.org/licenses/LICENSE-2.0                               
                                              *
-// *                                                                           
                                              *
-// * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the        *
-// * specific language governing permissions and limitations under the 
License.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.http;
-
-/**
- * Represents the possible values for a <c>Content-Encoding</c> header.
- *
- * <ul class='seealso'>
- *     <li class='extlink'>{@doc RFC2616}
- * </ul>
- */
-public enum ContentEncodingEnum {
-
-       /** Content-Encoding: gzip */
-       GZIP,
-
-       /** Content-Encoding: compress */
-       COMPRESS,
-
-       /** Content-Encoding: deflate */
-       DEFLATE,
-
-       /** Content-Encoding: identity */
-       IDENTITY,
-
-       /** Unknown value */
-       OTHER;
-}
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairs.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairs.java
index 832e915..642365d 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairs.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NameValuePairs.java
@@ -15,6 +15,7 @@ package org.apache.juneau.http;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
+import java.util.function.*;
 
 import org.apache.http.*;
 import org.apache.juneau.*;
@@ -161,6 +162,24 @@ public class NameValuePairs extends 
LinkedList<NameValuePair> {
        }
 
        /**
+        * Appends the specified name/value pair to the end of this list using 
a value supplier.
+        *
+        * <p>
+        * The pair is added as a {@link BasicNameValuePair}.
+        *
+        * <p>
+        * Value is re-evaluated on each call to {@link 
BasicNameValuePair#getValue()}.
+        *
+        * @param name The pair name.
+        * @param value The pair value supplier.
+        * @return This object (for method chaining).
+        */
+       public NameValuePairs append(String name, Supplier<?> value) {
+               super.add(new BasicNameValuePair(name, value));
+               return this;
+       }
+
+       /**
         * Appends the specified name/value pair to the end of this list.
         *
         * <p>
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHeader.java
index cff3ece..94f7eda 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedHeader.java
@@ -14,6 +14,8 @@ package org.apache.juneau.http;
 
 import static org.apache.juneau.internal.StringUtils.*;
 
+import java.util.function.*;
+
 import org.apache.http.*;
 import org.apache.juneau.*;
 import org.apache.juneau.http.header.*;
@@ -63,6 +65,7 @@ public class SerializedHeader extends BasicStringHeader {
         *      <br>If <jk>null</jk>, defaults to the schema defined on the 
serializer.
         *      <br>If that's also <jk>null</jk>, defaults to {@link 
HttpPartSchema#DEFAULT}.
         *      <br>Only used if serializer is schema-aware (e.g. {@link 
OpenApiSerializer}).
+        *      <br>Can also be a {@link Supplier}.
         * @param skipIfEmpty If value is a blank string, the value should 
return as <jk>null</jk>.
         */
        public SerializedHeader(String name, Object value, 
HttpPartSerializerSession serializer, HttpPartSchema schema, boolean 
skipIfEmpty) {
@@ -112,6 +115,19 @@ public class SerializedHeader extends BasicStringHeader {
                }
 
                /**
+                * Sets the POJO supplier to serialize to the parameter value.
+                * <p>
+                * Value is re-evaluated on each call to {@link #getValue()}.
+                *
+                * @param value The new value for this property.
+                * @return This object (for method chaining).
+                */
+               public Builder value(Supplier<?> value) {
+                       this.value = value;
+                       return this;
+               }
+
+               /**
                 * Sets the serializer to use for serializing the value to a 
string value.
                 *
                 * @param value The new value for this property.
@@ -158,15 +174,16 @@ public class SerializedHeader extends BasicStringHeader {
        @Override /* NameValuePair */
        public String getValue() {
                try {
-                       if (value == null) {
+                       Object v = unwrap(value);
+                       if (v == null) {
                                if (schema == null)
                                        return null;
                                if (schema.getDefault() == null && ! 
schema.isRequired())
                                        return null;
                        }
-                       if (isEmpty(value) && skipIfEmpty && 
schema.getDefault() == null)
+                       if (isEmpty(v) && skipIfEmpty && schema.getDefault() == 
null)
                                return null;
-                       return serializer.serialize(HttpPartType.HEADER, 
schema, value);
+                       return serializer.serialize(HttpPartType.HEADER, 
schema, v);
                } catch (SchemaValidationException e) {
                        throw new BasicRuntimeException(e, "Validation error on 
request {0} parameter ''{1}''=''{2}''", HttpPartType.HEADER, getName(), value);
                } catch (SerializeException e) {
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedNameValuePair.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedNameValuePair.java
index 90d73e9..3ad07e0 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedNameValuePair.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/SerializedNameValuePair.java
@@ -202,9 +202,7 @@ public class SerializedNameValuePair implements 
NameValuePair {
        @Override /* NameValuePair */
        public String getValue() {
                try {
-                       Object v = value;
-                       if (v instanceof Supplier)
-                               v = ((Supplier<?>)v).get();
+                       Object v = unwrap(value);
                        if (v == null) {
                                if (schema == null)
                                        return null;
@@ -225,4 +223,10 @@ public class SerializedNameValuePair implements 
NameValuePair {
        public String toString() {
                return name + "=" + getValue();
        }
+
+       private Object unwrap(Object o) {
+               if (o instanceof Supplier)
+                       return ((Supplier<?>)o).get();
+               return o;
+       }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
index 52d9b7b..002454a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
@@ -12,12 +12,13 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.StringUtils.*;
+
 import java.lang.reflect.*;
 import java.util.*;
 import java.util.function.*;
 
 import org.apache.juneau.collections.*;
-import org.apache.juneau.internal.*;
 
 /**
  * Category of headers that consist of a comma-delimited list of string values.
@@ -110,7 +111,7 @@ public class BasicCsvArrayHeader extends BasicHeader {
                        return null;
                if (o instanceof String)
                        return (String)o;
-               return StringUtils.joine(getParsedValue(), ',');
+               return joine(getParsedValue(), ',');
        }
 
        /**
@@ -154,12 +155,12 @@ public class BasicCsvArrayHeader extends BasicHeader {
                AList<String> l = AList.of();
                if (o instanceof Collection) {
                        for (Object o2 : (Collection<?>)o)
-                               l.add(StringUtils.asString(o2));
+                               l.add(stringify(o2));
                } else if (o.getClass().isArray()) {
                        for (int i = 0; i < Array.getLength(o); i++)
-                               l.add(StringUtils.asString(Array.get(o, i)));
+                               l.add(stringify(Array.get(o, i)));
                } else {
-                       for (String s : StringUtils.split(o.toString()))
+                       for (String s : split(o.toString()))
                                l.add(s);
                }
                return l.unmodifiable();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicHeader.java
index 3fa4b64..adac8cb 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicHeader.java
@@ -12,13 +12,14 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http.header;
 
+import static org.apache.juneau.internal.StringUtils.*;
+
 import java.io.*;
 import java.util.function.*;
 
 import org.apache.http.*;
 import org.apache.http.message.*;
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.internal.*;
 
 /**
  * Superclass of all headers defined in this package.
@@ -82,7 +83,7 @@ public class BasicHeader implements Header, Cloneable, 
Serializable {
 
        @Override /* Header */
        public String getValue() {
-               return StringUtils.asString(getRawValue());
+               return stringify(getRawValue());
        }
 
        /**
@@ -91,10 +92,7 @@ public class BasicHeader implements Header, Cloneable, 
Serializable {
         * @return The raw value of the header.
         */
        protected Object getRawValue() {
-               if (value instanceof Supplier) {
-                       return ((Supplier<?>)value).get();
-               }
-               return value;
+               return unwrap(value);
        }
 
        @Override
@@ -136,6 +134,18 @@ public class BasicHeader implements Header, Cloneable, 
Serializable {
                return o instanceof Supplier;
        }
 
+       /**
+        * If the specified object is a {@link Supplier}, returns the supplied 
value, otherwise the same value.
+        *
+        * @param o The object to unwrap.
+        * @return The unwrapped object.
+        */
+       protected Object unwrap(Object o) {
+               if (o instanceof Supplier)
+                       return ((Supplier<?>)o).get();
+               return o;
+       }
+
        @Override /* Object */
        public String toString() {
                return name + ": " + getValue();
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
index ea49687..b852403 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/StringUtils.java
@@ -24,7 +24,6 @@ import java.text.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.*;
-import java.util.function.*;
 import java.util.regex.*;
 
 import javax.xml.bind.*;
@@ -1646,7 +1645,7 @@ public final class StringUtils {
         * @return The object converted to a string, or <jk>null</jk> if the 
object was null.
         */
        public static String stringify(Object o) {
-               return (o == null ? null : o.toString());
+               return o == null ? null : o.toString();
        }
 
        /**
@@ -2810,18 +2809,6 @@ public final class StringUtils {
        }
 
        /**
-        * Converts the value to a string if it's not <jk>null</jk>.
-        *
-        * @param value The value to convert to a string.
-        * @return The value converted to a string or <jk>null</jk> if the 
value was <jk>null</jk>.
-        */
-       public static String asString(Object value) {
-               if (value instanceof Supplier)
-                       value = ((Supplier<?>)value).get();
-               return value == null ? null : value.toString();
-       }
-
-       /**
         * Splits the method arguments in the signature of a method.
         *
         * @param s The arguments to split.
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
index 60b9115..8589f91 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
@@ -20,6 +20,7 @@ import java.io.*;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.*;
+import java.util.function.*;
 import java.util.logging.*;
 
 import org.apache.http.*;
@@ -120,6 +121,21 @@ public class RestClientTest {
                CALENDAR.set(2000, 11, 31, 12, 34, 56);
        }
 
+       public static class TestSupplier implements Supplier<Object> {
+               public Object value;
+
+               public TestSupplier set(Object value) {
+                       this.value = value;
+                       return this;
+               }
+
+               @Override
+               public Object get() {
+                       return value;
+               }
+
+       }
+
        
//------------------------------------------------------------------------------------------------------------------
        // Override client and builder.
        
//------------------------------------------------------------------------------------------------------------------
@@ -411,6 +427,30 @@ public class RestClientTest {
        }
 
        @Test
+       public void f01a_supplierHeader() throws Exception {
+               TestSupplier s = new TestSupplier().set("foo");
+
+               RestClient rc = MockRestClient
+                       .create(A.class)
+                       .simpleJson()
+                       .header("Check", "Foo")
+                       .header("Foo", s)
+                       .build();
+
+               rc.get("/checkHeader")
+                       .header("Foo", s)
+                       .run()
+                       .assertBody().is("['foo','foo']");
+
+               s.set("bar");
+
+               rc.get("/checkHeader")
+                       .header("Foo", s)
+                       .run()
+                       .assertBody().is("['bar','bar']");
+       }
+
+       @Test
        public void f02_beanHeader() throws Exception {
                MockRestClient
                        .create(A.class)

Reply via email to