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 d660550  Docs and Assertions fixes.
d660550 is described below

commit d660550674ffb749bb8dd663ba9f372d2e1920fb
Author: JamesBognar <[email protected]>
AuthorDate: Tue Jul 7 09:22:48 2020 -0400

    Docs and Assertions fixes.
---
 .../org/apache/juneau/http/HeaderSupplierTest.java | 99 ++++++++++++++++++----
 .../org/apache/juneau/assertions/Assertion.java    | 22 ++++-
 .../apache/juneau/assertions/FluentAssertion.java  | 11 +++
 .../assertions/FluentByteArrayAssertion.java       | 20 ++++-
 .../juneau/assertions/FluentDateAssertion.java     | 12 +++
 .../juneau/assertions/FluentIntegerAssertion.java  | 12 +++
 .../juneau/assertions/FluentLongAssertion.java     | 12 +++
 .../juneau/assertions/FluentObjectAssertion.java   | 14 ++-
 .../juneau/assertions/FluentStringAssertion.java   | 12 +++
 .../assertions/FluentThrowableAssertion.java       | 23 +++--
 .../apache/juneau/assertions/StringAssertion.java  | 12 +++
 .../org/apache/juneau/http/HeaderSupplier.java     |  2 +-
 .../06.juneau-rest-server/24.SvlVariables.html     |  4 +-
 .../11.RestProxies/01.Remote.html                  |  4 +-
 juneau-doc/src/main/javadoc/overview.html          | 26 +++---
 .../client2/RestResponseStatusLineAssertion.java   | 10 +--
 16 files changed, 240 insertions(+), 55 deletions(-)

diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
index 639cd0b..1bf6e58 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/http/HeaderSupplierTest.java
@@ -16,7 +16,10 @@ import static org.apache.juneau.assertions.Assertions.*;
 import static org.junit.runners.MethodSorters.*;
 
 import org.apache.http.*;
+import org.apache.juneau.collections.*;
 import org.apache.juneau.http.header.*;
+import org.apache.juneau.httppart.*;
+import org.apache.juneau.oapi.*;
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
@@ -24,27 +27,87 @@ public class HeaderSupplierTest {
 
        @Test
        public void a01_basic() {
-               HeaderSupplier h = HeaderSupplier.of();
-               assertObject(h.iterator()).json().is("[]");
-               h.add(header("Foo","bar"));
-               assertObject(h.iterator()).json().is("['Foo: bar']");
-               h.add(header("Foo","baz"));
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: baz']");
-               h.add(HeaderSupplier.of());
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: baz']");
-               h.add(HeaderSupplier.of(header("Foo","qux")));
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux']");
-               h.add(HeaderSupplier.of(header("Foo","q2x"), 
header("Foo","q3x")));
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x']");
-               
h.add(HeaderSupplier.of(HeaderSupplier.of(header("Foo","q4x"),header("Foo","q5x"))));
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
-               h.add((Header)null);
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
-               h.add((HeaderSupplier)null);
-               assertObject(h.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
+               HeaderSupplier x = HeaderSupplier.of();
+
+               assertObject(x.iterator()).json().is("[]");
+               x.add(header("Foo","bar"));
+               assertObject(x.iterator()).json().is("['Foo: bar']");
+               x.add(header("Foo","baz"));
+               assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+               x.add(HeaderSupplier.of());
+               assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+               x.add(HeaderSupplier.of(header("Foo","qux")));
+               assertObject(x.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux']");
+               x.add(HeaderSupplier.of(header("Foo","q2x"), 
header("Foo","q3x")));
+               assertObject(x.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x']");
+               
x.add(HeaderSupplier.of(HeaderSupplier.of(header("Foo","q4x"),header("Foo","q5x"))));
+               assertObject(x.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
+               x.add((Header)null);
+               assertObject(x.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
+               x.add((HeaderSupplier)null);
+               assertObject(x.iterator()).json().is("['Foo: bar','Foo: 
baz','Foo: qux','Foo: q2x','Foo: q3x','Foo: q4x','Foo: q5x']");
+       }
+
+       @Test
+       public void a02_creators() {
+               HeaderSupplier x;
+
+               x = HeaderSupplier.of(header("Foo","bar"), header("Foo","baz"), 
null);
+               assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+
+               x = HeaderSupplier.of(AList.of(header("Foo","bar"), 
header("Foo","baz"), null));
+               assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+
+               x = HeaderSupplier.ofPairs("Foo","bar","Foo","baz");
+               assertObject(x.iterator()).json().is("['Foo: bar','Foo: baz']");
+
+               assertThrown(()->HeaderSupplier.ofPairs("Foo")).is("Odd number 
of parameters passed into HeaderSupplier.ofPairs()");
+
+               assertThrown(()->HeaderSupplier.of("Foo")).is("Invalid type 
passed to HeaderSupplier.of(): java.lang.String");
+       }
+
+       @Test
+       public void a03_addMethods() {
+               String pname = "HeaderSupplierTest.x";
+
+               HeaderSupplier x = HeaderSupplier.create().resolving();
+               System.setProperty(pname, "y");
+
+               x.add("X1","bar");
+               x.add("X2","$S{"+pname+"}");
+               x.add("X3","bar");
+               x.add("X4",()->"$S{"+pname+"}");
+               x.add("X5","bar",openApiSession(),null,false);
+               x.add("X6","$S{"+pname+"}",openApiSession(),null,false);
+
+               
assertString(x.toString()).is("X1=bar&X2=y&X3=bar&X4=y&X5=bar&X6=y");
+
+               System.setProperty(pname, "z");
+
+               
assertString(x.toString()).is("X1=bar&X2=z&X3=bar&X4=z&X5=bar&X6=z");
+
+               System.clearProperty(pname);
        }
 
+       @Test
+       public void a04_toArrayMethods() {
+               Header[] x = HeaderSupplier
+                       .create()
+                       .add("X1","1")
+                       .add(HeaderSupplier.ofPairs("X2","2"))
+                       .toArray();
+               assertObject(x).json().is("['X1: 1','X2: 2']");
+       }
+
+       
//-----------------------------------------------------------------------------------------------------------------
+       // Utility methods
+       
//-----------------------------------------------------------------------------------------------------------------
+
        private static Header header(String name, Object val) {
                return BasicHeader.of(name, val);
        }
+
+       private static HttpPartSerializerSession openApiSession() {
+               return OpenApiSerializer.DEFAULT.createPartSession(null);
+       }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/Assertion.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/Assertion.java
index ba425e6..5b9a71a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/Assertion.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/Assertion.java
@@ -22,9 +22,25 @@ import org.apache.juneau.internal.*;
  */
 public class Assertion {
 
-       private String msg;
-       private Object[] msgArgs;
-       private boolean stdout, stderr;
+       String msg;
+       Object[] msgArgs;
+       boolean stdout, stderr;
+
+       /**
+        * No-arg constructor.
+        */
+       protected Assertion() {}
+
+       /**
+        * Constructor used when this assertion is being created from within 
another assertion.
+        * @param creator The creator of this assertion.
+        */
+       protected Assertion(Assertion creator) {
+               this.msg = creator.msg;
+               this.msgArgs = creator.msgArgs;
+               this.stdout = creator.stdout;
+               this.stderr = creator.stderr;
+       }
 
        /**
         * Allows to to specify the assertion failure message.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentAssertion.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentAssertion.java
index 9c74bd0..ef95776 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentAssertion.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentAssertion.java
@@ -34,6 +34,17 @@ public abstract class FluentAssertion<R> extends Assertion {
        }
 
        /**
+        * Constructor.
+        *
+        * @param creator The assertion that created this assertion.
+        * @param returns The object to return after the test.
+        */
+       protected FluentAssertion(Assertion creator, R returns) {
+               super(creator);
+               this.returns = returns;
+       }
+
+       /**
         * Returns the object that the fluent methods on this class should 
return.
         *
         * @return The response object.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java
index 12fdba0..5481b9b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentByteArrayAssertion.java
@@ -40,6 +40,18 @@ public class FluentByteArrayAssertion<R> extends 
FluentAssertion<R> {
        }
 
        /**
+        * Constructor.
+        *
+        * @param creator The assertion that created this assertion.
+        * @param contents The byte array being tested.
+        * @param returns The object to return after the test.
+        */
+       public FluentByteArrayAssertion(Assertion creator, byte[] contents, R 
returns) {
+               super(creator, returns);
+               this.contents = contents;
+       }
+
+       /**
         * Converts this byte array to a UTF-8 encoded string and returns it as 
a new assertion.
         *
         * <h5 class='section'>Example:</h5>
@@ -67,7 +79,7 @@ public class FluentByteArrayAssertion<R> extends 
FluentAssertion<R> {
         * @return A new fluent string assertion.
         */
        public FluentStringAssertion<R> string(Charset cs) {
-               return new FluentStringAssertion<>(contents == null ? null : 
new String(contents, cs), returns());
+               return new FluentStringAssertion<>(this, contents == null ? 
null : new String(contents, cs), returns());
        }
 
        /**
@@ -82,7 +94,7 @@ public class FluentByteArrayAssertion<R> extends 
FluentAssertion<R> {
         * @return A new fluent string assertion.
         */
        public FluentStringAssertion<R> base64() {
-               return new FluentStringAssertion<>(contents == null ? null : 
base64Encode(contents), returns());
+               return new FluentStringAssertion<>(this, contents == null ? 
null : base64Encode(contents), returns());
        }
 
        /**
@@ -97,7 +109,7 @@ public class FluentByteArrayAssertion<R> extends 
FluentAssertion<R> {
         * @return A new string consisting of hexadecimal characters.
         */
        public FluentStringAssertion<R> hex() {
-               return new FluentStringAssertion<>(contents == null ? null : 
toHex(contents), returns());
+               return new FluentStringAssertion<>(this, contents == null ? 
null : toHex(contents), returns());
        }
 
        /**
@@ -112,7 +124,7 @@ public class FluentByteArrayAssertion<R> extends 
FluentAssertion<R> {
         * @return A new string consisting of hexadecimal characters.
         */
        public FluentStringAssertion<R> spacedHex() {
-               return new FluentStringAssertion<>(contents == null ? null : 
toSpacedHex(contents), returns());
+               return new FluentStringAssertion<>(this, contents == null ? 
null : toSpacedHex(contents), returns());
        }
 
        // <FluentSetters>
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java
index b9c26ce..40170de 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentDateAssertion.java
@@ -51,6 +51,18 @@ public class FluentDateAssertion<R> extends 
FluentAssertion<R> {
        }
 
        /**
+        * Constructor.
+        *
+        * @param creator The assertion that created this assertion.
+        * @param value The value being tested.
+        * @param returns The object to return after the test.
+        */
+       public FluentDateAssertion(Assertion creator, Date value, R returns) {
+               super(creator, returns);
+               this.value = value;
+       }
+
+       /**
         * Asserts that the value equals the specified value.
         *
         * @param value The value to check against.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java
index 2985951..113b7a7 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentIntegerAssertion.java
@@ -49,6 +49,18 @@ public class FluentIntegerAssertion<R> extends 
FluentAssertion<R> {
        }
 
        /**
+        * Constructor.
+        *
+        * @param creator The assertion that created this assertion.
+        * @param value The value being tested.
+        * @param returns The object to return after the test.
+        */
+       public FluentIntegerAssertion(Assertion creator, Integer value, R 
returns) {
+               super(creator, returns);
+               this.value = value;
+       }
+
+       /**
         * Asserts that the value equals the specified value.
         *
         * @param value The value to check against.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java
index 2aadd42..5903552 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentLongAssertion.java
@@ -49,6 +49,18 @@ public class FluentLongAssertion<R> extends 
FluentAssertion<R> {
        }
 
        /**
+        * Constructor.
+        *
+        * @param creator The assertion that created this assertion.
+        * @param value The value being tested.
+        * @param returns The object to return after the test.
+        */
+       public FluentLongAssertion(Assertion creator, Long value, R returns) {
+               super(creator, returns);
+               this.value = value;
+       }
+
+       /**
         * Asserts that the value equals the specified value.
         *
         * @param value The value to check against.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
index 708601f..f14b58a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
@@ -66,6 +66,18 @@ public class FluentObjectAssertion<R> extends 
FluentAssertion<R> {
        }
 
        /**
+        * Constructor.
+        *
+        * @param creator The assertion that created this assertion.
+        * @param o The object being tested.
+        * @param returns The object to return after the test.
+        */
+       public FluentObjectAssertion(Assertion creator, Object o, R returns) {
+               super(creator, returns);
+               this.value = o;
+       }
+
+       /**
         * Asserts that the object is an instance of the specified class.
         *
         * <h5 class='section'>Example:</h5>
@@ -101,7 +113,7 @@ public class FluentObjectAssertion<R> extends 
FluentAssertion<R> {
        public FluentStringAssertion<R> serialized(WriterSerializer ws) {
                try {
                        String s = ws.serialize(this.value);
-                       return new FluentStringAssertion<>(s, returns());
+                       return new FluentStringAssertion<>(this, s, returns());
                } catch (SerializeException e) {
                        throw new RuntimeException(e);
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
index 20d5f90..7db0be3 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentStringAssertion.java
@@ -53,6 +53,18 @@ public class FluentStringAssertion<R> extends 
FluentAssertion<R> {
        }
 
        /**
+        * Constructor.
+        *
+        * @param creator The assertion that created this assertion.
+        * @param text The text being tested.
+        * @param returns The object to return after the test.
+        */
+       public FluentStringAssertion(Assertion creator, String text, R returns) 
{
+               super(creator, returns);
+               this.text = text;
+       }
+
+       /**
         * When enabled, text in the message is converted to valid Java strings.
         *
         * <p class='bcode w800'>
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
index d0c48d2..857c606 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
@@ -37,6 +37,17 @@ public class FluentThrowableAssertion<R> extends 
FluentAssertion<R> {
                this.value = value;
        }
 
+       /**
+        * Constructor.
+        *
+        * @param creator The assertion that created this assertion.
+        * @param value The throwable being tested.
+        * @param returns The object to return after the test.
+        */
+       public FluentThrowableAssertion(Assertion creator, Throwable value, R 
returns) {
+               super(creator, returns);
+               this.value = value;
+       }
 
        /**
         * Asserts that this throwable is of the specified type.
@@ -160,7 +171,7 @@ public class FluentThrowableAssertion<R> extends 
FluentAssertion<R> {
         * @return An assertion against the throwable message.  Never 
<jk>null</jk>.
         */
        public FluentStringAssertion<R> message() {
-               return new FluentStringAssertion<>(value == null ? null : 
value.getMessage(), returns());
+               return new FluentStringAssertion<>(this, value == null ? null : 
value.getMessage(), returns());
        }
 
        /**
@@ -175,7 +186,7 @@ public class FluentThrowableAssertion<R> extends 
FluentAssertion<R> {
         * @return An assertion against the throwable localized message.  Never 
<jk>null</jk>.
         */
        public FluentStringAssertion<R> localizedMessage() {
-               return new FluentStringAssertion<>(value == null ? null : 
value.getLocalizedMessage(), returns());
+               return new FluentStringAssertion<>(this, value == null ? null : 
value.getLocalizedMessage(), returns());
        }
 
        /**
@@ -190,7 +201,7 @@ public class FluentThrowableAssertion<R> extends 
FluentAssertion<R> {
         * @return An assertion against the throwable stacktrace.  Never 
<jk>null</jk>.
         */
        public FluentStringAssertion<R> stackTrace() {
-               return new FluentStringAssertion<>(value == null ? null : 
StringUtils.getStackTrace(value), returns());
+               return new FluentStringAssertion<>(this, value == null ? null : 
StringUtils.getStackTrace(value), returns());
        }
 
        /**
@@ -205,7 +216,7 @@ public class FluentThrowableAssertion<R> extends 
FluentAssertion<R> {
         * @return An assertion against the caused-by.  Never <jk>null</jk>.
         */
        public FluentThrowableAssertion<R> causedBy() {
-               return new FluentThrowableAssertion<>(value == null ? null : 
value.getCause(), returns());
+               return new FluentThrowableAssertion<>(this, value == null ? 
null : value.getCause(), returns());
        }
 
        /**
@@ -224,10 +235,10 @@ public class FluentThrowableAssertion<R> extends 
FluentAssertion<R> {
                Throwable t = value;
                while (t != null) {
                        if (throwableClass.isInstance(t))
-                               return new FluentThrowableAssertion<>(t, 
returns());
+                               return new FluentThrowableAssertion<>(this, t, 
returns());
                        t = t.getCause();
                }
-               return new FluentThrowableAssertion<>(null, returns());
+               return new FluentThrowableAssertion<>(this, null, returns());
        }
 
        // <FluentSetters>
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/StringAssertion.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/StringAssertion.java
index c30a221..877bbf6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/StringAssertion.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/StringAssertion.java
@@ -78,5 +78,17 @@ public class StringAssertion extends 
FluentStringAssertion<StringAssertion> {
                return this;
        }
 
+       @Override /* GENERATED - FluentStringAssertion */
+       public StringAssertion replace(String target, String replacement) {
+               super.replace(target, replacement);
+               return this;
+       }
+
+       @Override /* GENERATED - FluentStringAssertion */
+       public StringAssertion replaceAll(String regex, String replacement) {
+               super.replaceAll(regex, replacement);
+               return this;
+       }
+
        // </FluentSetters>
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
index 94826c3..bbc0720 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/HeaderSupplier.java
@@ -184,7 +184,7 @@ public class HeaderSupplier implements Iterable<Header> {
         * @return This object(for method chaining).
         */
        private HeaderSupplier addAll(Collection<Header> headers) {
-               
this.headers.addAll(headers.stream().map(x->Collections.singleton(x)).collect(Collectors.toList()));
+               this.headers.addAll(headers.stream().filter(x->x != 
null).map(x->Collections.singleton(x)).collect(Collectors.toList()));
                return this;
        }
 
diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/24.SvlVariables.html 
b/juneau-doc/docs/Topics/06.juneau-rest-server/24.SvlVariables.html
index 8b3cf65..90f4535 100644
--- a/juneau-doc/docs/Topics/06.juneau-rest-server/24.SvlVariables.html
+++ b/juneau-doc/docs/Topics/06.juneau-rest-server/24.SvlVariables.html
@@ -138,7 +138,7 @@ SVL Variables
                <td class='code'>$SW{arg,p1:then1[,p2:then2...]}</td>
                <td style='text-align:center;font-weight:bold'>yes</td>
                <td style='text-align:center;font-weight:bold'>yes</td>
-               <td class='code'>$SW{$P{os.name},*win*:Windows,*:Something 
else}</td>
+               <td class='code'>$SW{$S{os.name},*win*:Windows,*:Something 
else}</td>
        </tr>
        <tr class='dark'>
                <td>{@link oaj.svl.vars.CoalesceVar}</td>
@@ -152,7 +152,7 @@ SVL Variables
                <td class='code'>$PM{arg,pattern}</td>
                <td style='text-align:center;font-weight:bold'>yes</td>
                <td style='text-align:center;font-weight:bold'>yes</td>
-               <td class='code'>$PM{$P{os.name},*win*}</td>
+               <td class='code'>$PM{$S{os.name},*win*}</td>
        </tr>
        <tr class='dark'>
                <td>{@link oaj.svl.vars.NotEmptyVar}</td>
diff --git 
a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/01.Remote.html 
b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/01.Remote.html
index f50fdf0..28c7521 100644
--- a/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/01.Remote.html
+++ b/juneau-doc/docs/Topics/09.juneau-rest-client/11.RestProxies/01.Remote.html
@@ -62,7 +62,7 @@ specific language governing permissions and limitations under 
the License.
 <h5 class='figure'>Example:</h5>
 <p class='bpcode w800'>        
        <jc>// URL is specified via a system property.</jc>
-       <ja>@Remote</ja>(path=<js>"$P{PetStoreUrl}"</js>)
+       <ja>@Remote</ja>(path=<js>"$S{PetStoreUrl}"</js>)
        <jk>public interface</jk> PetStore {...}
 </p>
 
@@ -117,7 +117,7 @@ specific language governing permissions and limitations 
under the License.
                path=<js>"/petstore"</js>,
                headers={
                        <js>"Foo: bar"</js>,
-                       <js>"Baz: $P{bazProperty}"</js>
+                       <js>"Baz: $S{bazProperty}"</js>
                },
                headerSupplier=MyDynamicHeaderSupplier.<jk>class</jk>
        )
diff --git a/juneau-doc/src/main/javadoc/overview.html 
b/juneau-doc/src/main/javadoc/overview.html
index 635639c..8a7807a 100644
--- a/juneau-doc/src/main/javadoc/overview.html
+++ b/juneau-doc/src/main/javadoc/overview.html
@@ -24070,7 +24070,7 @@
                {@link java.io.InputStream} - Raw contents of {@code 
InputStream} will be serialized to remote resource.
                <br><c>Content-Type</c> is set to 
<js>"application/octet-stream"</js>.
        <li>
-               <c>NameValuePairs</c> - Converted to a URL-encoded FORM post.
+               {@link org.apache.juneau.http.NameValuePairSupplier} - 
Converted to a URL-encoded FORM post.
                <br><c>Content-Type</c> is set to 
<js>"aplication/x-www-form-urlencoded"</js>.
        <li>
                <c>HttpEntity</c> - Bypass Juneau serialization and pass 
HttpEntity directly to HttpClient.
@@ -24173,10 +24173,10 @@
                        <ja>@FormData</ja>(<js>"bar"</js>)</ja> MyPojo 
<jv>pojo</jv>
                );
 
-               <jc>// Multiple values pulled from a NameValuePairs object.</jc>
+               <jc>// Multiple values pulled from a NameValuePairSupplier 
object.</jc>
                <jc>// Name "*" is inferred.</jc>
                <ja>@RemoteMethod</ja>
-               String postNameValuePairs(<ja>@FormData</ja> NameValuePairs 
<jv>nameValuePairs</jv>);
+               String postNameValuePairs(<ja>@FormData</ja> 
NameValuePairSupplier <jv>nameValuePairSupplier</jv>);
 
                <jc>// Multiple values pulled from a Map.</jc>
                <ja>@RemoteMethod</ja>
@@ -24213,7 +24213,7 @@
        <li>
                {@link java.io.InputStream} - Raw contents of {@code 
InputStream} will be serialized to remote resource.
        <li>
-               <c>NameValuePairs</c> - Converted to a URL-encoded FORM post.
+               {@link org.apache.juneau.http.NameValuePairSupplier} - 
Converted to a URL-encoded FORM post.
        <li>
                <c>Map</c> - Converted to key-value pairs.
                        <br>Values serialized using the registered {@link 
org.apache.juneau.httppart.HttpPartSerializer} ({@link 
org.apache.juneau.oapi.OpenApiSerializer} by default).
@@ -24279,10 +24279,10 @@
                        <ja>@Query</ja>(<js>"foo"</js>)</ja> String 
<jv>foo</jv>,
                        <ja>@Query</ja>(<js>"bar"</js>)</ja> MyPojo 
<jv>pojo</jv>);
  
-               <jc>// Multiple values pulled from a NameValuePairs object.</jc>
+               <jc>// Multiple values pulled from a NameValuePairSupplier 
object.</jc>
                <jc>// Same as @Query("*").</jc>
                <ja>@RemoteMethod</ja>
-               String nameValuePairs(<ja>@Query</ja> NameValuePairs 
<jv>nameValuePairs</jv>);
+               String nameValuePairs(<ja>@Query</ja> NameValuePairSupplier 
<jv>nameValuePairSupplier</jv>);
  
                <jc>// Multiple values pulled from a Map.</jc>
                <jc>// Same as @Query("*").</jc>
@@ -24322,7 +24322,7 @@
        <li>
                {@link java.io.Reader} - Raw contents of {@code Reader} will be 
serialized directly a query string.
        <li>
-               <c>NameValuePairs</c> - Serialized as individual query 
parameters.
+               {@link org.apache.juneau.http.NameValuePairSupplier} - 
Serialized as individual query parameters.
        <li>
                <c>Map</c> - Converted to key-value pairs.
                        <br>Values serialized using the registered {@link 
org.apache.juneau.httppart.HttpPartSerializer} ({@link 
org.apache.juneau.oapi.OpenApiSerializer} by default).
@@ -24389,10 +24389,10 @@
                String myProxyMethod1(<ja>@Header</ja>(<js>"Foo"</js>)</ja> 
String <jv>foo</jv>,
                        <ja>@Header</ja>(<js>"Bar"</js>)</ja> MyPojo 
<jv>pojo</jv>);
 
-               <jc>// Multiple values pulled from a NameValuePairs object.</jc>
+               <jc>// Multiple values pulled from a HeaderSupplier object.</jc>
                <jc>// Same as @Header("*").</jc>
                <ja>@RemoteMethod</ja>(path=<js>"/mymethod2"</js>)
-               String myProxyMethod2(<ja>@Header</ja> NameValuePairs 
<jv>nameValuePairs</jv>);
+               String myProxyMethod2(<ja>@Header</ja> HeaderSupplier 
<jv>headerSupplier</jv>);
 
                <jc>// Multiple values pulled from a Map.</jc>
                <jc>// Same as @Header("*").</jc>
@@ -24420,7 +24420,7 @@
 </p>
 <ul class='spaced-list'>
        <li>
-               <c>NameValuePairs</c> - Serialized as individual headers.
+               {@link org.apache.juneau.http.HeaderSupplier} - Serialized as 
individual headers.
        <li>
                <c>Map</c> - Converted to key-value pairs.
                        <br>Values serialized using the registered {@link 
org.apache.juneau.httppart.HttpPartSerializer} ({@link 
org.apache.juneau.oapi.OpenApiSerializer} by default).
@@ -24478,10 +24478,10 @@
                <ja>@RemoteMethod</ja>(path=<js>"/mymethod1/{foo}/{bar}"</js>)
                String myProxyMethod1(<ja>@Path</ja>(<js>"foo"</js>)</ja> 
String <jv>foo</jv>, <ja>@Path</ja>(<js>"bar"</js>)</ja> MyPojo <jv>pojo</jv>);
 
-               <jc>// Multiple values pulled from a NameValuePairs object.</jc>
+               <jc>// Multiple values pulled from a NameValuePairSupplier 
object.</jc>
                <jc>// Same as @Path("*").</jc>
                
<ja>@RemoteMethod</ja>(path=<js>"/mymethod2/{foo}/{bar}/{baz}"</js>)
-               String myProxyMethod2(<ja>@Path</ja> NameValuePairs 
<jv>nameValuePairs</jv>);
+               String myProxyMethod2(<ja>@Path</ja> NameValuePairSupplier 
<jv>nameValuePairSupplier</jv>);
 
                <jc>// Multiple values pulled from a Map.</jc>
                <jc>// Same as @Path("*").</jc>
@@ -24509,7 +24509,7 @@
 </p>
 <ul class='spaced-list'>
        <li>
-               <c>NameValuePairs</c> - Serialized as individual query 
parameters.
+               {@link org.apache.juneau.http.NameValuePairSupplier} - 
Serialized as individual path parameters.
        <li>
                <c>Map</c> - Converted to key-value pairs.
                        <br>Values serialized using the registered {@link 
org.apache.juneau.httppart.HttpPartSerializer} ({@link 
org.apache.juneau.oapi.OpenApiSerializer} by default).
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseStatusLineAssertion.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseStatusLineAssertion.java
index 551e65f..e7089ff 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseStatusLineAssertion.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseStatusLineAssertion.java
@@ -48,7 +48,7 @@ public class RestResponseStatusLineAssertion extends 
FluentAssertion<RestRespons
         * @return An assertion against the status code on the response status 
object.
         */
        public FluentIntegerAssertion<RestResponse> code() {
-               return new FluentIntegerAssertion<>(statusLine.getStatusCode(), 
returns());
+               return new FluentIntegerAssertion<>(this, 
statusLine.getStatusCode(), returns());
        }
 
        /**
@@ -57,7 +57,7 @@ public class RestResponseStatusLineAssertion extends 
FluentAssertion<RestRespons
         * @return An assertion against the reason phrase on the response 
status object.
         */
        public FluentStringAssertion<RestResponse> reason() {
-               return new 
FluentStringAssertion<>(statusLine.getReasonPhrase(), returns());
+               return new FluentStringAssertion<>(this, 
statusLine.getReasonPhrase(), returns());
        }
 
        /**
@@ -66,7 +66,7 @@ public class RestResponseStatusLineAssertion extends 
FluentAssertion<RestRespons
         * @return An assertion against the protocol on the response status 
object.
         */
        public FluentStringAssertion<RestResponse> protocol() {
-               return new 
FluentStringAssertion<>(statusLine.getProtocolVersion().getProtocol(), 
returns());
+               return new FluentStringAssertion<>(this, 
statusLine.getProtocolVersion().getProtocol(), returns());
        }
 
        /**
@@ -75,7 +75,7 @@ public class RestResponseStatusLineAssertion extends 
FluentAssertion<RestRespons
         * @return An assertion against the protocol major version on the 
response status object.
         */
        public FluentIntegerAssertion<RestResponse> major() {
-               return new 
FluentIntegerAssertion<>(statusLine.getProtocolVersion().getMajor(), returns());
+               return new FluentIntegerAssertion<>(this, 
statusLine.getProtocolVersion().getMajor(), returns());
        }
 
        /**
@@ -84,6 +84,6 @@ public class RestResponseStatusLineAssertion extends 
FluentAssertion<RestRespons
         * @return An assertion against the protocol minor version on the 
response status object.
         */
        public FluentIntegerAssertion<RestResponse> minor() {
-               return new 
FluentIntegerAssertion<>(statusLine.getProtocolVersion().getMinor(), returns());
+               return new FluentIntegerAssertion<>(this, 
statusLine.getProtocolVersion().getMinor(), returns());
        }
 }

Reply via email to