## Uses of Interface
org.apache.hc.core5.http.Header

- Packages that use Header
  Package | Description
  --- | ---
  org.apache.hc.core5.http | Core HTTP transport component APIs.
  org.apache.hc.core5.http.impl.io | Default implementation of HTTP/1.1 transport based on the classic (blocking) I/O model.
  org.apache.hc.core5.http.impl.nio | Default implementation of HTTP/1.1 transport based on the asynchronous (non-blocking) I/O model.
  org.apache.hc.core5.http.io.entity | HTTP message entity APIs based on the classic (blocking) I/O model.
  org.apache.hc.core5.http.io.support | Support classes for the classic (blocking) I/O model.
  org.apache.hc.core5.http.message | Core HTTP message components, message element parser and writer APIs and their default implementations.
  org.apache.hc.core5.http.nio | Core HTTP transport APIs based on the asynchronous, event driven I/O model.
  org.apache.hc.core5.http.nio.entity | HTTP message entity APIs based on the asynchronous (non-blocking) I/O model.
  org.apache.hc.core5.http.nio.support | Support classes for the asynchronous I/O model.
  org.apache.hc.core5.http.nio.support.classic | Support classes for the asynchronous I/O model that emulate behavior of the classic (blocking) I/O model.
  org.apache.hc.core5.http.support |
  org.apache.hc.core5.http2 | Core HTTP/2 transport component APIs.
  org.apache.hc.core5.http2.hpack | HTTP/2 HPACK APIs.
  org.apache.hc.core5.http2.impl | Default implementations of core HTTP/2 APIs.
  org.apache.hc.core5.http2.impl.nio | Default implementation of HTTP/2 transport based on the asynchronous (non-blocking) I/O model.
  org.apache.hc.core5.reactive |
  org.apache.hc.core5.testing.nio |

- - ### Uses of Header in org.apache.hc.core5.http

    Subinterfaces of Header in org.apache.hc.core5.http
    Modifier and Type | Interface and Description
    --- | ---
    `interface` | `FormattedHeader` An HTTP header which is already formatted.

    Methods in org.apache.hc.core5.http that return Header
    Modifier and Type | Method and Description
    --- | ---
    `Header` | MessageHeaders.`getFirstHeader(String name)` Returns the first header with a specified name of this message.
    `Header` | MessageHeaders.`getHeader(String name)` Gets single first header with the given name.
    `Header[]` | MessageHeaders.`getHeaders()` Returns all the headers of this message.
    `Header[]` | MessageHeaders.`getHeaders(String name)` Returns all the headers with a specified name of this message.
    `Header` | MessageHeaders.`getLastHeader(String name)` Returns the last header with a specified name of this message.

    Methods in org.apache.hc.core5.http that return types with arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `Supplier<List<? extends Header>>` | HttpEntity.`getTrailers()` Returns supplier of message trailers - headers sent after message body.
    `Iterator<Header>` | MessageHeaders.`headerIterator()` Returns an iterator of all the headers.
    `Iterator<Header>` | MessageHeaders.`headerIterator(String name)` Returns an iterator of the headers with a given name.

    Methods in org.apache.hc.core5.http with parameters of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | HttpMessage.`addHeader(Header header)` Adds a header to this message.
    `boolean` | HttpMessage.`removeHeader(Header header)` Removes a header from this message.
    `void` | HttpMessage.`setHeader(Header header)` Overwrites the first header with the same name.
    `void` | HttpMessage.`setHeaders(Header... headers)` Overwrites all the headers in the message.

  - ### Uses of Header in org.apache.hc.core5.http.impl.io

    Methods in org.apache.hc.core5.http.impl.io that return Header
    Modifier and Type | Method and Description
    --- | ---
    `Header[]` | ChunkedInputStream.`getFooters()`
    `static Header[]` | AbstractMessageParser.`parseHeaders(SessionInputBuffer inBuffer, InputStream inputStream, int maxHeaderCount, int maxLineLen, LineParser lineParser)` Parses HTTP headers from the data receiver stream according to the generic format as specified by the HTTP/1.1 protocol specification.
    `static Header[]` | AbstractMessageParser.`parseHeaders(SessionInputBuffer inBuffer, InputStream inputStream, int maxHeaderCount, int maxLineLen, LineParser parser, List<CharArrayBuffer> headerLines)` Parses HTTP headers from the data receiver stream according to the generic format as specified by the HTTP/1.1 protocol specification.

    Constructor parameters in org.apache.hc.core5.http.impl.io with type arguments of type Header
    Constructor and Description
    `ChunkedOutputStream(SessionOutputBuffer buffer, OutputStream outputStream, byte[] chunkCache, Supplier<List<? extends Header>> trailerSupplier)` Default constructor.
    `ChunkedOutputStream(SessionOutputBuffer buffer, OutputStream outputStream, int chunkSizeHint, Supplier<List<? extends Header>> trailerSupplier)` Constructor taking an integer chunk size hint.

  - ### Uses of Header in org.apache.hc.core5.http.impl.nio

    Methods in org.apache.hc.core5.http.impl.nio that return types with arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `List<? extends Header>` | ChunkDecoder.`getTrailers()`
    `List<? extends Header>` | AbstractContentDecoder.`getTrailers()`

    Method parameters in org.apache.hc.core5.http.impl.nio with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | ChunkEncoder.`complete(List<? extends Header> trailers)`
    `void` | AbstractContentEncoder.`complete(List<? extends Header> trailers)`

  - ### Uses of Header in org.apache.hc.core5.http.io.entity

    Methods in org.apache.hc.core5.http.io.entity that return types with arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `Supplier<List<? extends Header>>` | HttpEntityWrapper.`getTrailers()`
    `Supplier<List<? extends Header>>` | AbstractHttpEntity.`getTrailers()`
    `Supplier<List<? extends Header>>` | NullEntity.`getTrailers()`

    Methods in org.apache.hc.core5.http.io.entity with parameters of type Header
    Modifier and Type | Method and Description
    --- | ---
    `static HttpEntity` | HttpEntities.`create(byte[] content, ContentType contentType, Header... trailers)`
    `static HttpEntity` | HttpEntities.`create(File content, ContentType contentType, Header... trailers)`
    `static HttpEntity` | HttpEntities.`create(IOCallback<OutputStream> callback, ContentType contentType, Header... trailers)`
    `static HttpEntity` | HttpEntities.`create(Path content, ContentType contentType, Header... trailers)`
    `static HttpEntity` | HttpEntities.`create(Serializable serializable, ContentType contentType, Header... trailers)`
    `static HttpEntity` | HttpEntities.`create(String content, Charset charset, Header... trailers)`
    `static HttpEntity` | HttpEntities.`create(String content, ContentType contentType, Header... trailers)`
    `static HttpEntity` | HttpEntities.`create(String content, Header... trailers)`
    `static HttpEntity` | HttpEntities.`withTrailers(HttpEntity entity, Header... trailers)`

  - ### Uses of Header in org.apache.hc.core5.http.io.support

    Methods in org.apache.hc.core5.http.io.support with parameters of type Header
    Modifier and Type | Method and Description
    --- | ---
    `ClassicRequestBuilder` | ClassicRequestBuilder.`addHeader(Header header)`
    `ClassicResponseBuilder` | ClassicResponseBuilder.`addHeader(Header header)`
    `ClassicRequestBuilder` | ClassicRequestBuilder.`removeHeader(Header header)`
    `ClassicResponseBuilder` | ClassicResponseBuilder.`removeHeader(Header header)`
    `ClassicRequestBuilder` | ClassicRequestBuilder.`setHeader(Header header)`
    `ClassicResponseBuilder` | ClassicResponseBuilder.`setHeader(Header header)`
    `ClassicRequestBuilder` | ClassicRequestBuilder.`setHeaders(Header... headers)`
    `ClassicResponseBuilder` | ClassicResponseBuilder.`setHeaders(Header... headers)`

  - ### Uses of Header in org.apache.hc.core5.http.message

    Classes in org.apache.hc.core5.http.message that implement Header
    Modifier and Type | Class and Description
    --- | ---
    `class` | `BasicHeader` Immutable `Header`.
    `class` | `BufferedHeader` This class represents a raw HTTP header whose content is parsed 'on demand' only when the header value needs to be consumed.

    Methods in org.apache.hc.core5.http.message that return Header
    Modifier and Type | Method and Description
    --- | ---
    `static Header` | MessageSupport.`format(String name, Set<String> tokens)`
    `static Header` | MessageSupport.`format(String name, String... tokens)`
    `Header` | HeaderGroup.`getCondensedHeader(String name)` Gets a header representing all of the header values with the given name.
    `Header` | HeaderGroup.`getFirstHeader(String name)` Gets the first header with the given name.
    `Header` | AbstractMessageWrapper.`getFirstHeader(String name)`
    `Header` | HeaderGroup.`getHeader(String name)` Gets single first header with the given name.
    `Header` | AbstractMessageWrapper.`getHeader(String name)`
    `Header[]` | HeaderGroup.`getHeaders()` Gets all of the headers contained within this group.
    `Header[]` | AbstractMessageWrapper.`getHeaders()`
    `Header[]` | HeaderGroup.`getHeaders(String name)` Gets all of the headers with the given name.
    `Header[]` | AbstractMessageWrapper.`getHeaders(String name)`
    `Header` | HeaderGroup.`getLastHeader(String name)` Gets the last header with the given name.
    `Header` | AbstractMessageWrapper.`getLastHeader(String name)`
    `Header` | BasicHeaderIterator.`next()` Obtains the next header from this iteration.
    `Header` | BasicLineParser.`parseHeader(CharArrayBuffer buffer)`
    `Header` | LazyLaxLineParser.`parseHeader(CharArrayBuffer buffer)`
    `Header` | LineParser.`parseHeader(CharArrayBuffer buffer)` Parses a header from the given buffer containing one line of text.
    `Header` | LazyLineParser.`parseHeader(CharArrayBuffer buffer)`

    Methods in org.apache.hc.core5.http.message that return types with arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `Iterator<Header>` | HeaderGroup.`headerIterator()` Returns an iterator over this group of headers.
    `Iterator<Header>` | AbstractMessageWrapper.`headerIterator()`
    `Iterator<Header>` | HeaderGroup.`headerIterator(String name)` Returns an iterator over the headers with a given name in this group.
    `Iterator<Header>` | AbstractMessageWrapper.`headerIterator(String name)`

    Methods in org.apache.hc.core5.http.message with parameters of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | HeaderGroup.`addHeader(Header header)` Adds the given header to the group.
    `void` | AbstractMessageWrapper.`addHeader(Header header)`
    `void` | LineFormatter.`formatHeader(CharArrayBuffer buffer, Header header)` Formats a header.
    `void` | BasicLineFormatter.`formatHeader(CharArrayBuffer buffer, Header header)`
    `static HeaderElement[]` | MessageSupport.`parse(Header header)`
    `static Set<String>` | MessageSupport.`parseTokens(Header header)`
    `boolean` | HeaderGroup.`removeHeader(Header header)` Removes the first given header.
    `boolean` | AbstractMessageWrapper.`removeHeader(Header header)`
    `boolean` | HeaderGroup.`removeHeaders(Header header)` Removes all headers that match the given header.
    `void` | HeaderGroup.`setHeader(Header header)` Replaces the first occurrence of the header with the same name.
    `void` | AbstractMessageWrapper.`setHeader(Header header)`
    `void` | HeaderGroup.`setHeaders(Header... headers)` Sets all of the headers contained within this group overriding any existing headers.
    `void` | AbstractMessageWrapper.`setHeaders(Header... headers)`

    Constructors in org.apache.hc.core5.http.message with parameters of type Header
    Constructor and Description
    `BasicHeaderIterator(Header[] headers, String name)` Creates a new header iterator.

    Constructor parameters in org.apache.hc.core5.http.message with type arguments of type Header
    Constructor and Description
    `BasicHeaderElementIterator(Iterator<Header> headerIterator)`
    `BasicHeaderElementIterator(Iterator<Header> headerIterator, HeaderValueParser parser)` Creates a new instance of BasicHeaderElementIterator
    `BasicTokenIterator(Iterator<Header> headerIterator)` Creates a new instance of `BasicTokenIterator`.

  - ### Uses of Header in org.apache.hc.core5.http.nio

    Methods in org.apache.hc.core5.http.nio that return types with arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `List<? extends Header>` | ContentDecoder.`getTrailers()` Returns content trailers if available

    Method parameters in org.apache.hc.core5.http.nio with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | ContentEncoder.`complete(List<? extends Header> trailers)` Terminates the content stream.
    `void` | DataStreamChannel.`endStream(List<? extends Header> trailers)` Terminates the underlying data stream and optionally writes a closing sequence with the given trailers.
    `void` | AsyncDataConsumer.`streamEnd(List<? extends Header> trailers)` Triggered to signal termination of the data stream.

  - ### Uses of Header in org.apache.hc.core5.http.nio.entity

    Methods in org.apache.hc.core5.http.nio.entity that return types with arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `List<Header>` | DigestingEntityConsumer.`getTrailers()` List of trailers sent with the data stream.

    Methods in org.apache.hc.core5.http.nio.entity with parameters of type Header
    Modifier and Type | Method and Description
    --- | ---
    `static AsyncEntityProducer` | AsyncEntityProducers.`create(byte[] content, ContentType contentType, Header... trailers)`
    `static AsyncEntityProducer` | AsyncEntityProducers.`create(File content, ContentType contentType, Header... trailers)`
    `static AsyncEntityProducer` | AsyncEntityProducers.`create(String content, Charset charset, Header... trailers)`
    `static AsyncEntityProducer` | AsyncEntityProducers.`create(String content, ContentType contentType, Header... trailers)`
    `static AsyncEntityProducer` | AsyncEntityProducers.`create(String content, Header... trailers)`
    `static AsyncEntityProducer` | AsyncEntityProducers.`createBinary(Callback<StreamChannel<ByteBuffer>> callback, ContentType contentType, Header... trailers)`
    `static AsyncEntityProducer` | AsyncEntityProducers.`createText(Callback<StreamChannel<CharBuffer>> callback, ContentType contentType, Header... trailers)`
    `static AsyncEntityProducer` | AsyncEntityProducers.`withTrailers(AsyncEntityProducer entity, Header... trailers)`

    Method parameters in org.apache.hc.core5.http.nio.entity with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | AbstractCharDataConsumer.`streamEnd(List<? extends Header> trailers)`
    `void` | NoopEntityConsumer.`streamEnd(List<? extends Header> trailers)`
    `void` | DigestingEntityConsumer.`streamEnd(List<? extends Header> trailers)`
    `void` | AbstractBinDataConsumer.`streamEnd(List<? extends Header> trailers)`

  - ### Uses of Header in org.apache.hc.core5.http.nio.support

    Methods in org.apache.hc.core5.http.nio.support with parameters of type Header
    Modifier and Type | Method and Description
    --- | ---
    `AsyncPushBuilder` | AsyncPushBuilder.`addHeader(Header header)`
    `AsyncResponseBuilder` | AsyncResponseBuilder.`addHeader(Header header)`
    `AsyncRequestBuilder` | AsyncRequestBuilder.`addHeader(Header header)`
    `AsyncPushBuilder` | AsyncPushBuilder.`removeHeader(Header header)`
    `AsyncResponseBuilder` | AsyncResponseBuilder.`removeHeader(Header header)`
    `AsyncRequestBuilder` | AsyncRequestBuilder.`removeHeader(Header header)`
    `AsyncPushBuilder` | AsyncPushBuilder.`setHeader(Header header)`
    `AsyncResponseBuilder` | AsyncResponseBuilder.`setHeader(Header header)`
    `AsyncRequestBuilder` | AsyncRequestBuilder.`setHeader(Header header)`
    `AsyncPushBuilder` | AsyncPushBuilder.`setHeaders(Header... headers)`
    `AsyncResponseBuilder` | AsyncResponseBuilder.`setHeaders(Header... headers)`
    `AsyncRequestBuilder` | AsyncRequestBuilder.`setHeaders(Header... headers)`

    Method parameters in org.apache.hc.core5.http.nio.support with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | AbstractAsyncPushHandler.`streamEnd(List<? extends Header> trailers)`
    `void` | BasicClientExchangeHandler.`streamEnd(List<? extends Header> trailers)`
    `void` | ImmediateResponseExchangeHandler.`streamEnd(List<? extends Header> trailers)`
    `void` | BasicResponseConsumer.`streamEnd(List<? extends Header> trailers)`
    `void` | BasicAsyncServerExpectationDecorator.`streamEnd(List<? extends Header> trailers)`
    `void` | AbstractAsyncResponseConsumer.`streamEnd(List<? extends Header> trailers)`
    `void` | AbstractServerExchangeHandler.`streamEnd(List<? extends Header> trailers)`
    `void` | AbstractAsyncRequesterConsumer.`streamEnd(List<? extends Header> trailers)`
    `void` | BasicRequestConsumer.`streamEnd(List<? extends Header> trailers)`

  - ### Uses of Header in org.apache.hc.core5.http.nio.support.classic

    Method parameters in org.apache.hc.core5.http.nio.support.classic with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | AbstractClassicEntityConsumer.`streamEnd(List<? extends Header> trailers)`
    `void` | AbstractClassicServerExchangeHandler.`streamEnd(List<? extends Header> trailers)`

  - ### Uses of Header in org.apache.hc.core5.http.support

    Methods in org.apache.hc.core5.http.support that return Header
    Modifier and Type | Method and Description
    --- | ---
    `Header` | AbstractMessageBuilder.`getFirstHeader(String name)`
    `Header[]` | AbstractMessageBuilder.`getFirstHeaders()`
    `Header[]` | AbstractMessageBuilder.`getHeaders()`
    `Header[]` | AbstractMessageBuilder.`getHeaders(String name)`
    `Header` | AbstractMessageBuilder.`getLastHeader(String name)`

    Methods in org.apache.hc.core5.http.support with parameters of type Header
    Modifier and Type | Method and Description
    --- | ---
    `BasicRequestBuilder` | BasicRequestBuilder.`addHeader(Header header)`
    `AbstractMessageBuilder<T>` | AbstractMessageBuilder.`addHeader(Header header)`
    `BasicResponseBuilder` | BasicResponseBuilder.`addHeader(Header header)`
    `AbstractResponseBuilder<T>` | AbstractResponseBuilder.`addHeader(Header header)`
    `AbstractRequestBuilder<T>` | AbstractRequestBuilder.`addHeader(Header header)`
    `BasicRequestBuilder` | BasicRequestBuilder.`removeHeader(Header header)`
    `AbstractMessageBuilder<T>` | AbstractMessageBuilder.`removeHeader(Header header)`
    `BasicResponseBuilder` | BasicResponseBuilder.`removeHeader(Header header)`
    `AbstractResponseBuilder<T>` | AbstractResponseBuilder.`removeHeader(Header header)`
    `AbstractRequestBuilder<T>` | AbstractRequestBuilder.`removeHeader(Header header)`
    `BasicRequestBuilder` | BasicRequestBuilder.`setHeader(Header header)`
    `AbstractMessageBuilder<T>` | AbstractMessageBuilder.`setHeader(Header header)`
    `BasicResponseBuilder` | BasicResponseBuilder.`setHeader(Header header)`
    `AbstractResponseBuilder<T>` | AbstractResponseBuilder.`setHeader(Header header)`
    `AbstractRequestBuilder<T>` | AbstractRequestBuilder.`setHeader(Header header)`
    `BasicRequestBuilder` | BasicRequestBuilder.`setHeaders(Header... headers)`
    `AbstractMessageBuilder<T>` | AbstractMessageBuilder.`setHeaders(Header... headers)`
    `BasicResponseBuilder` | BasicResponseBuilder.`setHeaders(Header... headers)`
    `AbstractResponseBuilder<T>` | AbstractResponseBuilder.`setHeaders(Header... headers)`
    `AbstractRequestBuilder<T>` | AbstractRequestBuilder.`setHeaders(Header... headers)`

    Method parameters in org.apache.hc.core5.http.support with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `AbstractMessageBuilder<T>` | AbstractMessageBuilder.`setHeaders(Iterator<Header> it)`

  - ### Uses of Header in org.apache.hc.core5.http2

    Methods in org.apache.hc.core5.http2 that return types with arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `List<Header>` | H2MessageConverter.`convert(T message)` Converts given `HttpMessage` to a list of HTTP/2 headers.

    Method parameters in org.apache.hc.core5.http2 with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `T` | H2MessageConverter.`convert(List<Header> headers)` Converts given list of HTTP/2 headers to a `HttpMessage`.

  - ### Uses of Header in org.apache.hc.core5.http2.hpack

    Methods in org.apache.hc.core5.http2.hpack that return Header
    Modifier and Type | Method and Description
    --- | ---
    `Header` | HPackDecoder.`decodeHeader(ByteBuffer src)`

    Methods in org.apache.hc.core5.http2.hpack that return types with arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `List<Header>` | HPackDecoder.`decodeHeaders(ByteBuffer src)`

    Methods in org.apache.hc.core5.http2.hpack with parameters of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | HPackEncoder.`encodeHeader(ByteArrayBuffer dst, Header header)`

    Method parameters in org.apache.hc.core5.http2.hpack with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | HPackEncoder.`encodeHeaders(ByteArrayBuffer dst, List<? extends Header> headers, boolean useHuffman)`

  - ### Uses of Header in org.apache.hc.core5.http2.impl

    Methods in org.apache.hc.core5.http2.impl that return types with arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `List<Header>` | DefaultH2RequestConverter.`convert(HttpRequest message)`
    `List<Header>` | DefaultH2ResponseConverter.`convert(HttpResponse message)`

    Method parameters in org.apache.hc.core5.http2.impl with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `HttpRequest` | DefaultH2RequestConverter.`convert(List<Header> headers)`
    `HttpResponse` | DefaultH2ResponseConverter.`convert(List<Header> headers)`

  - ### Uses of Header in org.apache.hc.core5.http2.impl.nio

    Method parameters in org.apache.hc.core5.http2.impl.nio with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | H2StreamListener.`onHeaderInput(HttpConnection connection, int streamId, List<? extends Header> headers)`
    `void` | H2StreamListener.`onHeaderOutput(HttpConnection connection, int streamId, List<? extends Header> headers)`

  - ### Uses of Header in org.apache.hc.core5.reactive

    Methods in org.apache.hc.core5.reactive that return types with arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `List<Header>` | ReactiveResponseConsumer.`getTrailers()` Returns the trailers received at the end of the response.

    Method parameters in org.apache.hc.core5.reactive with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | ReactiveServerExchangeHandler.`streamEnd(List<? extends Header> trailers)`
    `void` | ReactiveResponseConsumer.`streamEnd(List<? extends Header> trailers)`

  - ### Uses of Header in org.apache.hc.core5.testing.nio

    Method parameters in org.apache.hc.core5.testing.nio with type arguments of type Header
    Modifier and Type | Method and Description
    --- | ---
    `void` | LoggingH2StreamListener.`onHeaderInput(HttpConnection connection, int streamId, List<? extends Header> headers)`
    `void` | LoggingH2StreamListener.`onHeaderOutput(HttpConnection connection, int streamId, List<? extends Header> headers)`

Copyright © 2005–2022 The Apache Software Foundation. All rights reserved.