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 ee710a0 RestClient API improvements. ee710a0 is described below commit ee710a0d302b783b1b34d7febce24f17cf52149d Author: JamesBognar <james.bog...@salesforce.com> AuthorDate: Mon Jun 7 10:12:57 2021 -0400 RestClient API improvements. --- .../33.RestLoggingAndDebugging.html | 2 +- .../org/apache/juneau/rest/client/RestClient.java | 63 ++-- .../juneau/rest/client/RestClientBuilder.java | 368 ++++++++++++--------- .../apache/juneau/rest/mock/MockRestClient.java | 2 +- .../juneau/rest/mock/MockRestClientBuilder.java | 93 +++--- .../juneau/rest/mock/MockServletRequest.java | 4 +- .../java/org/apache/juneau/rest/RestRequest.java | 12 +- .../java/org/apache/juneau/rest/RestResponse.java | 14 +- .../juneau/rest/logging/BasicTestRestLogger.java | 18 +- .../rest/client/RestClient_Headers_Test.java | 23 +- 10 files changed, 335 insertions(+), 264 deletions(-) diff --git a/juneau-doc/docs/Topics/06.juneau-rest-server/33.RestLoggingAndDebugging.html b/juneau-doc/docs/Topics/06.juneau-rest-server/33.RestLoggingAndDebugging.html index 0d02030..f626d79 100644 --- a/juneau-doc/docs/Topics/06.juneau-rest-server/33.RestLoggingAndDebugging.html +++ b/juneau-doc/docs/Topics/06.juneau-rest-server/33.RestLoggingAndDebugging.html @@ -273,7 +273,7 @@ Logging / Debugging <ul> <li><js>"true"</js> - Logging disabled. <li><js>"false"</js> (default) - Logging not disabled. - <li><js>"per-request"</js> - Logging is disabled only on requests containing a <c class='snippet'>X-NoTrace: true</c> header. + <li><js>"per-request"</js> - Logging is disabled only on requests containing a <c class='snippet'>No-Trace: true</c> header. </ul> <p> Disabled logging is particularly useful when running testcases that are expected to throw exceptions or cause diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java index e5551fe..f4e5ff0 100644 --- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java +++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java @@ -33,6 +33,7 @@ import java.net.*; import java.net.URI; import java.nio.charset.*; import java.text.*; +import java.time.*; import java.util.*; import java.util.concurrent.*; import java.util.function.*; @@ -1289,37 +1290,37 @@ public class RestClient extends BeanContext implements HttpClient, Closeable, Re * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#header(Header) header(Header)} * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#headers(Object...) headers(Object...)} * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#headerPairs(Object...) headerPairs(Object...)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#accept(Object) accept(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#acceptCharset(Object) acceptCharset(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#acceptEncoding(Object) acceptEncoding(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#acceptLanguage(Object) acceptLanguage(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#authorization(Object) authorization(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#cacheControl(Object) cacheControl(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#clientVersion(Object) clientVersion(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#connection(Object) connection(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#contentLength(Object) contentLength(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#contentType(Object) contentType(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#date(Object) date(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#expect(Object) expect(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#forwarded(Object) forwarded(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#from(Object) from(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#host(Object) host(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#ifMatch(Object) ifMatch(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#ifModifiedSince(Object) ifModifiedSince(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#ifNoneMatch(Object) ifNoneMatch(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#ifRange(Object) ifRange(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#ifUnmodifiedSince(Object) ifUnmodifiedSince(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#maxForwards(Object) maxForwards(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#origin(Object) origin(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#pragma(Object) pragma(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#proxyAuthorization(Object) proxyAuthorization(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#range(Object) proxyAuthorization(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#referer(Object) referer(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#te(Object) te(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#userAgent(Object) userAgent(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#upgrade(Object) upgrade(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#via(Object) via(Object)} - * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#warning(Object) warning(Object)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#accept(String) accept(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#acceptCharset(String) acceptCharset(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#acceptEncoding(String) acceptEncoding(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#acceptLanguage(String) acceptLanguage(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#authorization(String) authorization(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#cacheControl(String) cacheControl(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#clientVersion(String) clientVersion(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#connection(String) connection(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#contentLength(Long) contentLength(Long)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#contentType(String) contentType(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#date(ZonedDateTime) date(ZonedDateTime)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#expect(String) expect(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#forwarded(String) forwarded(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#from(String) from(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#host(String) host(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#ifMatch(String) ifMatch(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#ifModifiedSince(String) ifModifiedSince(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#ifNoneMatch(String) ifNoneMatch(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#ifRange(String) ifRange(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#ifUnmodifiedSince(String) ifUnmodifiedSince(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#maxForwards(Integer) maxForwards(Integer)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#origin(String) origin(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#pragma(String) pragma(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#proxyAuthorization(String) proxyAuthorization(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#range(String) proxyAuthorization(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#referer(String) referer(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#te(String) te(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#userAgent(String) userAgent(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#upgrade(String) upgrade(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#via(String) via(String)} + * <li class='jm'>{@link org.apache.juneau.rest.client.RestClientBuilder#warning(String) warning(String)} * </ul> * <li class='jc'>{@link org.apache.juneau.rest.client.RestRequest} * <ul> diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java index 3e20ccf..a3cbfa0 100644 --- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java +++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java @@ -28,6 +28,7 @@ import java.lang.annotation.*; import java.lang.reflect.*; import java.net.*; import java.net.URI; +import java.time.*; import java.util.*; import java.util.concurrent.*; import java.util.function.*; @@ -55,6 +56,7 @@ import org.apache.juneau.annotation.*; import org.apache.juneau.html.*; import org.apache.juneau.http.HttpHeaders; import org.apache.juneau.http.header.*; +import org.apache.juneau.http.header.Date; import org.apache.juneau.http.part.*; import org.apache.juneau.httppart.*; import org.apache.juneau.internal.*; @@ -155,10 +157,10 @@ public class RestClientBuilder extends BeanContextBuilder { * </ul> * <p> * <c>Accept</c> request header will be set to <js>"application/json"</js> unless overridden - * by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. + * by {@link #header(String,Object)} or {@link #accept(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. * <p> * <c>Content-Type</c> request header will be set to <js>"application/json"</js> unless overridden - * by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. + * by {@link #header(String,Object)} or {@link #contentType(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. * <p> * Can be combined with other marshaller setters such as {@link #xml()} to provide support for multiple languages. * <ul> @@ -202,10 +204,10 @@ public class RestClientBuilder extends BeanContextBuilder { * </ul> * <p> * <c>Accept</c> request header will be set to <js>"application/json"</js> unless overridden - * by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. + * by {@link #header(String,Object)} or {@link #accept(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. * <p> * <c>Content-Type</c> request header will be set to <js>"application/json+simple"</js> unless overridden - * by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. + * by {@link #header(String,Object)} or {@link #contentType(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. * <p> * Can be combined with other marshaller setters such as {@link #xml()} to provide support for multiple languages. * <ul> @@ -245,10 +247,10 @@ public class RestClientBuilder extends BeanContextBuilder { * </ul> * <p> * <c>Accept</c> request header will be set to <js>"text/xml"</js> unless overridden - * by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. + * by {@link #header(String,Object)} or {@link #accept(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. * <p> * <c>Content-Type</c> request header will be set to <js>"text/xml"</js> unless overridden - * by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. + * by {@link #header(String,Object)} or {@link #contentType(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. * <p> * Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages. * <ul> @@ -291,10 +293,10 @@ public class RestClientBuilder extends BeanContextBuilder { * </ul> * <p> * <c>Accept</c> request header will be set to <js>"text/html"</js> unless overridden - * by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. + * by {@link #header(String,Object)} or {@link #accept(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. * <p> * <c>Content-Type</c> request header will be set to <js>"text/html"</js> unless overridden - * by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. + * by {@link #header(String,Object)} or {@link #contentType(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. * <p> * Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages. * <ul> @@ -337,10 +339,10 @@ public class RestClientBuilder extends BeanContextBuilder { * </ul> * <p> * <c>Accept</c> request header will be set to <js>"text/html"</js> unless overridden - * by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. + * by {@link #header(String,Object)} or {@link #accept(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. * <p> * <c>Content-Type</c> request header will be set to <js>"text/html"</js> unless overridden - * by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. + * by {@link #header(String,Object)} or {@link #contentType(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. * <p> * Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages. * <ul> @@ -383,10 +385,10 @@ public class RestClientBuilder extends BeanContextBuilder { * </ul> * <p> * <c>Accept</c> request header will be set to <js>"text/html+stripped"</js> unless overridden - * by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. + * by {@link #header(String,Object)} or {@link #accept(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. * <p> * <c>Content-Type</c> request header will be set to <js>"text/html+stripped"</js> unless overridden - * by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. + * by {@link #header(String,Object)} or {@link #contentType(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. * <p> * Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages. * <ul> @@ -430,10 +432,10 @@ public class RestClientBuilder extends BeanContextBuilder { * </ul> * <p> * <c>Accept</c> request header will be set to <js>"text/plain"</js> unless overridden - * by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. + * by {@link #header(String,Object)} or {@link #accept(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. * <p> * <c>Content-Type</c> request header will be set to <js>"text/plain"</js> unless overridden - * by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. + * by {@link #header(String,Object)} or {@link #contentType(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. * <p> * Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages. * <ul> @@ -476,10 +478,10 @@ public class RestClientBuilder extends BeanContextBuilder { * </ul> * <p> * <c>Accept</c> request header will be set to <js>"octal/msgpack"</js> unless overridden - * by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. + * by {@link #header(String,Object)} or {@link #accept(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. * <p> * <c>Content-Type</c> request header will be set to <js>"octal/msgpack"</js> unless overridden - * by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. + * by {@link #header(String,Object)} or {@link #contentType(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. * <p> * Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages. * <ul> @@ -523,10 +525,10 @@ public class RestClientBuilder extends BeanContextBuilder { * </ul> * <p> * <c>Accept</c> request header will be set to <js>"text/uon"</js> unless overridden - * by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. + * by {@link #header(String,Object)} or {@link #accept(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. * <p> * <c>Content-Type</c> request header will be set to <js>"text/uon"</js> unless overridden - * by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. + * by {@link #header(String,Object)} or {@link #contentType(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. * <p> * Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages. * <ul> @@ -568,10 +570,10 @@ public class RestClientBuilder extends BeanContextBuilder { * </ul> * <p> * <c>Accept</c> request header will be set to <js>"application/x-www-form-urlencoded"</js> unless overridden - * by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. + * by {@link #header(String,Object)} or {@link #accept(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. * <p> * <c>Content-Type</c> request header will be set to <js>"application/x-www-form-urlencoded"</js> unless overridden - * by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. + * by {@link #header(String,Object)} or {@link #contentType(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. * <p> * Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages. * <ul> @@ -617,10 +619,10 @@ public class RestClientBuilder extends BeanContextBuilder { * </ul> * <p> * <c>Accept</c> request header will be set to <js>"text/openapi"</js> unless overridden - * by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. + * by {@link #header(String,Object)} or {@link #accept(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)}. * <p> * <c>Content-Type</c> request header will be set to <js>"text/openapi"</js> unless overridden - * by {@link #header(String,Object)} or {@link #contentType(Object)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. + * by {@link #header(String,Object)} or {@link #contentType(String)}, or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)}. * <p> * Can be combined with other marshaller setters such as {@link #json()} to provide support for multiple languages. * <ul> @@ -659,10 +661,10 @@ public class RestClientBuilder extends BeanContextBuilder { * bean context property setters (e.g. {@link #swaps(Object...)}), or generic property setters (e.g. {@link #set(String, Object)}) defined on this builder class. * </ul> * <p> - * <c>Accept</c> request header must be set by {@link #header(String,Object)} or {@link #accept(Object)}, or per-request + * <c>Accept</c> request header must be set by {@link #header(String,Object)} or {@link #accept(String)}, or per-request * via {@link RestRequest#header(String,Object)} or {@link RestRequest#accept(Object)} in order for the correct parser to be selected. * <p> - * <c>Content-Type</c> request header must be set by {@link #header(String,Object)} or {@link #contentType(Object)}, + * <c>Content-Type</c> request header must be set by {@link #header(String,Object)} or {@link #contentType(String)}, * or per-request via {@link RestRequest#header(String,Object)} or {@link RestRequest#contentType(Object)} in order for the correct serializer to be selected. * <p> * Similar to calling <c>json().simpleJson().html().xml().uon().urlEnc().openApi().msgPack().plainText()</c>. @@ -1340,315 +1342,395 @@ public class RestClientBuilder extends BeanContextBuilder { return this; } + //----------------------------------------------------------------------------------------------------------------- + // Standard headers. + //----------------------------------------------------------------------------------------------------------------- + /** - * Sets the value for the <c>Accept</c> request header on all requests. + * Appends the <c>Accept</c> and <c>Content-Type</c> headers on all requests made by this client. * * <p> - * This overrides the media type specified on the parser, but is overridden by calling - * <code>header(<js>"Accept"</js>, value);</code> + * Headers are appended to the end of the current header list. * - * @param value The new header value. + * @param value The new header values. + * @return This object (for method chaining). + */ + @FluentSetter + public RestClientBuilder mediaType(String value) { + super.mediaType(MediaType.of(value)); + return headers(Accept.of(value), ContentType.of(value)); + } + + /** + * Appends an <c>Accept</c> header on this request. + * + * <p> + * Header is appended to the end of the current header list. + * + * <p> + * This is equivalent to calling <code>header(<js>"Accept"</js>, <jv>value</jv>);</code> + * or <code>header(Accept.<jsm>of</jsm>(<jv>value</jv>));</code> + * + * @param value + * The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder accept(Object value) { - return header("Accept", value); + public RestClientBuilder accept(String value) { + return header(Accept.of(value)); } /** * Sets the value for the <c>Accept-Charset</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Accept-Charset"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Accept-Charset"</js>, <jv>value</jv>);</code> + * or <code>header(AcceptCharset.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder acceptCharset(Object value) { - return header("Accept-Charset", value); + public RestClientBuilder acceptCharset(String value) { + return header(AcceptCharset.of(value)); } /** * Sets the value for the <c>Accept-Encoding</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Accept-Encoding"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Accept-Encoding"</js>, <jv>value</jv>);</code> + * or <code>header(AcceptEncoding.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder acceptEncoding(Object value) { - return header("Accept-Encoding", value); + public RestClientBuilder acceptEncoding(String value) { + return header(AcceptEncoding.of(value)); } /** * Sets the value for the <c>Accept-Language</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Accept-Language"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Accept-Language"</js>, <jv>value</jv>);</code> + * or <code>header(AcceptLanguage.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder acceptLanguage(Object value) { - return header("Accept-Language", value); + public RestClientBuilder acceptLanguage(String value) { + return header(AcceptLanguage.of(value)); } /** * Sets the value for the <c>Authorization</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Authorization"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Authorization"</js>, <jv>value</jv>);</code> + * or <code>header(Authorization.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder authorization(Object value) { - return header("Authorization", value); + public RestClientBuilder authorization(String value) { + return header(Authorization.of(value)); } /** * Sets the value for the <c>Cache-Control</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Cache-Control"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Cache-Control"</js>, <jv>value</jv>);</code> + * or <code>header(CacheControl.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder cacheControl(Object value) { - return header("Cache-Control", value); + public RestClientBuilder cacheControl(String value) { + return header(CacheControl.of(value)); } /** - * Sets the client version by setting the value for the <js>"X-Client-Version"</js> header. + * Sets the client version by setting the value for the <js>"Client-Version"</js> header. + * + * <p> + * This is equivalent to calling <code>header(<js>"Client-Version"</js>, <jv>value</jv>);</code> + * or <code>header(ClientVersion.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The version string (e.g. <js>"1.2.3"</js>) * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder clientVersion(Object value) { - return header("X-Client-Version", value); + public RestClientBuilder clientVersion(String value) { + return header(ClientVersion.of(value)); } /** * Sets the value for the <c>Connection</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Connection"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Connection"</js>, <jv>value</jv>);</code> + * or <code>header(Connection.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder connection(Object value) { - return header("Connection", value); + public RestClientBuilder connection(String value) { + return header(Connection.of(value)); } /** * Sets the value for the <c>Content-Length</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Content-Length"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Content-Length"</js>, <jv>value</jv>);</code> + * or <code>header(ContentLength.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder contentLength(Object value) { - return header("Content-Length", value); + public RestClientBuilder contentLength(Long value) { + return header(ContentLength.of(value)); } /** * Sets the value for the <c>Content-Type</c> request header on all requests. * * <p> - * This overrides the media type specified on the serializer, but is overridden by calling - * <code>header(<js>"Content-Type"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Content-Type"</js>, <jv>value</jv>);</code> + * or <code>header(ContentType.<jsm>of</jsm>(<jv>value</jv>));</code> + * + * <p> + * This overrides the media type specified on the serializer. * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder contentType(Object value) { - return header("Content-Type", value); + public RestClientBuilder contentType(String value) { + return header(ContentType.of(value)); } /** * Sets the value for the <c>Content-Encoding</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Content-Encoding"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Content-Encoding"</js>, <jv>value</jv>);</code> + * or <code>header(ContentEncoding.<jsm>of</jsm>(<jv>value</jv>));</code> + * + * @param value The new header value. + * @return This object (for method chaining). + */ + @FluentSetter + public RestClientBuilder contentEncoding(String value) { + return header(ContentEncoding.of(value)); + } + + /** + * Sets the value for the <c>Date</c> request header on all requests. + * + * <p> + * This is equivalent to calling <code>header(<js>"Date"</js>, <jv>value</jv>);</code> + * or <code>header(Date.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder contentEncoding(Object value) { - return header("Content-Encoding", value); + public RestClientBuilder date(ZonedDateTime value) { + return header(Date.of(value)); } /** * Sets the value for the <c>Date</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Date"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Date"</js>, <jv>value</jv>);</code> + * or <code>header(Date.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder date(Object value) { - return header("Date", value); + public RestClientBuilder date(Date value) { + return header(value); + } + + /** + * Sets the value for the <c>Debug</c> request header on all requests. + * + * <p> + * This is equivalent to calling <code>header(<js>"Debug"</js>, <jv>value</jv>);</code> + * or <code>header(Debug.<jsm>of</jsm>(<jv>value</jv>));</code> + * + * @return This object (for method chaining). + */ + @Override + @FluentSetter + public RestClientBuilder debug() { + super.debug(); + return header(Debug.TRUE); } /** * Sets the value for the <c>Expect</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Expect"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Expect"</js>, <jv>value</jv>);</code> + * or <code>header(Expect.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder expect(Object value) { - return header("Expect", value); + public RestClientBuilder expect(String value) { + return header(Expect.of(value)); } /** * Sets the value for the <c>Forwarded</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Forwarded"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Forwarded"</js>, <jv>value</jv>);</code> + * or <code>header(Forwarded.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder forwarded(Object value) { - return header("Forwarded", value); + public RestClientBuilder forwarded(String value) { + return header(Forwarded.of(value)); } /** * Sets the value for the <c>From</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"From"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"From"</js>, <jv>value</jv>);</code> + * or <code>header(From.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder from(Object value) { - return header("From", value); + public RestClientBuilder from(String value) { + return header(From.of(value)); } /** * Sets the value for the <c>Host</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Host"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Host"</js>, <jv>value</jv>);</code> + * or <code>header(Host.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder host(Object value) { - return header("Host", value); + public RestClientBuilder host(String value) { + return header(Host.of(value)); } /** * Sets the value for the <c>If-Match</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"If-Match"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"If-Match"</js>, <jv>value</jv>);</code> + * or <code>header(IfMatch.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder ifMatch(Object value) { - return header("If-Match", value); + public RestClientBuilder ifMatch(String value) { + return header(IfMatch.of(value)); } /** * Sets the value for the <c>If-Modified-Since</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"If-Modified-Since"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"If-Modified-Since"</js>, <jv>value</jv>);</code> + * or <code>header(IfModifiedSince.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder ifModifiedSince(Object value) { - return header("If-Modified-Since", value); + public RestClientBuilder ifModifiedSince(String value) { + return header(IfModifiedSince.of(value)); } /** * Sets the value for the <c>If-None-Match</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"If-None-Match"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"If-None-Match"</js>, <jv>value</jv>);</code> + * or <code>header(IfNoneMatch.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder ifNoneMatch(Object value) { - return header("If-None-Match", value); + public RestClientBuilder ifNoneMatch(String value) { + return header(IfNoneMatch.of(value)); } /** * Sets the value for the <c>If-Range</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"If-Range"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"If-Range"</js>, <jv>value</jv>);</code> + * or <code>header(IfRange.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder ifRange(Object value) { - return header("If-Range", value); + public RestClientBuilder ifRange(String value) { + return header(IfRange.of(value)); } /** * Sets the value for the <c>If-Unmodified-Since</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"If-Unmodified-Since"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"If-Unmodified-Since"</js>, <jv>value</jv>);</code> + * or <code>header(IfUnmodifiedSince.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder ifUnmodifiedSince(Object value) { - return header("If-Unmodified-Since", value); + public RestClientBuilder ifUnmodifiedSince(String value) { + return header(IfUnmodifiedSince.of(value)); } /** * Sets the value for the <c>Max-Forwards</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Max-Forwards"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"MaxForwards"</js>, <jv>value</jv>);</code> + * or <code>header(MaxForwards.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder maxForwards(Object value) { - return header("Max-Forwards", value); + public RestClientBuilder maxForwards(Integer value) { + return header(MaxForwards.of(value)); } /** - * When called, <c>X-No-Log: true</c> is added to requests. + * When called, <c>No-Trace: true</c> is added to requests. * * <p> * This gives the opportunity for the servlet to not log errors on invalid requests. @@ -1664,147 +1746,157 @@ public class RestClientBuilder extends BeanContextBuilder { */ @FluentSetter public RestClientBuilder noTrace() { - return header("X-No-Log", true); + return header(NoTrace.of(true)); } /** * Sets the value for the <c>Origin</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Origin"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Origin"</js>, <jv>value</jv>);</code> + * or <code>header(Origin.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder origin(Object value) { - return header("Origin", value); + public RestClientBuilder origin(String value) { + return header(Origin.of(value)); } /** * Sets the value for the <c>Pragma</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Pragma"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Pragma"</js>, <jv>value</jv>);</code> + * or <code>header(Pragma.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder pragma(Object value) { - return header("Pragma", value); + public RestClientBuilder pragma(String value) { + return header(Pragma.of(value)); } /** * Sets the value for the <c>Proxy-Authorization</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Proxy-Authorization"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"ProxyAuthorization"</js>, <jv>value</jv>);</code> + * or <code>header(ProxyAuthorization.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder proxyAuthorization(Object value) { - return header("Proxy-Authorization", value); + public RestClientBuilder proxyAuthorization(String value) { + return header(ProxyAuthorization.of(value)); } /** * Sets the value for the <c>Range</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Range"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Range"</js>, <jv>value</jv>);</code> + * or <code>header(Range.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder range(Object value) { - return header("Range", value); + public RestClientBuilder range(String value) { + return header(Range.of(value)); } /** * Sets the value for the <c>Referer</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Referer"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Referer"</js>, <jv>value</jv>);</code> + * or <code>header(Referer.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder referer(Object value) { - return header("Referer", value); + public RestClientBuilder referer(String value) { + return header(Referer.of(value)); } /** * Sets the value for the <c>TE</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"TE"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"TE"</js>, <jv>value</jv>);</code> + * or <code>header(TE.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder te(Object value) { - return header("TE", value); + public RestClientBuilder te(String value) { + return header(TE.of(value)); } /** * Sets the value for the <c>User-Agent</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"User-Agent"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"User-Agent"</js>, <jv>value</jv>);</code> + * or <code>header(UserAgent.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder userAgent(Object value) { - return header("User-Agent", value); + public RestClientBuilder userAgent(String value) { + return header(UserAgent.of(value)); } /** * Sets the value for the <c>Upgrade</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Upgrade"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Upgrade"</js>, <jv>value</jv>);</code> + * or <code>header(Upgrade.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder upgrade(Object value) { - return header("Upgrade", value); + public RestClientBuilder upgrade(String value) { + return header(Upgrade.of(value)); } /** * Sets the value for the <c>Via</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Via"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Via"</js>, <jv>value</jv>);</code> + * or <code>header(Via.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder via(Object value) { - return header("Via", value); + public RestClientBuilder via(String value) { + return header(Via.of(value)); } /** * Sets the value for the <c>Warning</c> request header on all requests. * * <p> - * This is a shortcut for calling <code>header(<js>"Warning"</js>, value);</code> + * This is equivalent to calling <code>header(<js>"Warning"</js>, <jv>value</jv>);</code> + * or <code>header(Warning.<jsm>of</jsm>(<jv>value</jv>));</code> * * @param value The new header value. * @return This object (for method chaining). */ @FluentSetter - public RestClientBuilder warning(Object value) { - return header("Warning", value); + public RestClientBuilder warning(String value) { + return header(Warning.of(value)); } //----------------------------------------------------------------------------------------------------------------- @@ -4695,12 +4787,6 @@ public class RestClientBuilder extends BeanContextBuilder { } @Override /* GENERATED - ContextBuilder */ - public RestClientBuilder debug() { - super.debug(); - return this; - } - - @Override /* GENERATED - ContextBuilder */ public RestClientBuilder locale(Locale value) { super.locale(value); return this; @@ -5409,24 +5495,6 @@ public class RestClientBuilder extends BeanContextBuilder { } /** - * Assigns <c>User-Agent</c> value. - * - * <ul class='notes'> - * <li>This value can be overridden by the {@link #httpProcessor(HttpProcessor)} method. - * <li>{@link #userAgent(Object)} is an equivalent method. - * </ul> - * - * @param userAgent New property value. - * @return This object (for method chaining). - * @see HttpClientBuilder#setUserAgent(String) - */ - @FluentSetter - public RestClientBuilder userAgent(String userAgent) { - httpClientBuilder.setUserAgent(userAgent); - return this; - } - - /** * Assigns default request header values. * * <ul class='notes'> diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java index c14c67c..f178b70 100644 --- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java +++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClient.java @@ -359,7 +359,7 @@ public class MockRestClient extends RestClient implements HttpClientConnection { * <p> * Equivalent to calling: * <p class='bcode w800'> - * MockRestClient.<jsm>create</jsm>(<jv>impl</jv>).ignoreErrors().noLog().build(); + * MockRestClient.<jsm>create</jsm>(<jv>impl</jv>).ignoreErrors().noTrace().build(); * </p> * * @param impl diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java index 895acec..34a00dc 100644 --- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java +++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestClientBuilder.java @@ -23,6 +23,7 @@ import static org.apache.juneau.rest.util.RestUtils.*; import java.io.*; import java.lang.annotation.*; import java.lang.reflect.Method; +import java.time.*; import org.apache.http.*; import org.apache.http.client.*; @@ -277,12 +278,6 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - ContextBuilder */ - public MockRestClientBuilder mediaType(MediaType value) { - super.mediaType(value); - return this; - } - - @Override /* GENERATED - ContextBuilder */ public MockRestClientBuilder prependTo(String name, Object value) { super.prependTo(name, value); return this; @@ -637,25 +632,25 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder accept(Object value) { + public MockRestClientBuilder accept(String value) { super.accept(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder acceptCharset(Object value) { + public MockRestClientBuilder acceptCharset(String value) { super.acceptCharset(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder acceptEncoding(Object value) { + public MockRestClientBuilder acceptEncoding(String value) { super.acceptEncoding(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder acceptLanguage(Object value) { + public MockRestClientBuilder acceptLanguage(String value) { super.acceptLanguage(value); return this; } @@ -697,7 +692,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder authorization(Object value) { + public MockRestClientBuilder authorization(String value) { super.authorization(value); return this; } @@ -715,7 +710,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder cacheControl(Object value) { + public MockRestClientBuilder cacheControl(String value) { super.cacheControl(value); return this; } @@ -733,13 +728,13 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder clientVersion(Object value) { + public MockRestClientBuilder clientVersion(String value) { super.clientVersion(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder connection(Object value) { + public MockRestClientBuilder connection(String value) { super.connection(value); return this; } @@ -793,25 +788,25 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder contentEncoding(Object value) { + public MockRestClientBuilder contentEncoding(String value) { super.contentEncoding(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder contentLength(Object value) { + public MockRestClientBuilder contentLength(Long value) { super.contentLength(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder contentType(Object value) { + public MockRestClientBuilder contentType(String value) { super.contentType(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder date(Object value) { + public MockRestClientBuilder date(ZonedDateTime value) { super.date(value); return this; } @@ -937,7 +932,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder expect(Object value) { + public MockRestClientBuilder expect(String value) { super.expect(value); return this; } @@ -997,20 +992,20 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder forwarded(Object value) { + public MockRestClientBuilder forwarded(String value) { super.forwarded(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder from(Object value) { + public MockRestClientBuilder from(String value) { super.from(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder header(Header header) { - super.header(header); + public MockRestClientBuilder header(Header value) { + super.header(value); return this; } @@ -1063,7 +1058,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder host(Object value) { + public MockRestClientBuilder host(String value) { super.host(value); return this; } @@ -1105,31 +1100,31 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder ifMatch(Object value) { + public MockRestClientBuilder ifMatch(String value) { super.ifMatch(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder ifModifiedSince(Object value) { + public MockRestClientBuilder ifModifiedSince(String value) { super.ifModifiedSince(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder ifNoneMatch(Object value) { + public MockRestClientBuilder ifNoneMatch(String value) { super.ifNoneMatch(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder ifRange(Object value) { + public MockRestClientBuilder ifRange(String value) { super.ifRange(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder ifUnmodifiedSince(Object value) { + public MockRestClientBuilder ifUnmodifiedSince(String value) { super.ifUnmodifiedSince(value); return this; } @@ -1249,7 +1244,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder maxForwards(Object value) { + public MockRestClientBuilder maxForwards(Integer value) { super.maxForwards(value); return this; } @@ -1261,6 +1256,18 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ + public MockRestClientBuilder mediaType(String value) { + super.mediaType(value); + return this; + } + + @Override /* GENERATED - RestClientBuilder */ + public MockRestClientBuilder mediaType(MediaType value) { + super.mediaType(value); + return this; + } + + @Override /* GENERATED - RestClientBuilder */ public MockRestClientBuilder msgPack() { super.msgPack(); return this; @@ -1291,7 +1298,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder origin(Object value) { + public MockRestClientBuilder origin(String value) { super.origin(value); return this; } @@ -1370,7 +1377,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder pragma(Object value) { + public MockRestClientBuilder pragma(String value) { super.pragma(value); return this; } @@ -1388,7 +1395,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder proxyAuthorization(Object value) { + public MockRestClientBuilder proxyAuthorization(String value) { super.proxyAuthorization(value); return this; } @@ -1460,7 +1467,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder range(Object value) { + public MockRestClientBuilder range(String value) { super.range(value); return this; } @@ -1472,7 +1479,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder referer(Object value) { + public MockRestClientBuilder referer(String value) { super.referer(value); return this; } @@ -1593,7 +1600,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder te(Object value) { + public MockRestClientBuilder te(String value) { super.te(value); return this; } @@ -1629,7 +1636,7 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder upgrade(Object value) { + public MockRestClientBuilder upgrade(String value) { super.upgrade(value); return this; } @@ -1671,31 +1678,25 @@ public class MockRestClientBuilder extends RestClientBuilder { } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder userAgent(Object value) { + public MockRestClientBuilder userAgent(String value) { super.userAgent(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder userAgent(String userAgent) { - super.userAgent(userAgent); - return this; - } - - @Override /* GENERATED - RestClientBuilder */ public MockRestClientBuilder userTokenHandler(UserTokenHandler userTokenHandler) { super.userTokenHandler(userTokenHandler); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder via(Object value) { + public MockRestClientBuilder via(String value) { super.via(value); return this; } @Override /* GENERATED - RestClientBuilder */ - public MockRestClientBuilder warning(Object value) { + public MockRestClientBuilder warning(String value) { super.warning(value); return this; } diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java index f8e9793..4d0ca3a 100644 --- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java +++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java @@ -958,7 +958,7 @@ public class MockServletRequest implements HttpServletRequest { */ protected MockServletRequest debug(boolean value) { if (value) - header("X-Debug", true); + header("Debug", true); return this; } @@ -973,7 +973,7 @@ public class MockServletRequest implements HttpServletRequest { */ public MockServletRequest noTrace(boolean value) { if (value) - header("X-NoTrace", true); + header("No-Trace", true); return this; } diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java index 7df7af3..b842a27 100644 --- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java +++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java @@ -1698,7 +1698,7 @@ public final class RestRequest { } /** - * Sets the <js>"NoLog"</js> attribute to the specified boolean. + * Sets the <js>"NoTrace"</js> attribute to the specified boolean. * * <p> * This flag is used by {@link BasicRestLogger} and tells it not to log the current request. @@ -1706,18 +1706,18 @@ public final class RestRequest { * @param b The attribute value. * @return This object (for method chaining). */ - public RestRequest setNoLog(Boolean b) { - setAttribute("NoLog", b); + public RestRequest setNoTrace(Boolean b) { + setAttribute("NoTrace", b); return this; } /** - * Shortcut for calling <c>setNoLog(<jk>true</jk>)</c>. + * Shortcut for calling <c>setNoTrace(<jk>true</jk>)</c>. * * @return This object (for method chaining). */ - public RestRequest setNoLog() { - return setNoLog(true); + public RestRequest setNoTrace() { + return setNoTrace(true); } /** diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java index 4f4bee4..191f4a6 100644 --- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java +++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java @@ -118,7 +118,7 @@ public final class RestResponse { } request.getContext().getDefaultResponseHeaders().forEach(x->addHeader(x.getValue(), resolveUris(x.getValue()))); // Done this way to avoid list/array copy. - + opContext.getDefaultResponseHeaders().forEach(x->addHeader(x.getName(), resolveUris(x.getValue()))); if (charset == null) @@ -646,7 +646,7 @@ public final class RestResponse { } /** - * Sets the <js>"NoLog"</js> attribute to the specified boolean. + * Sets the <js>"NoTrace"</js> attribute to the specified boolean. * * <p> * This flag is used by {@link BasicRestLogger} and tells it not to log the current request. @@ -654,18 +654,18 @@ public final class RestResponse { * @param b The attribute value. * @return This object (for method chaining). */ - public RestResponse setNoLog(Boolean b) { - request.setNoLog(b); + public RestResponse setNoTrace(Boolean b) { + request.setNoTrace(b); return this; } /** - * Shortcut for calling <c>setNoLog(<jk>true</jk>)</c>. + * Shortcut for calling <c>setNoTrace(<jk>true</jk>)</c>. * * @return This object (for method chaining). */ - public RestResponse setNoLog() { - return setNoLog(true); + public RestResponse setNoTrace() { + return setNoTrace(true); } /** diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicTestRestLogger.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicTestRestLogger.java index 31f4d27..e4836d2 100644 --- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicTestRestLogger.java +++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicTestRestLogger.java @@ -31,9 +31,9 @@ import org.apache.juneau.rest.*; * <p> * Requests can be tagged as no-log (meaning don't log if there's an error) in any of the following ways: * <ul> - * <li>A <js>"X-No-Log: true"</js> header. - * <li>A <js>"noLog=true"</js> query parameter. - * <li>A <js>"NoLog"</js> request attribute with a string value of <js>"true"</js>. + * <li>A <js>"No-Trace: true"</js> header. + * <li>A <js>"noTrace=true"</js> query parameter. + * <li>A <js>"NoTrace"</js> request attribute with a string value of <js>"true"</js>. * </ul> * * <h5 class='section'>Configured Settings:</h5> @@ -67,7 +67,7 @@ public class BasicTestRestLogger extends BasicRestLogger { .requestDetail(HEADER) .responseDetail(HEADER) .enabled(CONDITIONAL) - .enabledTest(x -> ! isNoLog(x)) // Only log if it's not a no-trace request. + .enabledTest(x -> ! isNoTrace(x)) // Only log if it's not a no-trace request. .logStackTrace() .build(), RestLoggerRule.create() // Log 400-500 errors with just status-line information. @@ -76,7 +76,7 @@ public class BasicTestRestLogger extends BasicRestLogger { .requestDetail(STATUS_LINE) .responseDetail(STATUS_LINE) .enabled(CONDITIONAL) - .enabledTest(x -> ! isNoLog(x)) // Only log if it's not a no-trace request. + .enabledTest(x -> ! isNoTrace(x)) // Only log if it's not a no-trace request. .logStackTrace() .build() ) @@ -91,13 +91,13 @@ public class BasicTestRestLogger extends BasicRestLogger { ; } - private static boolean isNoLog(HttpServletRequest req) { - Object o = req.getAttribute("NoLog"); + private static boolean isNoTrace(HttpServletRequest req) { + Object o = req.getAttribute("NoTrace"); if (o != null) return "true".equalsIgnoreCase(o.toString()); - String s = req.getHeader("X-No-Log"); + String s = req.getHeader("No-Trace"); if (s != null) return "true".equalsIgnoreCase(s); - return emptyIfNull(req.getQueryString()).contains("noLog=true"); + return emptyIfNull(req.getQueryString()).contains("noTrace=true"); } } diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java index fabe096..742df2c 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java @@ -27,6 +27,7 @@ import java.util.*; import org.apache.http.Header; import org.apache.juneau.collections.*; import org.apache.juneau.http.header.*; +import org.apache.juneau.http.header.Date; import org.apache.juneau.http.part.*; import org.apache.juneau.httppart.*; import org.apache.juneau.marshall.*; @@ -217,30 +218,30 @@ public class RestClient_Headers_Test { checkClient("Accept-Language").acceptLanguage("en").build().get("/headers").run().assertBody().is("['en']"); checkClient("Authorization").authorization("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("Cache-Control").cacheControl("none").build().get("/headers").run().assertBody().is("['none']"); - checkClient("X-Client-Version").clientVersion("1").build().get("/headers").run().assertBody().is("['1']"); + checkClient("Client-Version").clientVersion("1").build().get("/headers").run().assertBody().is("['1']"); checkClient("Connection").connection("foo").build().get("/headers").run().assertBody().is("['foo']"); - checkClient("Content-Length").contentLength("123").build().get("/headers").run().assertBody().is("['123']"); + checkClient("Content-Length").contentLength(123l).build().get("/headers").run().assertBody().is("['123']"); checkClient("Content-Type").contentType("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("Content-Encoding").contentEncoding("identity").build().get("/headers").run().assertBody().is("['identity']"); - checkClient("Date").date("123").build().get("/headers").run().assertBody().is("['123']"); + checkClient("Date").date(Date.of("Sat, 29 Oct 1994 19:43:31 GMT")).build().get("/headers").run().assertBody().is("['Sat, 29 Oct 1994 19:43:31 GMT']"); checkClient("Expect").expect("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("Forwarded").forwarded("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("From").from("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("Host").host("foo").build().get("/headers").run().assertBody().is("['foo']"); - checkClient("If-Match").ifMatch("foo").build().get("/headers").run().assertBody().is("['foo']"); - checkClient("If-Modified-Since").ifModifiedSince("foo").build().get("/headers").run().assertBody().is("['foo']"); - checkClient("If-None-Match").ifNoneMatch("foo").build().get("/headers").run().assertBody().is("['foo']"); - checkClient("If-Range").ifRange("foo").build().get("/headers").run().assertBody().is("['foo']"); - checkClient("If-Unmodified-Since").ifUnmodifiedSince("foo").build().get("/headers").run().assertBody().is("['foo']"); - checkClient("Max-Forwards").maxForwards("10").build().get("/headers").run().assertBody().is("['10']"); - checkClient("X-No-Log").noTrace().build().get("/headers").run().assertBody().is("['true']"); + checkClient("If-Match").ifMatch("\"foo\"").build().get("/headers").run().assertBody().is("['\"foo\"']"); + checkClient("If-Modified-Since").ifModifiedSince("Sat, 29 Oct 1994 19:43:31 GMT").build().get("/headers").run().assertBody().is("['Sat, 29 Oct 1994 19:43:31 GMT']"); + checkClient("If-None-Match").ifNoneMatch("\"foo\"").build().get("/headers").run().assertBody().is("['\"foo\"']"); + checkClient("If-Range").ifRange("\"foo\"").build().get("/headers").run().assertBody().is("['\"foo\"']"); + checkClient("If-Unmodified-Since").ifUnmodifiedSince("Sat, 29 Oct 1994 19:43:31 GMT").build().get("/headers").run().assertBody().is("['Sat, 29 Oct 1994 19:43:31 GMT']"); + checkClient("Max-Forwards").maxForwards(10).build().get("/headers").run().assertBody().is("['10']"); + checkClient("No-Trace").noTrace().build().get("/headers").run().assertBody().is("['true']"); checkClient("Origin").origin("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("Pragma").pragma("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("Proxy-Authorization").proxyAuthorization("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("Range").range("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("Referer").referer("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("TE").te("foo").build().get("/headers").run().assertBody().is("['foo']"); - checkClient("User-Agent").userAgent(new StringBuilder("foo")).build().get("/headers").run().assertBody().is("['foo']"); + checkClient("User-Agent").userAgent("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("Upgrade").upgrade("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("Via").via("foo").build().get("/headers").run().assertBody().is("['foo']"); checkClient("Warning").warning("foo").build().get("/headers").run().assertBody().is("['foo']");