blob: de84ed2d094fcd2dbaf38f672d5f0af2d585729a [file] [log] [blame]
// ***************************************************************************************************************************
// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
// * with the License. You may obtain a copy of the License at *
// * *
// * http://www.apache.org/licenses/LICENSE-2.0 *
// * *
// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
// * specific language governing permissions and limitations under the License. *
// ***************************************************************************************************************************
package org.apache.juneau.http;
import static org.apache.juneau.internal.ClassUtils.*;
import static org.apache.juneau.internal.ExceptionUtils.*;
import static org.apache.juneau.internal.StringUtils.*;
import java.net.*;
import java.time.*;
import java.util.*;
import java.util.function.*;
import org.apache.http.*;
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.*;
import org.apache.juneau.oapi.*;
import org.apache.juneau.reflect.*;
/**
* Standard predefined HTTP headers.
* {@review}
*/
public class HttpHeaders {
@SuppressWarnings("javadoc")
public static final Accept
ACCEPT_APPLICATION_ATOM_XML = Accept.APPLICATION_ATOM_XML,
ACCEPT_APPLICATION_FORM_URLENCODED = Accept.APPLICATION_FORM_URLENCODED,
ACCEPT_APPLICATION_JSON = Accept.APPLICATION_JSON,
ACCEPT_APPLICATION_OCTET_STREAM = Accept.APPLICATION_OCTET_STREAM,
ACCEPT_APPLICATION_SOAP_XML = Accept.APPLICATION_SOAP_XML,
ACCEPT_APPLICATION_SVG_XML = Accept.APPLICATION_SVG_XML,
ACCEPT_APPLICATION_XHTML_XML = Accept.APPLICATION_XHTML_XML,
ACCEPT_APPLICATION_XML = Accept.APPLICATION_XML,
ACCEPT_IMAGE_BMP = Accept.IMAGE_BMP,
ACCEPT_IMAGE_GIF = Accept.IMAGE_GIF,
ACCEPT_IMAGE_JPEG = Accept.IMAGE_JPEG,
ACCEPT_IMAGE_PNG = Accept.IMAGE_PNG,
ACCEPT_IMAGE_SVG = Accept.IMAGE_SVG,
ACCEPT_IMAGE_TIFF = Accept.IMAGE_TIFF,
ACCEPT_IMAGE_WEBP = Accept.IMAGE_WEBP,
ACCEPT_MULTIPART_FORM_DATA = Accept.MULTIPART_FORM_DATA,
ACCEPT_TEXT_HTML = Accept.TEXT_HTML,
ACCEPT_TEXT_PLAIN = Accept.TEXT_PLAIN,
ACCEPT_TEXT_XML = Accept.TEXT_XML,
ACCEPT_WILDCARD = Accept.WILDCARD;
@SuppressWarnings("javadoc")
public static final ContentType
CONTENTTYPE_APPLICATION_ATOM_XML = ContentType.APPLICATION_ATOM_XML,
CONTENTTYPE_APPLICATION_FORM_URLENCODED = ContentType.APPLICATION_FORM_URLENCODED,
CONTENTTYPE_APPLICATION_JSON = ContentType.APPLICATION_JSON,
CONTENTTYPE_APPLICATION_OCTET_STREAM = ContentType.APPLICATION_OCTET_STREAM,
CONTENTTYPE_APPLICATION_SOAP_XML = ContentType.APPLICATION_SOAP_XML,
CONTENTTYPE_APPLICATION_SVG_XML = ContentType.APPLICATION_SVG_XML,
CONTENTTYPE_APPLICATION_XHTML_XML = ContentType.APPLICATION_XHTML_XML,
CONTENTTYPE_APPLICATION_XML = ContentType.APPLICATION_XML,
CONTENTTYPE_IMAGE_BMP = ContentType.IMAGE_BMP,
CONTENTTYPE_IMAGE_GIF = ContentType.IMAGE_GIF,
CONTENTTYPE_IMAGE_JPEG = ContentType.IMAGE_JPEG,
CONTENTTYPE_IMAGE_PNG = ContentType.IMAGE_PNG,
CONTENTTYPE_IMAGE_SVG = ContentType.IMAGE_SVG,
CONTENTTYPE_IMAGE_TIFF = ContentType.IMAGE_TIFF,
CONTENTTYPE_IMAGE_WEBP = ContentType.IMAGE_WEBP,
CONTENTTYPE_MULTIPART_FORM_DATA = ContentType.MULTIPART_FORM_DATA,
CONTENTTYPE_TEXT_HTML = ContentType.TEXT_HTML,
CONTENTTYPE_TEXT_PLAIN = ContentType.TEXT_PLAIN,
CONTENTTYPE_TEXT_XML = ContentType.TEXT_XML,
CONTENTTYPE_WILDCARD = ContentType.WILDCARD;
//-----------------------------------------------------------------------------------------------------------------
// Standard HTTP headers
//-----------------------------------------------------------------------------------------------------------------
/**
* Creates a new {@link Accept} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link MediaRanges#of(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Accept accept(String value) {
return Accept.of(value);
}
/**
* Creates a new {@link Accept} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Accept accept(MediaRanges value) {
return Accept.of(value);
}
/**
* Creates a new {@link Accept} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Accept accept(MediaType value) {
return Accept.of(value);
}
/**
* Creates a new {@link Accept} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Accept accept(Supplier<MediaRanges> value) {
return Accept.of(value);
}
/**
* Creates a new {@link AcceptCharset} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link StringRanges#of(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final AcceptCharset acceptCharset(String value) {
return AcceptCharset.of(value);
}
/**
* Creates a new {@link AcceptCharset} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final AcceptCharset acceptCharset(StringRanges value) {
return AcceptCharset.of(value);
}
/**
* Creates a new {@link AcceptCharset} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final AcceptCharset acceptCharset(Supplier<StringRanges> value) {
return AcceptCharset.of(value);
}
/**
* Creates a new {@link AcceptEncoding} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link StringRanges#of(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final AcceptEncoding acceptEncoding(String value) {
return AcceptEncoding.of(value);
}
/**
* Creates a new {@link AcceptEncoding} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final AcceptEncoding acceptEncoding(StringRanges value) {
return AcceptEncoding.of(value);
}
/**
* Creates a new {@link AcceptEncoding} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final AcceptEncoding acceptEncoding(Supplier<StringRanges> value) {
return AcceptEncoding.of(value);
}
/**
* Creates a new {@link AcceptLanguage} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link StringRanges#of(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final AcceptLanguage acceptLanguage(String value) {
return AcceptLanguage.of(value);
}
/**
* Creates a new {@link AcceptLanguage} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final AcceptLanguage acceptLanguage(StringRanges value) {
return AcceptLanguage.of(value);
}
/**
* Creates a new {@link AcceptLanguage} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final AcceptLanguage acceptLanguage(Supplier<StringRanges> value) {
return AcceptLanguage.of(value);
}
/**
* Creates a new {@link AcceptRanges} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final AcceptRanges acceptRanges(String value) {
return AcceptRanges.of(value);
}
/**
* Creates a new {@link AcceptRanges} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final AcceptRanges acceptRanges(Supplier<String> value) {
return AcceptRanges.of(value);
}
/**
* Creates a new {@link Age} header.
*
* @param value
* The header value.
* <br>Must be parsable using {@link Integer#parseInt(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Age age(String value) {
return Age.of(value);
}
/**
* Creates a new {@link Age} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Age age(Integer value) {
return Age.of(value);
}
/**
* Creates a new {@link Age} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Age age(Supplier<Integer> value) {
return Age.of(value);
}
/**
* Creates a new {@link Allow} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Allow allow(String value) {
return Allow.of(value);
}
/**
* Creates a new {@link Allow} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Allow allow(List<String> value) {
return Allow.of(value);
}
/**
* Creates a new {@link Allow} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Allow allow(Supplier<List<String>> value) {
return Allow.of(value);
}
/**
* Creates a new {@link Authorization} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Authorization authorization(String value) {
return Authorization.of(value);
}
/**
* Creates a new {@link Authorization} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Authorization authorization(Supplier<String> value) {
return Authorization.of(value);
}
/**
* Creates a new {@link CacheControl} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final CacheControl cacheControl(String value) {
return CacheControl.of(value);
}
/**
* Creates a new {@link CacheControl} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final CacheControl cacheControl(Supplier<String> value) {
return CacheControl.of(value);
}
/**
* Creates a new {@link ClientVersion} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link Version#of(String)}
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ClientVersion clientVersion(String value) {
return ClientVersion.of(value);
}
/**
* Creates a new {@link ClientVersion} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ClientVersion clientVersion(Version value) {
return ClientVersion.of(value);
}
/**
* Creates a new {@link ClientVersion} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ClientVersion clientVersion(Supplier<Version> value) {
return ClientVersion.of(value);
}
/**
* Creates a new {@link Connection} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Connection connection(String value) {
return Connection.of(value);
}
/**
* Creates a new {@link Connection} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Connection connection(Supplier<String> value) {
return Connection.of(value);
}
/**
* Creates a new {@link ContentDisposition} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link StringRanges#of(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentDisposition contentDisposition(String value) {
return ContentDisposition.of(value);
}
/**
* Creates a new {@link ContentDisposition} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentDisposition contentDisposition(StringRanges value) {
return ContentDisposition.of(value);
}
/**
* Creates a new {@link ContentDisposition} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentDisposition contentDisposition(Supplier<StringRanges> value) {
return ContentDisposition.of(value);
}
/**
* Creates a new {@link ContentEncoding} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentEncoding contentEncoding(String value) {
return ContentEncoding.of(value);
}
/**
* Creates a new {@link ContentEncoding} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentEncoding contentEncoding(Supplier<String> value) {
return ContentEncoding.of(value);
}
/**
* Creates a new {@link ContentLanguage} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentLanguage contentLanguage(String value) {
return ContentLanguage.of(value);
}
/**
* Creates a new {@link ContentLanguage} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentLanguage contentLanguage(List<String> value) {
return ContentLanguage.of(value);
}
/**
* Creates a new {@link ContentLanguage} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentLanguage contentLanguage(Supplier<List<String>> value) {
return ContentLanguage.of(value);
}
/**
* Creates a new {@link ContentLength} header.
*
* @param value
* The header value.
* <br>Must be parsable using {@link Long#parseLong(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentLength contentLength(String value) {
return ContentLength.of(value);
}
/**
* Creates a new {@link ContentLength} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentLength contentLength(Long value) {
return ContentLength.of(value);
}
/**
* Creates a new {@link ContentLength} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentLength contentLength(Supplier<Long> value) {
return ContentLength.of(value);
}
/**
* Creates a new {@link ContentLocation} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link URI#create(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentLocation contentLocation(String value) {
return ContentLocation.of(value);
}
/**
* Creates a new {@link ContentLocation} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentLocation contentLocation(URI value) {
return ContentLocation.of(value);
}
/**
* Creates a new {@link ContentLocation} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentLocation contentLocation(Supplier<URI> value) {
return ContentLocation.of(value);
}
/**
* Creates a new {@link ContentRange} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentRange contentRange(String value) {
return ContentRange.of(value);
}
/**
* Creates a new {@link ContentRange} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentRange contentRange(Supplier<String> value) {
return ContentRange.of(value);
}
/**
* Creates a new {@link ContentType} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link MediaType#of(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentType contentType(String value) {
return ContentType.of(value);
}
/**
* Creates a new {@link ContentType} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentType contentType(MediaType value) {
return ContentType.of(value);
}
/**
* Creates a new {@link ContentType} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ContentType contentType(Supplier<MediaType> value) {
return ContentType.of(value);
}
/**
* Creates a new {@link Date} header.
*
* @param value
* The header value.
* <br>Must be an RFC-1123 formated string (e.g. <js>"Sat, 29 Oct 1994 19:43:31 GMT"</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final Date date(String value) {
return Date.of(value);
}
/**
* Creates a new {@link Date} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final Date date(ZonedDateTime value) {
return Date.of(value);
}
/**
* Creates a new {@link Date} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final Date date(Supplier<ZonedDateTime> value) {
return Date.of(value);
}
/**
* Creates a new {@link Debug} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link Boolean#parseBoolean(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value was <jk>null</jk>.
*/
public static final Debug debug(String value) {
return Debug.of(value);
}
/**
* Creates a new {@link Debug} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link Boolean#parseBoolean(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value was <jk>null</jk>.
*/
public static final Debug debug(Boolean value) {
return Debug.of(value);
}
/**
* Creates a new {@link Debug} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The header value supplier.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value was <jk>null</jk>.
*/
public static final Debug debug(Supplier<Boolean> value) {
return Debug.of(value);
}
/**
* Creates a new {@link ETag} header.
*
* @param value
* The header value.
* <br>Must be an entity tag value (e.g. <js>"\"xyzzy\""</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ETag eTag(String value) {
return ETag.of(value);
}
/**
* Creates a new {@link ETag} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ETag eTag(EntityTag value) {
return ETag.of(value);
}
/**
* Creates a new {@link ETag} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ETag eTag(Supplier<EntityTag> value) {
return ETag.of(value);
}
/**
* Creates a new {@link Expect} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Expect expect(String value) {
return Expect.of(value);
}
/**
* Creates a new {@link Expect} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Expect expect(Supplier<String> value) {
return Expect.of(value);
}
/**
* Creates a new {@link Expires} header.
*
* @param value
* The header value.
* <br>Must be an RFC-1123 formated string (e.g. <js>"Sat, 29 Oct 1994 19:43:31 GMT"</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final Expires expires(String value) {
return Expires.of(value);
}
/**
* Creates a new {@link Expires} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final Expires expires(ZonedDateTime value) {
return Expires.of(value);
}
/**
* Creates a new {@link Expires} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final Expires expires(Supplier<ZonedDateTime> value) {
return Expires.of(value);
}
/**
* Creates a new {@link Forwarded} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Forwarded forwarded(String value) {
return Forwarded.of(value);
}
/**
* Creates a new {@link Forwarded} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Forwarded forwarded(Supplier<String> value) {
return Forwarded.of(value);
}
/**
* Creates a new {@link From} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final From from(String value) {
return From.of(value);
}
/**
* Creates a new {@link From} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final From from(Supplier<String> value) {
return From.of(value);
}
/**
* Creates a new {@link Host} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Host host(String value) {
return Host.of(value);
}
/**
* Creates a new {@link Host} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Host host(Supplier<String> value) {
return Host.of(value);
}
/**
* Creates a new {@link IfMatch} header.
*
* @param value
* The header value.
* <br>Must be a comma-delimited list of entity validator values (e.g. <js>"\"xyzzy\", \"r2d2xxxx\", \"c3piozzzz\""</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final IfMatch ifMatch(String value) {
return IfMatch.of(value);
}
/**
* Creates a new {@link IfMatch} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final IfMatch ifMatch(List<EntityTag> value) {
return IfMatch.of(value);
}
/**
* Creates a new {@link IfMatch} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final IfMatch ifMatch(Supplier<List<EntityTag>> value) {
return IfMatch.of(value);
}
/**
* Creates a new {@link IfModifiedSince} header.
*
* @param value
* The header value.
* <br>Must be an RFC-1123 formated string (e.g. <js>"Sat, 29 Oct 1994 19:43:31 GMT"</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final IfModifiedSince ifModifiedSince(String value) {
return IfModifiedSince.of(value);
}
/**
* Creates a new {@link IfModifiedSince} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final IfModifiedSince ifModifiedSince(ZonedDateTime value) {
return IfModifiedSince.of(value);
}
/**
* Creates a new {@link IfModifiedSince} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final IfModifiedSince ifModifiedSince(Supplier<ZonedDateTime> value) {
return IfModifiedSince.of(value);
}
/**
* Creates a new {@link IfNoneMatch} header.
*
* @param value
* The header value.
* <br>Must be a comma-delimited list of entity validator values (e.g. <js>"\"xyzzy\", \"r2d2xxxx\", \"c3piozzzz\""</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final IfNoneMatch ifNoneMatch(String value) {
return IfNoneMatch.of(value);
}
/**
* Creates a new {@link IfNoneMatch} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final IfNoneMatch ifNoneMatch(List<EntityTag> value) {
return IfNoneMatch.of(value);
}
/**
* Creates a new {@link IfNoneMatch} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final IfNoneMatch ifNoneMatch(Supplier<List<EntityTag>> value) {
return IfNoneMatch.of(value);
}
/**
* Creates a new {@link IfRange} header.
*
* @param value
* The header value.
* <br>Must be an RFC-1123 formated string (e.g. <js>"Sat, 29 Oct 1994 19:43:31 GMT"</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final IfRange ifRange(String value) {
return IfRange.of(value);
}
/**
* Creates a new {@link IfRange} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final IfRange ifRange(ZonedDateTime value) {
return IfRange.of(value);
}
/**
* Creates a new {@link IfRange} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final IfRange ifRange(EntityTag value) {
return IfRange.of(value);
}
/**
* Creates a new {@link IfRange} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Supplier must supply either {@link EntityTag} or {@link ZonedDateTime} objects.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final IfRange ifRange(Supplier<?> value) {
return IfRange.of(value);
}
/**
* Creates a new {@link IfUnmodifiedSince} header.
*
* @param value
* The header value.
* <br>Must be an RFC-1123 formated string (e.g. <js>"Sat, 29 Oct 1994 19:43:31 GMT"</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final IfUnmodifiedSince ifUnmodifiedSince(String value) {
return IfUnmodifiedSince.of(value);
}
/**
* Creates a new {@link IfUnmodifiedSince} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final IfUnmodifiedSince ifUnmodifiedSince(ZonedDateTime value) {
return IfUnmodifiedSince.of(value);
}
/**
* Creates a new {@link IfUnmodifiedSince} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final IfUnmodifiedSince ifUnmodifiedSince(Supplier<ZonedDateTime> value) {
return IfUnmodifiedSince.of(value);
}
/**
* Creates a new {@link LastModified} header.
*
* @param value
* The header value.
* <br>Must be an RFC-1123 formated string (e.g. <js>"Sat, 29 Oct 1994 19:43:31 GMT"</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final LastModified lastModified(String value) {
return LastModified.of(value);
}
/**
* Creates a new {@link LastModified} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final LastModified lastModified(ZonedDateTime value) {
return LastModified.of(value);
}
/**
* Creates a new {@link LastModified} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final LastModified lastModified(Supplier<ZonedDateTime> value) {
return LastModified.of(value);
}
/**
* Creates a new {@link Location} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link URI#create(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Location location(String value) {
return Location.of(value);
}
/**
* Creates a new {@link Location} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Location location(URI value) {
return Location.of(value);
}
/**
* Creates a new {@link Location} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Location location(Supplier<URI> value) {
return Location.of(value);
}
/**
* Creates a new {@link MaxForwards} header.
*
* @param value
* The header value.
* <br>Must be parsable using {@link Integer#parseInt(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final MaxForwards maxForwards(String value) {
return MaxForwards.of(value);
}
/**
* Creates a new {@link MaxForwards} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final MaxForwards maxForwards(Integer value) {
return MaxForwards.of(value);
}
/**
* Creates a new {@link MaxForwards} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final MaxForwards maxForwards(Supplier<Integer> value) {
return MaxForwards.of(value);
}
/**
* Creates a new {@link NoTrace} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link Boolean#parseBoolean(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value was <jk>null</jk>.
*/
public static final NoTrace noTrace(String value) {
return NoTrace.of(value);
}
/**
* Creates a new {@link NoTrace} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value was <jk>null</jk>.
*/
public static final NoTrace noTrace(Boolean value) {
return NoTrace.of(value);
}
/**
* Creates a new {@link NoTrace} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The header value supplier.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value was <jk>null</jk>.
*/
public static final NoTrace noTrace(Supplier<Boolean> value) {
return NoTrace.of(value);
}
/**
* Creates a new {@link Origin} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Origin origin(String value) {
return Origin.of(value);
}
/**
* Creates a new {@link Origin} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Origin origin(Supplier<String> value) {
return Origin.of(value);
}
/**
* Creates a new {@link Pragma} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Pragma pragma(String value) {
return Pragma.of(value);
}
/**
* Creates a new {@link Pragma} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Pragma pragma(Supplier<String> value) {
return Pragma.of(value);
}
/**
* Creates a new {@link ProxyAuthenticate} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ProxyAuthenticate proxyAuthenticate(String value) {
return ProxyAuthenticate.of(value);
}
/**
* Creates a new {@link ProxyAuthenticate} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ProxyAuthenticate proxyAuthenticate(Supplier<String> value) {
return ProxyAuthenticate.of(value);
}
/**
* Creates a new {@link ProxyAuthorization} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ProxyAuthorization proxyAuthorization(String value) {
return ProxyAuthorization.of(value);
}
/**
* Creates a new {@link ProxyAuthorization} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final ProxyAuthorization proxyAuthorization(Supplier<String> value) {
return ProxyAuthorization.of(value);
}
/**
* Creates a new {@link Range} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Range range(String value) {
return Range.of(value);
}
/**
* Creates a new {@link Range} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Range range(Supplier<String> value) {
return Range.of(value);
}
/**
* Creates a new {@link Referer} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link URI#create(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Referer referer(String value) {
return Referer.of(value);
}
/**
* Creates a new {@link Referer} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link URI#create(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Referer referer(URI value) {
return Referer.of(value);
}
/**
* Creates a new {@link Referer} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Referer referer(Supplier<URI> value) {
return Referer.of(value);
}
/**
* Creates a new {@link RetryAfter} header.
*
* @param value
* The header value.
* <br>Must be an RFC-1123 formated string (e.g. <js>"Sat, 29 Oct 1994 19:43:31 GMT"</js>) or an integer.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final RetryAfter retryAfter(String value) {
return RetryAfter.of(value);
}
/**
* Creates a new {@link RetryAfter} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final RetryAfter retryAfter(ZonedDateTime value) {
return RetryAfter.of(value);
}
/**
* Creates a new {@link RetryAfter} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final RetryAfter retryAfter(Integer value) {
return RetryAfter.of(value);
}
/**
* Creates a new {@link RetryAfter} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Supplier must supply either {@link Integer} or {@link ZonedDateTime} objects.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final RetryAfter retryAfter(Supplier<?> value) {
return RetryAfter.of(value);
}
/**
* Creates a new {@link Server} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Server server(String value) {
return Server.of(value);
}
/**
* Creates a new {@link Server} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Server server(Supplier<String> value) {
return Server.of(value);
}
/**
* Creates a new {@link TE} header.
*
* @param value
* The header value.
* <br>Must be parsable by {@link StringRanges#of(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final TE te(String value) {
return TE.of(value);
}
/**
* Creates a new {@link TE} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final TE te(StringRanges value) {
return TE.of(value);
}
/**
* Creates a new {@link TE} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final TE te(Supplier<StringRanges> value) {
return TE.of(value);
}
/**
* Creates a new {@link Thrown} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Thrown thrown(String value) {
return Thrown.of(value);
}
/**
* Creates a new {@link Thrown} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Thrown thrown(Throwable...value) {
return Thrown.of(value);
}
/**
* Creates a new {@link Trailer} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Trailer trailer(String value) {
return Trailer.of(value);
}
/**
* Creates a new {@link Trailer} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Trailer trailer(Supplier<String> value) {
return Trailer.of(value);
}
/**
* Creates a new {@link TransferEncoding} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final TransferEncoding transferEncoding(String value) {
return TransferEncoding.of(value);
}
/**
* Creates a new {@link TransferEncoding} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final TransferEncoding transferEncoding(Supplier<String> value) {
return TransferEncoding.of(value);
}
/**
* Creates a new {@link Upgrade} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Upgrade upgrade(String value) {
return Upgrade.of(value);
}
/**
* Creates a new {@link Upgrade} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Upgrade upgrade(List<String> value) {
return Upgrade.of(value);
}
/**
* Creates a new {@link Upgrade} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Upgrade upgrade(Supplier<List<String>> value) {
return Upgrade.of(value);
}
/**
* Creates a new {@link UserAgent} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final UserAgent userAgent(String value) {
return UserAgent.of(value);
}
/**
* Creates a new {@link UserAgent} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final UserAgent userAgent(Supplier<String> value) {
return UserAgent.of(value);
}
/**
* Creates a new {@link Vary} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Vary vary(String value) {
return Vary.of(value);
}
/**
* Creates a new {@link Vary} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Vary vary(Supplier<String> value) {
return Vary.of(value);
}
/**
* Creates a new {@link Via} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Via via(String value) {
return Via.of(value);
}
/**
* Creates a new {@link Via} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Via via(List<String> value) {
return Via.of(value);
}
/**
* Creates a new {@link Via} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Via via(Supplier<List<String>> value) {
return Via.of(value);
}
/**
* Creates a new {@link Warning} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Warning warning(String value) {
return Warning.of(value);
}
/**
* Creates a new {@link Warning} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final Warning warning(Supplier<String> value) {
return Warning.of(value);
}
/**
* Creates a new {@link WwwAuthenticate} header.
*
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final WwwAuthenticate wwwAuthenticate(String value) {
return WwwAuthenticate.of(value);
}
/**
* Creates a new {@link WwwAuthenticate} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the value is <jk>null</jk>.
*/
public static final WwwAuthenticate wwwAuthenticate(Supplier<String> value) {
return WwwAuthenticate.of(value);
}
//-----------------------------------------------------------------------------------------------------------------
// Custom headers
//-----------------------------------------------------------------------------------------------------------------
/**
* Creates a new {@link BasicBooleanHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be parsable by {@link Boolean#parseBoolean(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicBooleanHeader booleanHeader(String name, String value) {
return BasicBooleanHeader.of(name, value);
}
/**
* Creates a new {@link BasicBooleanHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicBooleanHeader booleanHeader(String name, Boolean value) {
return BasicBooleanHeader.of(name, value);
}
/**
* Creates a new {@link BasicBooleanHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicBooleanHeader booleanHeader(String name, Supplier<Boolean> value) {
return BasicBooleanHeader.of(name, value);
}
/**
* Creates a new {@link BasicCsvArrayHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be a comma-delimited list.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicCsvArrayHeader csvArrayHeader(String name, String value) {
return BasicCsvArrayHeader.of(name, value);
}
/**
* Creates a new {@link BasicCsvArrayHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicCsvArrayHeader csvArrayHeader(String name, List<String> value) {
return BasicCsvArrayHeader.of(name, value);
}
/**
* Creates a new {@link BasicCsvArrayHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicCsvArrayHeader csvArrayHeader(String name, Supplier<List<String>> value) {
return BasicCsvArrayHeader.of(name, value);
}
/**
* Creates a new {@link BasicDateHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be an RFC-1123 formated string (e.g. <js>"Sat, 29 Oct 1994 19:43:31 GMT"</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicDateHeader dateHeader(String name, String value) {
return BasicDateHeader.of(name, value);
}
/**
* Creates a new {@link BasicDateHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicDateHeader dateHeader(String name, ZonedDateTime value) {
return BasicDateHeader.of(name, value);
}
/**
* Creates a new {@link BasicDateHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicDateHeader dateHeader(String name, Supplier<ZonedDateTime> value) {
return BasicDateHeader.of(name, value);
}
/**
* Creates a new {@link BasicEntityTagArrayHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be a comma-delimited list of entity validator values (e.g. <js>"\"xyzzy\", \"r2d2xxxx\", \"c3piozzzz\""</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicEntityTagArrayHeader entityTagArrayHeader(String name, String value) {
return BasicEntityTagArrayHeader.of(name, value);
}
/**
* Creates a new {@link BasicEntityTagArrayHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicEntityTagArrayHeader entityTagArrayHeader(String name, List<EntityTag> value) {
return BasicEntityTagArrayHeader.of(name, value);
}
/**
* Creates a new {@link BasicEntityTagArrayHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicEntityTagArrayHeader entityTagArrayHeader(String name, Supplier<List<EntityTag>> value) {
return BasicEntityTagArrayHeader.of(name, value);
}
/**
* Creates a new {@link BasicEntityTagHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be an entity tag value (e.g. <js>"\"xyzzy\""</js>).
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicEntityTagHeader entityTagHeader(String name, String value) {
return BasicEntityTagHeader.of(name, value);
}
/**
* Creates a new {@link BasicEntityTagHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicEntityTagHeader entityTagHeader(String name, EntityTag value) {
return BasicEntityTagHeader.of(name, value);
}
/**
* Creates a new {@link BasicEntityTagHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicEntityTagHeader entityTagHeader(String name, Supplier<EntityTag> value) {
return BasicEntityTagHeader.of(name, value);
}
/**
* Creates a new {@link BasicIntegerHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be parsable using {@link Integer#parseInt(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicIntegerHeader integerHeader(String name, String value) {
return BasicIntegerHeader.of(name, value);
}
/**
* Creates a new {@link BasicIntegerHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicIntegerHeader integerHeader(String name, Integer value) {
return BasicIntegerHeader.of(name, value);
}
/**
* Creates a new {@link BasicIntegerHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicIntegerHeader integerHeader(String name, Supplier<Integer> value) {
return BasicIntegerHeader.of(name, value);
}
/**
* Creates a new {@link BasicLongHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be parsable by {@link Long#parseLong(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicLongHeader longHeader(String name, String value) {
return BasicLongHeader.of(name, value);
}
/**
* Creates a new {@link BasicLongHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be parsable by {@link Long#parseLong(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicLongHeader longHeader(String name, Long value) {
return BasicLongHeader.of(name, value);
}
/**
* Creates a new {@link BasicLongHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicLongHeader longHeader(String name, Supplier<Long> value) {
return BasicLongHeader.of(name, value);
}
/**
* Creates a new {@link BasicMediaRangeArrayHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be parsable by {@link MediaRanges#of(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicMediaRangeArrayHeader mediaRangeArrayHeader(String name, String value) {
return BasicMediaRangeArrayHeader.of(name, value);
}
/**
* Creates a new {@link BasicMediaRangeArrayHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicMediaRangeArrayHeader mediaRangeArrayHeader(String name, MediaRanges value) {
return BasicMediaRangeArrayHeader.of(name, value);
}
/**
* Creates a new {@link BasicMediaRangeArrayHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be parsable by {@link MediaRanges#of(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicMediaRangeArrayHeader mediaRangeArrayHeader(String name, Supplier<MediaRanges> value) {
if (isEmpty(name) || value == null)
return null;
return new BasicMediaRangeArrayHeader(name, value);
}
/**
* Creates a new {@link BasicMediaTypeHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be parsable by {@link MediaType#of(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicMediaTypeHeader mediaTypeHeader(String name, String value) {
return BasicMediaTypeHeader.of(name, value);
}
/**
* Creates a new {@link BasicMediaTypeHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicMediaTypeHeader mediaTypeHeader(String name, MediaType value) {
return BasicMediaTypeHeader.of(name, value);
}
/**
* Creates a new {@link BasicMediaTypeHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicMediaTypeHeader mediaTypeHeader(String name, Supplier<MediaType> value) {
if (isEmpty(name) || value == null)
return null;
return new BasicMediaTypeHeader(name, value);
}
/**
* Creates a {@link BasicHeader} from a name/value pair string (e.g. <js>"Foo: bar"</js>)
*
* @param pair The pair string.
* @return A new header bean, or <jk>null</jk> if the value was <jk>null</jk>.
*/
public static final BasicStringHeader stringHeader(String pair) {
return BasicStringHeader.ofPair(pair);
}
/**
* Creates a new {@link BasicHeader} header.
*
* @param name The parameter name.
* @param value
* The parameter value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicHeader basicHeader(String name, Object value) {
return BasicHeader.of(name, value);
}
/**
* Creates a new {@link BasicHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
* */
public static final BasicHeader basicHeader(String name, Supplier<?> value) {
return new BasicHeader(name, value);
}
/**
* Creates a new {@link SerializedHeader} header.
*
* @param name The header name.
* @param value
* The POJO to serialize as the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty.
*/
public static final SerializedHeader serializedHeader(String name, Object value) {
return SerializedHeader.of(name, value);
}
/**
* Creates a new {@link SerializedHeader} header.
*
* @param name The HTTP header name name.
* @param value
* The POJO to serialize as the header value.
* @param serializer
* The serializer to use for serializing the value to a string value.
* @param schema
* The schema object that defines the format of the output.
* <br>If <jk>null</jk>, defaults to the schema defined on the serializer.
* <br>If that's also <jk>null</jk>, defaults to {@link HttpPartSchema#DEFAULT}.
* <br>Only used if serializer is schema-aware (e.g. {@link OpenApiSerializer}).
* <br>Can also be a {@link Supplier}.
* @param skipIfEmpty If value is a blank string, the value should return as <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty.
*/
public static SerializedHeader serializedHeader(String name, Object value, HttpPartSerializerSession serializer, HttpPartSchema schema, boolean skipIfEmpty) {
return SerializedHeader.of(name, value, serializer, schema, skipIfEmpty);
}
/**
* Creates a new {@link SerializedHeader} header.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The HTTP header name name.
* @param value
* The supplier of the POJO to serialize as the header value.
* @param serializer
* The serializer to use for serializing the value to a string value.
* @param schema
* The schema object that defines the format of the output.
* <br>If <jk>null</jk>, defaults to the schema defined on the serializer.
* <br>If that's also <jk>null</jk>, defaults to {@link HttpPartSchema#DEFAULT}.
* <br>Only used if serializer is schema-aware (e.g. {@link OpenApiSerializer}).
* <br>Can also be a {@link Supplier}.
* @param skipIfEmpty If value is a blank string, the value should return as <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty.
*/
public static SerializedHeader serializedHeader(String name, Supplier<?> value, HttpPartSerializerSession serializer, HttpPartSchema schema, boolean skipIfEmpty) {
return SerializedHeader.of(name, value, serializer, schema, skipIfEmpty);
}
/**
* Creates a new {@link SerializedHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the POJO to serialize as the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty.
*/
public static final SerializedHeader serializedHeader(String name, Supplier<?> value) {
return SerializedHeader.of(name, value);
}
/**
* Creates a new {@link BasicStringHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicStringHeader stringHeader(String name, String value) {
return BasicStringHeader.of(name, value);
}
/**
* Creates a new {@link BasicStringHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicStringHeader stringHeader(String name, Supplier<String> value) {
return BasicStringHeader.of(name, value);
}
/**
* Creates a new {@link BasicStringRangeArrayHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be parsable by {@link StringRanges#of(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicStringRangeArrayHeader stringRangeArrayHeader(String name, String value) {
return BasicStringRangeArrayHeader.of(name, value);
}
/**
* Creates a new {@link BasicStringRangeArrayHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicStringRangeArrayHeader stringRangeArrayHeader(String name, StringRanges value) {
return BasicStringRangeArrayHeader.of(name, value);
}
/**
* Creates a new {@link BasicStringRangeArrayHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicStringRangeArrayHeader stringRangeArrayHeader(String name, Supplier<StringRanges> value) {
return BasicStringRangeArrayHeader.of(name, value);
}
/**
* Creates a new {@link BasicUriHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Must be parsable by {@link URI#create(String)}.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicUriHeader uriHeader(String name, String value) {
return BasicUriHeader.of(name, value);
}
/**
* Creates a new {@link BasicUriHeader} header.
*
* @param name The header name.
* @param value
* The header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicUriHeader uriHeader(String name, URI value) {
return BasicUriHeader.of(name, value);
}
/**
* Creates a new {@link BasicUriHeader} header with a delayed value.
*
* <p>
* Header value is re-evaluated on each call to {@link Header#getValue()}.
*
* @param name The header name.
* @param value
* The supplier of the header value.
* <br>Can be <jk>null</jk>.
* @return A new header bean, or <jk>null</jk> if the name is <jk>null</jk> or empty or the value is <jk>null</jk>.
*/
public static final BasicUriHeader uriHeader(String name, Supplier<URI> value) {
return BasicUriHeader.of(name, value);
}
/**
* Creates a new {@link Header} of the specified type.
*
* <p>
* The implementation class must have a public constructor taking in one of the following argument lists:
* <ul>
* <li><c><jk>public</jk> X(String <jv>headerValue</jv>)</c>
* <li><c><jk>public</jk> X(Object <jv>headerValue</jv>)</c>
* <li><c><jk>public</jk> X(String <jv>headerName</jv>, String <jv>headerValue</jv>)</c>
* <li><c><jk>public</jk> X(String <jv>headerName</jv>, Object <jv>headerValue</jv>)</c>
* </ul>
*
* @param type The header implementation class.
* @param name The header name.
* @param value The header value.
* @return A new unmodifiable instance, never <jk>null</jk>.
*/
public static final <T extends Header> T header(Class<T> type, String name, Object value) {
return HeaderBeanMeta.of(type).construct(name, value);
}
/**
* Creates a new {@link Header} of the specified type.
*
* <p>
* Same as {@link #header(Class, String, Object)} but the header name is pulled from the {@link org.apache.juneau.http.annotation.Header#name() @Header(name)} or
* {@link org.apache.juneau.http.annotation.Header#value() @Header(value)} annotations.
*
* @param type The header implementation class.
* @param value The header value.
* @return A new unmodifiable instance, never <jk>null</jk>.
*/
public static final <T extends Header> T header(Class<T> type, Object value) {
return HeaderBeanMeta.of(type).construct(null, value);
}
/**
* Instantiates a new {@link HeaderListBuilder}.
*
* @return A new empty builder.
*/
public static final HeaderListBuilder headerList() {
return HeaderList.create();
}
/**
* Creates a new {@link HeaderList} initialized with the specified headers.
*
* @param headers The headers to add to the list. Can be <jk>null</jk>. <jk>null</jk> entries are ignored.
* @return A new unmodifiable instance, never <jk>null</jk>.
*/
public static final HeaderList headerList(List<Header> headers) {
return HeaderList.of(headers);
}
/**
* Creates a new {@link HeaderList} initialized with the specified headers.
*
* @param headers The headers to add to the list. <jk>null</jk> entries are ignored.
* @return A new unmodifiable instance, never <jk>null</jk>.
*/
public static final HeaderList headerList(Header...headers) {
return HeaderList.of(headers);
}
/**
* Creates a new {@link HeaderList} initialized with the specified name/value pairs.
*
* @param pairs
* Initial list of pairs.
* <br>Must be an even number of parameters representing key/value pairs.
* @throws RuntimeException If odd number of parameters were specified.
* @return A new instance.
*/
public static HeaderList headerList(String...pairs) {
return HeaderList.ofPairs(pairs);
}
//-----------------------------------------------------------------------------------------------------------------
// Utility methods.
//-----------------------------------------------------------------------------------------------------------------
/**
* Returns <jk>true</jk> if the {@link #cast(Object)} method can be used on the specified object.
*
* @param o The object to check.
* @return <jk>true</jk> if the {@link #cast(Object)} method can be used on the specified object.
*/
public static boolean canCast(Object o) {
ClassInfo ci = ClassInfo.of(o);
return ci != null && ci.isChildOfAny(Header.class, Headerable.class, NameValuePair.class, NameValuePairable.class, Map.Entry.class);
}
/**
* Utility method for converting an arbitrary object to a {@link Header}.
*
* @param o
* The object to cast or convert to a {@link Header}.
* @return Either the same object cast as a {@link Header} or converted to a {@link Header}.
*/
@SuppressWarnings("rawtypes")
public static Header cast(Object o) {
if (o instanceof Header)
return (Header)o;
if (o instanceof Headerable)
return ((Headerable)o).asHeader();
if (o instanceof NameValuePair)
return BasicHeader.of((NameValuePair)o);
if (o instanceof NameValuePairable)
return BasicHeader.of(((NameValuePairable)o).asNameValuePair());
if (o instanceof Map.Entry) {
Map.Entry e = (Map.Entry)o;
return BasicHeader.of(stringify(e.getKey()), stringify(e.getValue()));
}
throw runtimeException("Object of type {0} could not be converted to a Header.", className(o));
}
}