Class HeaderList

All Implemented Interfaces:
Serializable, Cloneable, Iterable<Header>, Collection<Header>, List<Header>, RandomAccess
Direct Known Subclasses:
HeaderList.Void

public class HeaderList extends ControlledArrayList<Header>
A simple list of HTTP headers with various convenience methods.
Example

HeaderList headers = HeaderList .create() .append(Accept.of("text/xml")) .append("Content-Type", ()->getDynamicContentTypeFromSomewhere());

Convenience creators are provided for creating lists with minimal code:

HeaderList headers = HeaderList.of(Accept.TEXT_XML, ContentType.TEXT_XML);

Static methods are provided on HttpHeaders to further simplify creation of header lists.

import static org.apache.juneau.http.HttpHeaders.*; HeaderList headers = headerList(accept("text/xml"), contentType("text/xml"));

See Also:
See Also:
  • Constructor Details

    • HeaderList

      public HeaderList()
      Constructor.
    • HeaderList

      protected HeaderList(HeaderList copyFrom)
      Copy constructor.
      Parameters:
      copyFrom - The bean to copy.
  • Method Details

    • create

      public static HeaderList create()
      Instantiates a new list.
      Returns:
      A new list.
    • of

      public static HeaderList of(List<Header> headers)
      Creates a new HeaderList initialized with the specified headers.
      Parameters:
      headers - The headers to add to the list.
      Can be null.
      null entries are ignored.
      Returns:
      A new unmodifiable instance, never null.
    • of

      public static HeaderList of(Header... headers)
      Creates a new HeaderList initialized with the specified headers.
      Parameters:
      headers - The headers to add to the list.
      null entries are ignored.
      Returns:
      A new unmodifiable instance, never null.
    • ofPairs

      public static HeaderList ofPairs(String... pairs)
      Creates a new HeaderList initialized with the specified name/value pairs.
      Example

      HeaderList headers = HeaderList.ofPairs("Accept", "text/xml", "Content-Type", "text/xml");

      Parameters:
      pairs - Initial list of pairs.
      Must be an even number of parameters representing key/value pairs.
      Returns:
      A new instance.
      Throws:
      RuntimeException - If odd number of parameters were specified.
    • copy

      public HeaderList copy()
      Makes a copy of this list.
      Returns:
      A new copy of this list.
    • setDefault

      public HeaderList setDefault(List<Header> headers)
      Adds a collection of default headers.

      Default headers are set if they're not already in the list.

      Parameters:
      headers - The list of default headers.
      Returns:
      This object.
    • setDefault

      public HeaderList setDefault(String name, Object value)
      Replaces the first occurrence of the headers with the same name.
      Parameters:
      name - The header name.
      value - The header value.
      Returns:
      This object.
    • setDefault

      public HeaderList setDefault(String name, Supplier<?> value)
      Replaces the first occurrence of the headers with the same name.
      Parameters:
      name - The header name.
      value - The header value.
      Returns:
      This object.
    • setDefault

      public HeaderList setDefault(Header... headers)
      Makes a copy of this list of headers and adds a collection of default headers.

      Default headers are set if they're not already in the list.

      Parameters:
      headers - The list of default headers.
      Returns:
      A new list, or the same list if the headers were empty.
    • resolving

      Allows header values to contain SVL variables.

      Resolves variables in header values when using the following methods:

      Uses VarResolver.DEFAULT to resolve variables.

      Returns:
      This object.
    • resolving

      public HeaderList resolving(VarResolver varResolver)
      Allows header values to contain SVL variables.

      Resolves variables in header values when using the following methods:

      Parameters:
      varResolver - The variable resolver to use for resolving variables.
      Returns:
      This object.
    • caseSensitive

      public HeaderList caseSensitive(boolean value)
      Specifies that the headers in this list should be treated as case-sensitive.

      The default behavior is case-insensitive.

      Parameters:
      value - The new value for this setting.
      Returns:
      This object.
    • append

      public HeaderList append(Header value)
      Adds the specified header to the end of the headers in this list.
      Parameters:
      value - The header to add. null values are ignored.
      Returns:
      This object.
    • append

      public HeaderList append(String name, Object value)
      Appends the specified header to the end of this list.

      The header is added as a BasicHeader.

      Parameters:
      name - The header name.
      value - The header value.
      Returns:
      This object.
    • append

      public HeaderList append(String name, Supplier<?> value)
      Appends the specified header to the end of this list using a value supplier.

      The header is added as a BasicHeader.

      Value is re-evaluated on each call to BasicHeader.getValue().

      Parameters:
      name - The header name.
      value - The header value supplier.
      Returns:
      This object.
    • append

      public HeaderList append(Header... values)
      Adds the specified headers to the end of the headers in this list.
      Parameters:
      values - The headers to add. null values are ignored.
      Returns:
      This object.
    • append

      public HeaderList append(List<Header> values)
      Adds the specified headers to the end of the headers in this list.
      Parameters:
      values - The headers to add. null values are ignored.
      Returns:
      This object.
    • prepend

      public HeaderList prepend(Header value)
      Adds the specified header to the beginning of the headers in this list.
      Parameters:
      value - The header to add. null values are ignored.
      Returns:
      This object.
    • prepend

      public HeaderList prepend(String name, Object value)
      Appends the specified header to the beginning of this list.

      The header is added as a BasicHeader.

      Parameters:
      name - The header name.
      value - The header value.
      Returns:
      This object.
    • prepend

      public HeaderList prepend(String name, Supplier<?> value)
      Appends the specified header to the beginning of this list using a value supplier.

      The header is added as a BasicHeader.

      Value is re-evaluated on each call to BasicHeader.getValue().

      Parameters:
      name - The header name.
      value - The header value supplier.
      Returns:
      This object.
    • prepend

      public HeaderList prepend(Header... values)
      Adds the specified headers to the beginning of the headers in this list.
      Parameters:
      values - The headers to add. null values are ignored.
      Returns:
      This object.
    • prepend

      public HeaderList prepend(List<Header> values)
      Adds the specified headers to the beginning of the headers in this list.
      Parameters:
      values - The headers to add. null values are ignored.
      Returns:
      This object.
    • remove

      public HeaderList remove(Header value)
      Removes the specified header from this list.
      Parameters:
      value - The header to remove. null values are ignored.
      Returns:
      This object.
    • remove

      public HeaderList remove(Header... values)
      Removes the specified headers from this list.
      Parameters:
      values - The headers to remove. null values are ignored.
      Returns:
      This object.
    • remove

      public HeaderList remove(List<Header> values)
      Removes the specified headers from this list.
      Parameters:
      values - The headers to remove. null values are ignored.
      Returns:
      This object.
    • remove

      public HeaderList remove(String name)
      Removes the header with the specified name from this list.
      Parameters:
      name - The header name.
      Returns:
      This object.
    • remove

      public HeaderList remove(String... names)
      Removes the header with the specified name from this list.
      Parameters:
      names - The header name.
      Returns:
      This object.
    • removeAll

      Removes all headers from this list.
      Returns:
      This object.
    • set

      public HeaderList set(Header value)
      Adds or replaces the header(s) with the same name.

      If no header with the same name is found the given header is added to the end of the list.

      Parameters:
      value - The headers to replace. null values are ignored.
      Returns:
      This object.
    • set

      public HeaderList set(Header... values)
      Adds or replaces the header(s) with the same name.

      If no header with the same name is found the given header is added to the end of the list.

      Parameters:
      values - The headers to replace. null values are ignored.
      Returns:
      This object.
    • set

      public HeaderList set(String name, Object value)
      Replaces the first occurrence of the headers with the same name.
      Parameters:
      name - The header name.
      value - The header value.
      Returns:
      This object.
    • set

      public HeaderList set(String name, Supplier<?> value)
      Replaces the first occurrence of the headers with the same name.
      Parameters:
      name - The header name.
      value - The header value.
      Returns:
      This object.
    • set

      public HeaderList set(List<Header> values)
      Replaces the first occurrence of the headers with the same name.

      If no header with the same name is found the given header is added to the end of the list.

      Parameters:
      values - The headers to replace. null values are ignored.
      Returns:
      This object.
    • getFirst

      public Optional<Header> getFirst(String name)
      Gets the first header with the given name.

      Header name comparison is case insensitive.

      Parameters:
      name - The header name.
      Returns:
      The first matching header, or Optional.empty() if not found.
    • getLast

      public Optional<Header> getLast(String name)
      Gets the last header with the given name.

      Header name comparison is case insensitive.

      Parameters:
      name - The header name.
      Returns:
      The last matching header, or Optional.empty() if not found.
    • get

      public Optional<Header> get(String name)
      Gets a header representing all of the header values with the given name.

      If more that one header with the given name exists the values will be combined with ", " as per RFC 2616 Section 4.2.

      Parameters:
      name - The header name.
      Returns:
      A header with a condensed value, or Optional.empty() if no headers by the given name are present
    • get

      public <T> Optional<T> get(String name, Class<T> type)
      Gets a header representing all of the header values with the given name.

      If more that one header with the given name exists the values will be combined with ", " as per RFC 2616 Section 4.2.

      The implementation class must have a public constructor taking in one of the following argument lists:

      • X(String value)
      • X(Object value)
      • X(String name, String value)
      • X(String name, Object value)
      Example

      BasicIntegerHeader age = headerList.get("Age", BasicIntegerHeader.class);

      Type Parameters:
      T - The header implementation class.
      Parameters:
      name - The header name.
      type - The header implementation class.
      Returns:
      A header with a condensed value or null if no headers by the given name are present
    • get

      public <T> Optional<T> get(Class<T> type)
      Gets a header representing all of the header values with the given name.

      Same as get(String, Class) but the header name is pulled from the Header.name() or Header.value() annotations.

      Example

      Age age = headerList.get(Age.class);

      Type Parameters:
      T - The return type.
      Parameters:
      type - The header implementation class.
      Returns:
      A header with a condensed value or null if no headers by the given name are present
    • getAll

      public Header[] getAll()
      Gets all of the headers.

      The returned array maintains the relative order in which the headers were added. Each call creates a new array not backed by this list.

      As a general rule, it's more efficient to use the other methods with consumers to get headers.

      Returns:
      An array containing all headers, never null.
    • getAll

      public Header[] getAll(String name)
      Gets all of the headers with the given name.

      The returned array maintains the relative order in which the headers were added. Header name comparison is case insensitive. Headers with null values are ignored. Each call creates a new array not backed by this list.

      As a general rule, it's more efficient to use the other methods with consumers to get headers.

      Parameters:
      name - The header name.
      Returns:
      An array containing all matching headers, never null.
    • forEachValue

      public HeaderList forEachValue(Predicate<Header> filter, Consumer<String> action)
      Performs an action on the values for all matching headers in this list.
      Parameters:
      filter - A predicate to apply to each element to determine if it should be included. Can be null.
      action - An action to perform on each element.
      Returns:
      This object.
    • forEachValue

      public HeaderList forEachValue(String name, Consumer<String> action)
      Performs an action on the values of all matching headers in this list.
      Parameters:
      name - The header name.
      action - An action to perform on each element.
      Returns:
      This object.
    • getValues

      public String[] getValues(String name)
      Returns all the string values for all headers with the specified name.
      Parameters:
      name - The header name.
      Returns:
      An array containing all values. Never null.
    • contains

      public boolean contains(String name)
      Tests if headers with the given name are contained within this list.

      Header name comparison is case insensitive.

      Parameters:
      name - The header name.
      Returns:
      true if at least one header with the name is present.
    • headerIterator

      Returns an iterator over this list of headers.
      Returns:
      A new iterator over this list of headers.
    • headerIterator

      Returns an iterator over the headers with a given name in this list.
      Parameters:
      name - The name of the headers over which to iterate, or null for all headers
      Returns:
      A new iterator over the matching headers in this list.
    • forEach

      public HeaderList forEach(String name, Consumer<Header> action)
      Performs an action on all headers with the specified name in this list.

      This is the preferred method for iterating over headers as it does not involve creation or copy of lists/arrays.

      Parameters:
      name - The header name.
      action - An action to perform on each element.
      Returns:
      This object.
    • forEach

      public HeaderList forEach(Predicate<Header> filter, Consumer<Header> action)
      Performs an action on all matching headers in this list.

      This is the preferred method for iterating over headers as it does not involve creation or copy of lists/arrays.

      Parameters:
      filter - A predicate to apply to each element to determine if it should be included. Can be null.
      action - An action to perform on each element.
      Returns:
      This object.
    • stream

      public Stream<Header> stream(String name)
      Returns a stream of the headers in this list with the specified name.

      This does not involve a copy of the underlying array of Header objects so should perform well.

      Parameters:
      name - The header name.
      Returns:
      This object.
    • toString

      public String toString()
      Overrides:
      toString in class AbstractCollection<Header>
    • setUnmodifiable

      Description copied from class: ControlledArrayList
      Specifies whether this bean should be unmodifiable.

      When enabled, attempting to set any properties on this bean will cause an UnsupportedOperationException.

      Overrides:
      setUnmodifiable in class ControlledArrayList<Header>
      Returns:
      This object.