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)