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 67c883e  RestClient tests
67c883e is described below

commit 67c883ed1e706ab04aaaf660363e95bbce7b6e55
Author: JamesBognar <[email protected]>
AuthorDate: Mon Mar 23 19:22:44 2020 -0400

    RestClient tests
---
 .../org/apache/juneau/http/BasicDateHeader.java    |  63 +++-
 .../{BasicDateHeader.java => ClientVersion.java}   |  47 +--
 .../java/org/apache/juneau/http/ContentLength.java |   9 +
 .../src/main/java/org/apache/juneau/http/Date.java |  28 +-
 .../main/java/org/apache/juneau/http/Expires.java  |  23 +-
 .../http/{BasicDateHeader.java => Forwarded.java}  |  47 +--
 .../org/apache/juneau/http/IfModifiedSince.java    |  23 +-
 .../org/apache/juneau/http/IfUnmodifiedSince.java  |  23 +-
 .../java/org/apache/juneau/http/LastModified.java  |  23 +-
 .../http/{BasicDateHeader.java => NoTrace.java}    |  47 +--
 .../http/{BasicDateHeader.java => Origin.java}     |  47 +--
 .../juneau/rest/client2/RestClientBuilderTest.java | 365 +++++++++++++++++++++
 .../juneau/rest/mock2/MockServletRequest.java      |   2 +-
 .../java/org/apache/juneau/rest/RestContext.java   |   4 +-
 .../juneau/rest/mock/MockServletRequest.java       |   2 +-
 15 files changed, 601 insertions(+), 152 deletions(-)

diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
index 7a88fb2..3f8237c 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
@@ -12,7 +12,12 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http;
 
-import org.apache.juneau.internal.*;
+import static java.time.format.DateTimeFormatter.*;
+
+import java.time.*;
+import java.util.*;
+
+import org.apache.juneau.annotation.*;
 
 /**
  * Category of headers that consist of a single HTTP-date.
@@ -27,34 +32,62 @@ import org.apache.juneau.internal.*;
  *     <li class='extlink'>{@doc RFC2616}
  * </ul>
  */
+@BeanIgnore
 public class BasicDateHeader extends BasicHeader {
 
-       private final java.util.Date date;
-       private final String raw;
+       private final ZonedDateTime zdt;
 
        /**
         * Constructor.
         *
         * @param name The HTTP header name.
-        * @param raw The raw header value.
+        * @param value The raw header value.
+        */
+       public BasicDateHeader(String name, String value) {
+               super(name, value);
+               this.zdt = ZonedDateTime.from(RFC_1123_DATE_TIME.parse(value));
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param name The HTTP header name.
+        * @param value The header value.
+        */
+       public BasicDateHeader(String name, Calendar value) {
+               this(name, asZdt(value));
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param name The HTTP header name.
+        * @param value The header value.
+        */
+       public BasicDateHeader(String name, ZonedDateTime value) {
+               super(name, RFC_1123_DATE_TIME.format(value));
+               this.zdt = value;
+       }
+
+       /**
+        * Returns this header value as a {@link java.util.Calendar}.
+        *
+        * @return This header value as a {@link java.util.Calendar}, or 
<jk>null</jk> if the header could not be parsed.
         */
-       protected BasicDateHeader(String name, String raw) {
-               super(name, raw);
-               this.raw = raw;
-               this.date = DateUtils.parseDate(raw);
+       public Calendar asCalendar() {
+               return GregorianCalendar.from(zdt);
        }
 
        /**
-        * Returns this header value as a {@link java.util.Date}.
+        * Returns this header value as a {@link java.util.Calendar}.
         *
-        * @return This header value as a {@link java.util.Date}, or 
<jk>null</jk> if the header could not be parsed.
+        * @return This header value as a {@link java.util.Calendar}, or 
<jk>null</jk> if the header could not be parsed.
         */
-       public java.util.Date asDate() {
-               return date;
+       public ZonedDateTime asZonedDateTime() {
+               return zdt;
        }
 
-       @Override /* Object */
-       public String toString() {
-               return raw;
+       private static ZonedDateTime asZdt(Calendar o) {
+               return o instanceof GregorianCalendar ? 
((GregorianCalendar)o).toZonedDateTime() : 
o.toInstant().atZone(ZoneId.systemDefault());
        }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ClientVersion.java
similarity index 63%
copy from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
copy to 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ClientVersion.java
index 7a88fb2..223021e 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ClientVersion.java
@@ -12,49 +12,32 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http;
 
-import org.apache.juneau.internal.*;
+import org.apache.juneau.http.annotation.*;
 
 /**
- * Category of headers that consist of a single HTTP-date.
- *
- * <p>
- * <h5 class='figure'>Example</h5>
- * <p class='bcode w800'>
- *     If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
- * </p>
- *
- * <ul class='seealso'>
- *     <li class='extlink'>{@doc RFC2616}
- * </ul>
+ * Represents a parsed <l>X-Client-Version</l> HTTP request header.
  */
-public class BasicDateHeader extends BasicHeader {
-
-       private final java.util.Date date;
-       private final String raw;
+@Header("X-Client-Version")
+public final class ClientVersion extends BasicStringHeader {
 
        /**
-        * Constructor.
+        * Returns a parsed <c>X-Client-Version</c> header.
         *
-        * @param name The HTTP header name.
-        * @param raw The raw header value.
+        * @param value The <c>X-Client-Version</c> header string.
+        * @return The parsed <c>X-Client-Version</c> header, or <jk>null</jk> 
if the string was null.
         */
-       protected BasicDateHeader(String name, String raw) {
-               super(name, raw);
-               this.raw = raw;
-               this.date = DateUtils.parseDate(raw);
+       public static ClientVersion forString(String value) {
+               if (value == null)
+                       return null;
+               return new ClientVersion(value);
        }
 
        /**
-        * Returns this header value as a {@link java.util.Date}.
+        * Constructor.
         *
-        * @return This header value as a {@link java.util.Date}, or 
<jk>null</jk> if the header could not be parsed.
+        * @param value The value for this header.
         */
-       public java.util.Date asDate() {
-               return date;
-       }
-
-       @Override /* Object */
-       public String toString() {
-               return raw;
+       public ClientVersion(String value) {
+               super("X-Client-Version", value);
        }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentLength.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentLength.java
index a6e307e..91a12c5 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentLength.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/ContentLength.java
@@ -71,6 +71,15 @@ public final class ContentLength extends BasicLongHeader {
        }
 
        /**
+        * Constructor.
+        *
+        * @param value The value for this header.
+        */
+       public ContentLength(Integer value) {
+               this(value == null ? null : value.longValue());
+       }
+
+       /**
         * Returns a parsed <c>Content-Length</c> header.
         *
         * @param value The <c>Content-Length</c> header string.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Date.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Date.java
index 55c2ffd..87ad081 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Date.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Date.java
@@ -12,6 +12,9 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http;
 
+import java.time.*;
+import java.util.*;
+
 import org.apache.juneau.http.annotation.*;
 
 /**
@@ -91,7 +94,30 @@ public final class Date extends BasicDateHeader {
                return new Date(value);
        }
 
-       private Date(String value) {
+       /**
+        * Constructor.
+        *
+        * @param value Header value in RFC1123 format.
+        */
+       public Date(String value) {
+               super("Date", value);
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param value Header value.
+        */
+       public Date(Calendar value) {
+               super("Date", value);
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param value Header value.
+        */
+       public Date(ZonedDateTime value) {
                super("Date", value);
        }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Expires.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Expires.java
index 2e7c225..c8f7463 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Expires.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Expires.java
@@ -12,6 +12,9 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http;
 
+import java.time.*;
+import java.util.*;
+
 import org.apache.juneau.http.annotation.*;
 
 /**
@@ -95,9 +98,27 @@ public final class Expires extends BasicDateHeader {
        /**
         * Constructor.
         *
-        * @param value The value for this header.
+        * @param value Header value in RFC1123 format.
         */
        public Expires(String value) {
                super("Expires", value);
        }
+
+       /**
+        * Constructor.
+        *
+        * @param value Header value.
+        */
+       public Expires(Calendar value) {
+               super("Expires", value);
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param value Header value.
+        */
+       public Expires(ZonedDateTime value) {
+               super("Expires", value);
+       }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Forwarded.java
similarity index 63%
copy from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
copy to 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Forwarded.java
index 7a88fb2..af17bfa 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Forwarded.java
@@ -12,49 +12,32 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http;
 
-import org.apache.juneau.internal.*;
+import org.apache.juneau.http.annotation.*;
 
 /**
- * Category of headers that consist of a single HTTP-date.
- *
- * <p>
- * <h5 class='figure'>Example</h5>
- * <p class='bcode w800'>
- *     If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
- * </p>
- *
- * <ul class='seealso'>
- *     <li class='extlink'>{@doc RFC2616}
- * </ul>
+ * Represents a parsed <l>Forwarded</l> HTTP request header.
  */
-public class BasicDateHeader extends BasicHeader {
-
-       private final java.util.Date date;
-       private final String raw;
+@Header("Forwarded")
+public final class Forwarded extends BasicStringHeader {
 
        /**
-        * Constructor.
+        * Returns a parsed <c>Forwarded</c> header.
         *
-        * @param name The HTTP header name.
-        * @param raw The raw header value.
+        * @param value The <c>Forwarded</c> header string.
+        * @return The parsed <c>Forwarded</c> header, or <jk>null</jk> if the 
string was null.
         */
-       protected BasicDateHeader(String name, String raw) {
-               super(name, raw);
-               this.raw = raw;
-               this.date = DateUtils.parseDate(raw);
+       public static Forwarded forString(String value) {
+               if (value == null)
+                       return null;
+               return new Forwarded(value);
        }
 
        /**
-        * Returns this header value as a {@link java.util.Date}.
+        * Constructor.
         *
-        * @return This header value as a {@link java.util.Date}, or 
<jk>null</jk> if the header could not be parsed.
+        * @param value The value for this header.
         */
-       public java.util.Date asDate() {
-               return date;
-       }
-
-       @Override /* Object */
-       public String toString() {
-               return raw;
+       public Forwarded(String value) {
+               super("Forwarded", value);
        }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/IfModifiedSince.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/IfModifiedSince.java
index 5fefe9b..3bb4577 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/IfModifiedSince.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/IfModifiedSince.java
@@ -12,6 +12,9 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http;
 
+import java.time.*;
+import java.util.*;
+
 import org.apache.juneau.http.annotation.*;
 
 /**
@@ -106,9 +109,27 @@ public final class IfModifiedSince extends BasicDateHeader 
{
        /**
         * Constructor.
         *
-        * @param value The value for this header.
+        * @param value Header value in RFC1123 format.
         */
        public IfModifiedSince(String value) {
                super("If-Modified-Since", value);
        }
+
+       /**
+        * Constructor.
+        *
+        * @param value Header value.
+        */
+       public IfModifiedSince(Calendar value) {
+               super("If-Modified-Since", value);
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param value Header value.
+        */
+       public IfModifiedSince(ZonedDateTime value) {
+               super("If-Modified-Since", value);
+       }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/IfUnmodifiedSince.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/IfUnmodifiedSince.java
index 4ae20cf..c9ee646 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/IfUnmodifiedSince.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/IfUnmodifiedSince.java
@@ -12,6 +12,9 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http;
 
+import java.time.*;
+import java.util.*;
+
 import org.apache.juneau.http.annotation.*;
 
 /**
@@ -78,9 +81,27 @@ public final class IfUnmodifiedSince extends BasicDateHeader 
{
        /**
         * Constructor.
         *
-        * @param value The value for this header.
+        * @param value Header value in RFC1123 format.
         */
        public IfUnmodifiedSince(String value) {
                super("If-Unmodified-Since", value);
        }
+
+       /**
+        * Constructor.
+        *
+        * @param value Header value.
+        */
+       public IfUnmodifiedSince(Calendar value) {
+               super("If-Unmodified-Since", value);
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param value Header value.
+        */
+       public IfUnmodifiedSince(ZonedDateTime value) {
+               super("If-Unmodified-Since", value);
+       }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/LastModified.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/LastModified.java
index 135f102..9197dd6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/LastModified.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/LastModified.java
@@ -12,6 +12,9 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http;
 
+import java.time.*;
+import java.util.*;
+
 import org.apache.juneau.http.annotation.*;
 
 /**
@@ -85,9 +88,27 @@ public final class LastModified extends BasicDateHeader {
        /**
         * Constructor.
         *
-        * @param value The value for this header.
+        * @param value Header value in RFC1123 format.
         */
        public LastModified(String value) {
                super("Last-Modified", value);
        }
+
+       /**
+        * Constructor.
+        *
+        * @param value Header value.
+        */
+       public LastModified(Calendar value) {
+               super("Last-Modified", value);
+       }
+
+       /**
+        * Constructor.
+        *
+        * @param value Header value.
+        */
+       public LastModified(ZonedDateTime value) {
+               super("Last-Modified", value);
+       }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
 b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NoTrace.java
similarity index 63%
copy from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
copy to 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NoTrace.java
index 7a88fb2..290cbf2 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/NoTrace.java
@@ -12,49 +12,32 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http;
 
-import org.apache.juneau.internal.*;
+import org.apache.juneau.http.annotation.*;
 
 /**
- * Category of headers that consist of a single HTTP-date.
- *
- * <p>
- * <h5 class='figure'>Example</h5>
- * <p class='bcode w800'>
- *     If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
- * </p>
- *
- * <ul class='seealso'>
- *     <li class='extlink'>{@doc RFC2616}
- * </ul>
+ * Represents a parsed <l>No-Trace</l> HTTP request header.
  */
-public class BasicDateHeader extends BasicHeader {
-
-       private final java.util.Date date;
-       private final String raw;
+@Header("No-Trace")
+public final class NoTrace extends BasicStringHeader {
 
        /**
-        * Constructor.
+        * Returns a parsed <c>No-Trace</c> header.
         *
-        * @param name The HTTP header name.
-        * @param raw The raw header value.
+        * @param value The <c>No-Trace</c> header string.
+        * @return The parsed <c>No-Trace</c> header, or <jk>null</jk> if the 
string was null.
         */
-       protected BasicDateHeader(String name, String raw) {
-               super(name, raw);
-               this.raw = raw;
-               this.date = DateUtils.parseDate(raw);
+       public static NoTrace forString(String value) {
+               if (value == null)
+                       return null;
+               return new NoTrace(value);
        }
 
        /**
-        * Returns this header value as a {@link java.util.Date}.
+        * Constructor.
         *
-        * @return This header value as a {@link java.util.Date}, or 
<jk>null</jk> if the header could not be parsed.
+        * @param value The value for this header.
         */
-       public java.util.Date asDate() {
-               return date;
-       }
-
-       @Override /* Object */
-       public String toString() {
-               return raw;
+       public NoTrace(String value) {
+               super("No-Trace", value);
        }
 }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
 b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Origin.java
similarity index 63%
copy from 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
copy to 
juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Origin.java
index 7a88fb2..9af7cfc 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/BasicDateHeader.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/Origin.java
@@ -12,49 +12,32 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.http;
 
-import org.apache.juneau.internal.*;
+import org.apache.juneau.http.annotation.*;
 
 /**
- * Category of headers that consist of a single HTTP-date.
- *
- * <p>
- * <h5 class='figure'>Example</h5>
- * <p class='bcode w800'>
- *     If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
- * </p>
- *
- * <ul class='seealso'>
- *     <li class='extlink'>{@doc RFC2616}
- * </ul>
+ * Represents a parsed <l>Origin</l> HTTP request header.
  */
-public class BasicDateHeader extends BasicHeader {
-
-       private final java.util.Date date;
-       private final String raw;
+@Header("Origin")
+public final class Origin extends BasicStringHeader {
 
        /**
-        * Constructor.
+        * Returns a parsed <c>Origin</c> header.
         *
-        * @param name The HTTP header name.
-        * @param raw The raw header value.
+        * @param value The <c>Origin</c> header string.
+        * @return The parsed <c>Origin</c> header, or <jk>null</jk> if the 
string was null.
         */
-       protected BasicDateHeader(String name, String raw) {
-               super(name, raw);
-               this.raw = raw;
-               this.date = DateUtils.parseDate(raw);
+       public static Origin forString(String value) {
+               if (value == null)
+                       return null;
+               return new Origin(value);
        }
 
        /**
-        * Returns this header value as a {@link java.util.Date}.
+        * Constructor.
         *
-        * @return This header value as a {@link java.util.Date}, or 
<jk>null</jk> if the header could not be parsed.
+        * @param value The value for this header.
         */
-       public java.util.Date asDate() {
-               return date;
-       }
-
-       @Override /* Object */
-       public String toString() {
-               return raw;
+       public Origin(String value) {
+               super("Origin", value);
        }
 }
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java
index a8f94ca..0a2a6b4 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java
@@ -15,6 +15,7 @@ package org.apache.juneau.rest.client2;
 import static org.junit.Assert.*;
 
 import java.io.*;
+import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.*;
 import java.util.logging.*;
@@ -37,7 +38,9 @@ import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.client2.ext.*;
 import org.apache.juneau.rest.mock2.*;
 import org.junit.*;
+import org.junit.runners.*;
 
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class RestClientBuilderTest {
 
        public static class Bean {
@@ -73,6 +76,11 @@ public class RestClientBuilderTest {
                }
        }
 
+       private static final Calendar CALENDAR = new 
GregorianCalendar(TimeZone.getTimeZone("Z"));
+       static {
+               CALENDAR.set(2000, 11, 31, 12, 34, 56);
+       }
+
        
//------------------------------------------------------------------------------------------------------------------
        // Override client and builder.
        
//------------------------------------------------------------------------------------------------------------------
@@ -780,6 +788,363 @@ public class RestClientBuilderTest {
                rc.get("").run().assertStatusCode(200);
        }
 
+       
//------------------------------------------------------------------------------------------------------------------
+       // Header Beans
+       
//------------------------------------------------------------------------------------------------------------------
+
+       @Test
+       public void g01_headers_accept() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Accept("text/plain"))
+                       .header("X-Name", "Accept")
+                       .header("X-Expect", "text/plain")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g02_headers_acceptCharset() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new AcceptCharset("UTF-8"))
+                       .header("X-Name", "Accept-Charset")
+                       .header("X-Expect", "UTF-8")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g03_headers_acceptEncoding() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new AcceptEncoding("identity"))
+                       .header("X-Name", "Accept-Encoding")
+                       .header("X-Expect", "identity")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g04_headers_acceptLanguage() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new AcceptLanguage("en"))
+                       .header("X-Name", "Accept-Language")
+                       .header("X-Expect", "en")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g05_headers_authorization() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Authorization("foo"))
+                       .header("X-Name", "Authorization")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g06_headers_cacheControl() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new CacheControl("none"))
+                       .header("X-Name", "Cache-Control")
+                       .header("X-Expect", "none")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g07_headers_clientVersion() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new ClientVersion("1"))
+                       .header("X-Name", "X-Client-Version")
+                       .header("X-Expect", "1")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g08_headers_connection() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Connection("foo"))
+                       .header("X-Name", "Connection")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g09_headers_contentLength() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new ContentLength(123))
+                       .header("X-Name", "Content-Length")
+                       .header("X-Expect", "123")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g10_headers_contentType() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new ContentType("foo"))
+                       .header("X-Name", "Content-Type")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g11a_headers_date() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new org.apache.juneau.http.Date("Sun, 31 Dec 
2000 12:34:56 GMT"))
+                       .header("X-Name", "Date")
+                       .header("X-Expect", "Sun, 31 Dec 2000 12:34:56 GMT")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g11b_headers_date() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new org.apache.juneau.http.Date(CALENDAR))
+                       .header("X-Name", "Date")
+                       .header("X-Expect", "Sun, 31 Dec 2000 12:34:56 GMT")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g12_headers_expect() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Expect("foo"))
+                       .header("X-Name", "Expect")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g13_headers_forwarded() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Forwarded("foo"))
+                       .header("X-Name", "Forwarded")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g14_headers_from() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new From("foo"))
+                       .header("X-Name", "From")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g15_headers_host() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Host("foo"))
+                       .header("X-Name", "Host")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g16_headers_ifMatch() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new IfMatch("foo"))
+                       .header("X-Name", "If-Match")
+                       .header("X-Expect", "\"foo\"")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g17a_headers_ifModifiedSince() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new IfModifiedSince(CALENDAR))
+                       .header("X-Name", "If-Modified-Since")
+                       .header("X-Expect", "Sun, 31 Dec 2000 12:34:56 GMT")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g17b_headers_ifModifiedSince() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new IfModifiedSince("Sun, 31 Dec 2000 12:34:56 
GMT"))
+                       .header("X-Name", "If-Modified-Since")
+                       .header("X-Expect", "Sun, 31 Dec 2000 12:34:56 GMT")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g18_headers_ifNoneMatch() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new IfNoneMatch("foo"))
+                       .header("X-Name", "If-None-Match")
+                       .header("X-Expect", "\"foo\"")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g19_headers_ifRange() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new IfRange("foo"))
+                       .header("X-Name", "If-Range")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g20a_headers_ifUnmodifiedSince() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new IfUnmodifiedSince(CALENDAR))
+                       .header("X-Name", "If-Unmodified-Since")
+                       .header("X-Expect", "Sun, 31 Dec 2000 12:34:56 GMT")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g20b_headers_ifUnmodifiedSince() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new IfUnmodifiedSince("Sun, 31 Dec 2000 
12:34:56 GMT"))
+                       .header("X-Name", "If-Unmodified-Since")
+                       .header("X-Expect", "Sun, 31 Dec 2000 12:34:56 GMT")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g21_headers_maxForwards() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new MaxForwards(10))
+                       .header("X-Name", "Max-Forwards")
+                       .header("X-Expect", "10")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g22_headers_noTrace() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new NoTrace("true"))
+                       .header("X-Name", "No-Trace")
+                       .header("X-Expect", "true")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g23_headers_origin() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Origin("foo"))
+                       .header("X-Name", "Origin")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g24_headers_pragma() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Pragma("foo"))
+                       .header("X-Name", "Pragma")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g25_headers_proxyAuthorization() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new ProxyAuthorization("foo"))
+                       .header("X-Name", "Proxy-Authorization")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g26_headers_range() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Range("foo"))
+                       .header("X-Name", "Range")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g27_headers_referer() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Referer("foo"))
+                       .header("X-Name", "Referer")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g28_headers_te() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new TE("foo"))
+                       .header("X-Name", "TE")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g29_headers_userAgent() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new UserAgent("foo"))
+                       .header("X-Name", "User-Agent")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g30_headers_upgrade() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Upgrade("foo"))
+                       .header("X-Name", "Upgrade")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g31_headers_via() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Via("foo"))
+                       .header("X-Name", "Via")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       @Test
+       public void g32_headers_warning() throws Exception {
+               RestClient rc = MockRestClient.create(F.class).simpleJson()
+                       .header(new Warning("foo"))
+                       .header("X-Name", "Warning")
+                       .header("X-Expect", "foo")
+                       .build();
+               rc.get("").run().assertStatusCode(200);
+       }
+
+       // TODO - Multiple headers
+       // TODO - Headers overridden on request.
+
 
 
 //
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockServletRequest.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockServletRequest.java
index c356bd7..49e16a7 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockServletRequest.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockServletRequest.java
@@ -848,7 +848,7 @@ public class MockServletRequest implements 
HttpServletRequest, MockHttpRequest {
        @Override /* HttpServletRequest */
        public long getDateHeader(String name) {
                String s = getHeader(name);
-               return s == null ? 0 : 
org.apache.juneau.http.Date.forString(s).asDate().getTime();
+               return s == null ? 0 : 
org.apache.juneau.http.Date.forString(s).asZonedDateTime().toInstant().toEpochMilli();
        }
 
        @Override /* HttpServletRequest */
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 5cd8a91..e24d63c 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -4872,12 +4872,12 @@ public final class RestContext extends BeanContext {
         * Returns the debug setting on this context for the specified method.
         *
         * @param method The java method.
-        * @return The debug setting on this context or <jk>null</jk> not 
specified for this method.
+        * @return The debug setting on this context or the debug value of the 
servlet context if not specified for this method.
         */
        public Enablement getDebug(Method method) {
                if (method == null)
                        return null;
-               return debugEnablement.find(method).orElse(null);
+               return debugEnablement.find(method).orElse(debug);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
index c30aa38..27a3df4 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
@@ -784,7 +784,7 @@ public class MockServletRequest implements 
HttpServletRequest, MockHttpRequest {
        @Override /* HttpServletRequest */
        public long getDateHeader(String name) {
                String s = getHeader(name);
-               return s == null ? 0 : 
org.apache.juneau.http.Date.forString(s).asDate().getTime();
+               return s == null ? 0 : 
org.apache.juneau.http.Date.forString(s).asZonedDateTime().toInstant().toEpochMilli();
        }
 
        @Override /* HttpServletRequest */

Reply via email to