<?xml version="1.0"?>
<!--

    Copyright (c) 2013, 2024 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!DOCTYPE appendix [<!ENTITY % ents SYSTEM "jersey.ent" > %ents; ]>
<appendix xmlns="http://docbook.org/ns/docbook"
          version="5.0"
          xml:lang="en"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xlink="http://www.w3.org/1999/xlink"
          xsi:schemaLocation="http://docbook.org/ns/docbook http://docbook.org/xml/5.0/xsd/docbook.xsd
                             http://www.w3.org/1999/xlink http://www.w3.org/1999/xlink.xsd"
          xml:id="appendix-properties">

    <title>Configuration Properties</title>

    <section xml:id="appendix-properties-common">
        <title>Common (client/server) configuration properties</title>

        <para>
            List of common configuration properties that can be found in &jersey.common.CommonProperties; class. All of these properties
            can be overridden by their server/client counterparts.
        </para>

        <table>
            <title>List of common configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.common.CommonProperties.ALLOW_SYSTEM_PROPERTIES_PROVIDER;</entry>
                        <entry><literal>jersey.config.allowSystemPropertiesProvider</literal></entry>
                        <entry>
                            <para>
                                Property which allows (if true) default System properties configuration provider.
                                Default value is <literal>true</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE; /
                            &jersey.common.CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE_CLIENT; /
                            &jersey.common.CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE_SERVER;</entry>
                        <entry><literal>jersey.config.disableAutoDiscovery</literal>/
                            <literal>jersey.config.client.disableAutoDiscovery</literal>/
                            <literal>jersey.config.server.disableAutoDiscovery</literal></entry>
                        <entry>
                            <para>
                                Disables feature auto discovery globally on client/server. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.JSON_PROCESSING_FEATURE_DISABLE; /
                            &jersey.common.CommonProperties.JSON_PROCESSING_FEATURE_DISABLE_CLIENT; /
                            &jersey.common.CommonProperties.JSON_PROCESSING_FEATURE_DISABLE_SERVER;</entry>
                        <entry><literal>jersey.config.disableJsonProcessing</literal> /
                            <literal>jersey.config.client.disableJsonProcessing</literal> /
                            <literal>jersey.config.server.disableJsonProcessing</literal></entry>
                        <entry>
                            <para>
                                Disables configuration of Json Processing (JSR-353) feature. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.METAINF_SERVICES_LOOKUP_DISABLE; /
                            &jersey.common.CommonProperties.METAINF_SERVICES_LOOKUP_DISABLE_CLIENT; /
                            &jersey.common.CommonProperties.METAINF_SERVICES_LOOKUP_DISABLE_SERVER;</entry>
                        <entry><literal>jersey.config.disableMetainfServicesLookup</literal> /
                            <literal>jersey.config.client.disableMetainfServicesLookup</literal> /
                            <literal>jersey.config.server.disableMetainfServicesLookup</literal></entry>
                        <entry>
                            <para>
                                Disables META-INF/services lookup globally on client/server. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.MOXY_JSON_FEATURE_DISABLE; /
                            &jersey.common.CommonProperties.MOXY_JSON_FEATURE_DISABLE_CLIENT; /
                            &jersey.common.CommonProperties.MOXY_JSON_FEATURE_DISABLE_SERVER;</entry>
                        <entry><literal>jersey.config.disableMoxyJson</literal> /
                            <literal>jersey.config.client.disableMoxyJson</literal> /
                            <literal>jersey.config.server.disableMoxyJson</literal></entry>
                        <entry>
                            <para>
                                Disables configuration of MOXy Json feature. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.OUTBOUND_CONTENT_LENGTH_BUFFER; /
                            &jersey.common.CommonProperties.OUTBOUND_CONTENT_LENGTH_BUFFER_CLIENT; /
                            &jersey.common.CommonProperties.OUTBOUND_CONTENT_LENGTH_BUFFER_SERVER;</entry>
                        <entry><literal>jersey.config.contentLength.buffer</literal> /
                            <literal>jersey.config.client.contentLength.buffer</literal> /
                            <literal>jersey.config.server.contentLength.buffer</literal></entry>
                        <entry>
                            <para>
                                An integer value that defines the buffer size used to buffer the outbound message entity in order to
                                determine its size and set the value of HTTP <literal>Content-Length</literal> header. Default
                                value is <literal>8192</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.PROVIDER_DEFAULT_DISABLE;
                        </entry>
                        <entry>
                            <literal>jersey.config.disableDefaultProvider</literal>
                        </entry>
                        <entry>
                             Disable some of the default providers from being loaded. The following providers extend application footprint
                             by XML dependencies, which is too heavy for native image, or by AWT which may possibly be not available by JDK 11 desktop:

                                 <simplelist><member>java.awt.image.RenderedImage</member>
                                 <member>javax.xml.transform.Source</member>
                                 <member>javax.xml.transform.dom.DOMSource</member>
                                 <member>javax.xml.transform.sax.SAXSource</member>
                                 <member>javax.xml.transform.stream.StreamSource</member></simplelist>

                             The following are the options to disable the provides: {@code DOMSOURCE, RENDEREDIMAGE, SAXSOURCE, SOURCE, STREAMSOURCE},
                             or to disable all: {@code ALL}. Multiple options can be disabled by adding multiple comma separated values.
                             Default value is <literal>NULL</literal>
                             @since 2.30
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.JSON_JACKSON_ENABLED_MODULES; /
                                &jersey.common.CommonProperties.JSON_JACKSON_ENABLED_MODULES_CLIENT; /
                                &jersey.common.CommonProperties.JSON_JACKSON_ENABLED_MODULES_SERVER;
                        </entry>
                        <entry>
                            <literal>jersey.config.json.jackson.enabled.modules</literal>
                            <literal>jersey.config.client.json.jackson.enabled.modules</literal>
                            <literal>jersey.config.server.json.jackson.enabled.modules</literal>
                        </entry>
                        <entry>
                            Comma separated list of jackson modules which shall be used for json-jackson provider.
                            If set, only those modules will be used for JSON processing.

                            Default value is <literal>NULL</literal>
                            @since 2.36
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.JSON_JACKSON_DISABLED_MODULES; /
                            &jersey.common.CommonProperties.JSON_JACKSON_DISABLED_MODULES_CLIENT; /
                            &jersey.common.CommonProperties.JSON_JACKSON_DISABLED_MODULES_SERVER;
                        </entry>
                        <entry>
                            <literal>jersey.config.json.jackson.disabled.modules</literal>
                            <literal>jersey.config.client.json.jackson.disabled.modules</literal>
                            <literal>jersey.config.server.json.jackson.disabled.modules</literal>
                        </entry>
                        <entry>
                            Comma separated list of jackson modules which shall be excluded from json-jackson provider.
                            If set, those modules will be excluded from JSON processing.

                            Default value is <literal>NULL</literal>
                            @since 2.36
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.PARAM_CONVERTERS_THROW_IAE;(Jersey 2.40 or later)
                        </entry>
                        <entry>
                            <literal>jersey.config.paramconverters.throw.iae</literal>
                        </entry>
                        <entry>
                            <para>
                                Force the &jaxrs.ext.ParamConverter; to throw <literal>IllegalArgumentException
                            </literal> as mandated in javadoc.
                                Must be convertible to &lit.jdk6.Boolean; value.
                            </para>
                            <para>
                                Internally the <literal>Exception</literal> is caught by Jersey and usually converted to
                                <literal>null</literal>
                                Therefore, the default value is set to &lit.false; to speed up the conversion.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.THREAD_FACTORY;(Jersey 3.1.7 or later)
                        </entry>
                        <entry>
                            <literal>jersey.config.threads.factory</literal>
                        </entry>
                        <entry>
                            <para>
                                Defines the <literal>java.util.concurrent.ThreadFactory</literal> to be used by internal default
                                <literal>ExecutorServices</literal>.
                            </para>
                            <para>
                                The default is <literal>java.util.concurrent.Executors#defaultThreadFactory()</literal> on
                                platform threads and<literal>Thread.ofVirtual().factory()</literal> on virtual threads.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.USE_VIRTUAL_THREADS;(Jersey 3.1.7 or later)
                        </entry>
                        <entry>
                            <literal>jersey.config.threads.use.virtual</literal>
                        </entry>
                        <entry>
                            <para>
                                Defines whether the virtual threads should be used by Jersey on JDK 21+ when not using an exact number
                                of threads by <literal>FixedThreadPool</literal>.
                            </para>
                            <para>
                                The default is &lit.false; for this version of Jersey.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_NAME;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.logger.name</literal>
                        </entry>
                        <entry>
                            Logger name of the logging filter.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                            The default value is <literal>org.glassfish.jersey.logging.LoggingFeature</literal>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.logger.level</literal>
                        </entry>
                        <entry>
                            Level of logging filter's logger at which the messages will be logged.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_VERBOSITY;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.verbosity</literal>
                        </entry>
                        <entry>
                            Verbosity of logging filter describes how verbose the logging filter will be.
                            There are 3 possible values &lit.jersey.logging.LoggingFeature.Verbosity.HEADERS_ONLY;,
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_TEXT; or
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_ANY;.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_MAX_ENTITY_SIZE;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.entity.maxSize</literal>
                        </entry>
                        <entry>
                            The maximum number of bytes of the entity which will be logged.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_SEPARATOR;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.entity.separator</literal>
                        </entry>
                        <entry>
                            Custom logging delimiter for new lines separation.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_REDACT_HEADERS;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.headers.redact</literal>
                        </entry>
                        <entry>
                            The HTTP headers (semicolon separated) to be redacted when logging.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>

    <section xml:id="appendix-properties-server">
        <title>Server configuration properties</title>

        <para>
            List of server configuration properties that can be found in &jersey.server.ServerProperties; class.
        </para>

        <table>
            <title>List of server configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.server.ServerProperties.APPLICATION_NAME;</entry>
                        <entry><literal>jersey.config.server.application.name</literal></entry>
                        <entry>
                            <para>
                                Defines the application name. The name is an arbitrary user defined name which is used to
                                distinguish between Jersey applications in the case that more applications are deployed on
                                the same runtime (container). The name can be used for example for purposes of monitoring
                                by JMX when name identifies to which application deployed MBeans belong to. The name should
                                be unique in the runtime. The property does not have a default value.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.BV_FEATURE_DISABLE;</entry>
                        <entry><literal>jersey.config.beanValidation.disable.server</literal></entry>
                        <entry>
                            <para>
                                Disables Bean Validation support. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry><link xlink:href='&jersey.javadoc.uri.prefix;/server/ServerProperties.html#BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK'>ServerProperties
                            .BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK</link></entry>
                        <entry><literal>jersey.config.beanValidation
                            .disable.validateOnExecutableCheck.server</literal></entry>
                        <entry>
                            <para>
                                Disables &lit.bv.ValidateOnExecution; check. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.BV_SEND_ERROR_IN_RESPONSE;</entry>
                        <entry><literal>jersey.config.beanValidation
                            .enableOutputValidationErrorEntity.server</literal></entry>
                        <entry>
                            <para>
                                Enables sending validation error information to the client. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.EMPTY_REQUEST_MEDIA_TYPE_MATCHES_ANY_CONSUMES;</entry>
                        <entry><literal>jersey.config.server.empty.request.media.matches.any.consumes</literal></entry>
                        <entry>
                            <para>
                                Jakarta RESTful WebServices provides <literal>@Consumes</literal> annotation to accept only HTTP
                                requests with compatible HTTP <literal>Content-Type</literal> header. However, when the header
                                is missing a wildcard media type is used to match the <literal>@Consumes</literal> annotation.
                            </para>
                            <para>
                                HTTP/1.1 RFC recommends that missing HTTP <literal>Content-Type</literal> header MAY default to
                                <literal>application/octet-stream</literal>. This property makes Jersey consider the missing HTTP
                                <literal>Content-Type</literal> header to be <literal>application/octet-stream</literal> rather
                                than a wildcard media type. However, for a resource method without an entity argument, such as
                                for HTTP GET, a wildcard media type is still considered to accept the HTTP request for
                                the missing HTTP <literal>Content-Type</literal> header.
                            </para>
                            <para>
                                Set this property to <literal>false</literal>, if the empty request media type should not to match
                                applied <literal>@Consumes</literal> annotation on a resource method with an entity argument. The
                                default is <literal>true</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.FEATURE_AUTO_DISCOVERY_DISABLE;</entry>
                        <entry><literal>jersey.config.server.disableAutoDiscovery</literal></entry>
                        <entry>
                            <para>
                                Disables feature auto discovery on server. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.HTTP_METHOD_OVERRIDE;</entry>
                        <entry><literal>jersey.config.server.httpMethodOverride</literal></entry>
                        <entry>
                            <para>
                                Defines configuration of HTTP method overriding.
                                This property is used by &jersey.server.HttpMethodOverrideFilter; to determine
                                where it should look for method override information (e.g. request header or query parameters).
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.JSON_PROCESSING_FEATURE_DISABLE;</entry>
                        <entry><literal>jersey.config.server.disableJsonProcessing</literal></entry>
                        <entry>
                            <para>
                                Disables configuration of Json Processing (JSR-353) feature. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.LANGUAGE_MAPPINGS;</entry>
                        <entry><literal>jersey.config.server.languageMappings</literal></entry>
                        <entry>
                            <para>
                                Defines mapping of URI extensions to languages. The property is used by &jersey.server.UriConnegFilter;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.MEDIA_TYPE_MAPPINGS;</entry>
                        <entry><literal>jersey.config.server.mediaTypeMappings</literal></entry>
                        <entry>
                            <para>
                                Defines mapping of URI extensions to media types. The property is used by &jersey.server.UriConnegFilter;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.METAINF_SERVICES_LOOKUP_DISABLE;</entry>
                        <entry><literal>jersey.config.server.disableMetainfServicesLookup</literal></entry>
                        <entry>
                            <para>
                                Disables META-INF/services lookup on server. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.MOXY_JSON_FEATURE_DISABLE;</entry>
                        <entry><literal>jersey.config.server.disableMoxyJson</literal></entry>
                        <entry>
                            <para>
                                Disables configuration of MOXy Json feature. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.MONITORING_ENABLED; (Jersey 2.12 or later)</entry>
                        <entry><literal>jersey.config.server
                            .monitoring.statistics.enabled</literal></entry>
                        <entry>
                            <para>
                                If &lit.true;, then application monitoring will be enabled. This will enable the possibility
                                of injecting &jersey.server.monitoring.ApplicationInfo; into resource and providers.
                                Default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.MONITORING_STATISTICS_ENABLED;</entry>
                        <entry><literal>jersey.config.server
                            .monitoring.enabled</literal></entry>
                        <entry>
                            <para>
                                If &lit.true;, the calculation of monitoring statistics will be enabled. This will enable the
                                possibility of injecting &jersey.server.monitoring.MonitoringStatistics; into resource and
                                providers and also the registered listeners implementing
                                &jersey.server.monitoring.MonitoringStatisticsListener; will be called when statistics are
                                available for processing.
                                Monitoring statistics extends basic monitoring feature. Therefore when enabled,
                                the monitoring gets automatically enabled too (the same result as setting the property
                                &jersey.server.ServerProperties.MONITORING_ENABLED; to &lit.true;).
                                Note that enabling statistics may have a negative performance impact
                                and therefore should be enabled only when needed. Default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.MONITORING_STATISTICS_MBEANS_ENABLED;</entry>
                        <entry><literal>jersey.config.server
                            .monitoring.statistics.mbeans.enabled</literal></entry>
                        <entry>
                            <para>
                                If &lit.true; then Jersey will expose MBeans for the collected monitoring statistics. Exposed
                                JMX MBeans are based on &jersey.server.monitoring.MonitoringStatistics; data and therefore when
                                enabled, the calculation of monitoring statistics gets automatically enabled too (the same result
                                as setting the property &jersey.server.ServerProperties.MONITORING_STATISTICS_ENABLED; to
                                &lit.true;). Note that enabling MBeans for monitoring statistics may have a negative performance
                                impact and therefore should be enabled only when needed. Default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.MONITORING_STATISTICS_REFRESH_INTERVAL; (Jersey 2.10 or later)</entry>
                        <entry><literal>jersey.config.server
                            .monitoring.statistics.refresh.interval</literal></entry>
                        <entry>
                            <para>
                                Interval (in <literal>ms</literal>}) indicating how often will be monitoring statistics refreshed
                                (<literal>onStatistics</literal> method called). Default value is <literal>500</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER;
                            (Jersey 2.2 or later)</entry>
                        <entry><literal>jersey.config.contentLength.server.buffer</literal></entry>
                        <entry>
                            <para>
                                An integer value that defines the buffer size used to buffer the outbound message entity in order to
                                determine its size and set the value of HTTP <literal>Content-Length</literal> header. Default
                                value is <literal>8192</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.PROVIDER_CLASSNAMES;</entry>
                        <entry><literal>jersey.config.server.provider.classnames</literal></entry>
                        <entry>
                            <para>
                                Defines one or more class names that implement application-specific resources
                                and providers. If the property is set, the specified classes will be instantiated
                                and registered as either application JAX-RS root resources or providers.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.PROVIDER_CLASSPATH;</entry>
                        <entry><literal>jersey.config.server.provider.classpath</literal></entry>
                        <entry>
                            <para>
                                Defines class-path that contains application-specific resources and
                                providers. If the property is set, the specified packages will be scanned for
                                JAX-RS root resources and providers.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.PROVIDER_PACKAGES;</entry>
                        <entry><literal>jersey.config.server.provider.packages</literal></entry>
                        <entry>
                            <para>
                                Defines one or more packages that contain application-specific resources and
                                providers. If the property is set, the specified packages will be scanned for
                                JAX-RS root resources and providers.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.PROVIDER_SCANNING_RECURSIVE;</entry>
                        <entry><literal>jersey.config.server
                            .provider.scanning.recursive</literal></entry>
                        <entry>
                            <para>
                                Sets the recursion strategy for package scanning. Default value is <literal>true</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.REDUCE_CONTEXT_PATH_SLASHES_ENABLED;</entry>
                        <entry><literal>jersey.config.server.reduceContextPathSlashes.enabled</literal></entry>
                        <entry>
                            <para>
                                Ignores multiple slashes between a port and a context path and will resolve it
                                as URI with only one slash. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.RESOURCE_VALIDATION_DISABLE;</entry>
                        <entry><literal>jersey.config.server
                            .resource.validation.disable</literal></entry>
                        <entry>
                            <para>
                                Disables <literal>Resource</literal> validation. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.RESOURCE_VALIDATION_IGNORE_ERRORS;</entry>
                        <entry><literal>jersey.config.server
                            .resource.validation.ignoreErrors</literal></entry>
                        <entry>
                            <para>
                                Determines whether validation of application resource models should fail even in case of a fatal
                                validation errors. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.WADL_FEATURE_DISABLE;</entry>
                        <entry><literal>jersey.config.server.wadl.disableWadl</literal></entry>
                        <entry>
                            <para>
                                Disables WADL generation. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.WADL_GENERATOR_CONFIG;</entry>
                        <entry><literal>jersey.config.server.wadl.generatorConfig</literal></entry>
                        <entry>
                            <para>
                                Defines the wadl generator configuration that provides a &jersey.server.WadlGenerator;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR;</entry>
                        <entry><literal>jersey.config.server.response.setStatusOverSendError</literal></entry>
                        <entry>
                            <para>
                                Whenever response status is <literal>4xx</literal> or <literal>5xx</literal> it is
                                possible to choose between <literal>sendError</literal> or <literal>setStatus</literal>
                                on container specific <literal>Response</literal> implementation. E.g. on servlet
                                container Jersey can call <literal>HttpServletResponse.setStatus(...)</literal> or
                                <literal>HttpServletResponse.sendError(...)</literal>.

                                Calling <literal>sendError(...)</literal> method usually resets entity, response headers
                                and provide error page for specified status code (e.g. servlet
                                <literal>error-page</literal> configuration).
                                However if you want to post-process response (e.g. by servlet filter) the only
                                way to do it is calling <literal>setStatus(...)</literal> on container Response object.

                                If property value is &lit.true; the method <literal>Response.setStatus(...)</literal> is
                                used over default <literal>Response.sendError(...)</literal>.

                                Type of the property value is <literal>boolean</literal>.
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.TRACING;</entry>
                        <entry><literal>jersey.config.server.tracing.type</literal></entry>
                        <entry>
                            <para>
                                Enables/disables tracing support. Possible values are <literal>OFF</literal> (default),
                                <literal>ON_DEMAND</literal> and <literal>ALL</literal>.
                                See <xref linkend="tracing.configuration" /> for more detail.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.TRACING_THRESHOLD;</entry>
                        <entry><literal>jersey.config.server.tracing.threshold</literal></entry>
                        <entry>
                            <para>
                                Sets the amount of detail provided by tracing. Possible values are <literal>SUMMARY</literal>,
                                <literal>TRACE</literal> and <literal>VERBOSE</literal>.
                                See <xref linkend="tracing.configuration" /> to learn more about the levels.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.PROCESSING_RESPONSE_ERRORS_ENABLED;</entry>
                        <entry><literal>jersey.config.server.exception.processResponseErrors</literal></entry>
                        <entry>
                            <para>
                                If property value is <literal>true</literal> then the errors raised during response processing are
                                tried to be handled using available response error mappers.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.SUBRESOURCE_LOCATOR_CACHE_SIZE;</entry>
                        <entry><literal>jersey.config.server.subresource.cache.size</literal></entry>
                        <entry>
                            <para>
                                An integer value that defines the size of cache for sub-resource locator models. The cache is used
                                to provide better performance for application that uses JAX-RS sub-resource locators.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.SUBRESOURCE_LOCATOR_CACHE_AGE;</entry>
                        <entry><literal>jersey.config.server.subresource.cache.age</literal></entry>
                        <entry>
                            <para>
                                An integer value that defines the maximum age (in seconds) for cached for sub-resource locator
                                models. The age of an cache entry is defined as the time since the last access (read) to the entry
                                in the cache. Entry aging is not enabled by default.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.SUBRESOURCE_LOCATOR_CACHE_JERSEY_RESOURCE_ENABLED;</entry>
                        <entry><literal>jersey.config.server.subresource.cache.jersey.resource.enabled</literal></entry>
                        <entry>
                            <para>
                                If <literal>true</literal> then Jersey will cache Jersey resources in addition to caching
                                sub-resource locator classes and instances (which are cached by default). To make sure the caching
                                is effective in this case you need to return same Jersey Resource instances for same input
                                parameters from resource method. This means that generating new Jersey Resource instances for same
                                input parameters would not have any performance effect and it would only fill-up the cache.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.LOCATION_HEADER_RELATIVE_URI_RESOLUTION_RFC7231;</entry>
                        <entry><literal>jersey.config.server.headers.location.relative.resolution.rfc7231</literal></entry>
                        <entry>
                            <para>
                                If <literal>true</literal> then Jersey will resolve relative URIs in the
                                <literal>Location</literal> http header against the request URI according to <literal>RFC7231</literal>
                                (new HTTP Specification)
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.LOCATION_HEADER_RELATIVE_URI_RESOLUTION_DISABLED;</entry>
                        <entry><literal>jersey.config.server.headers.location.relative.resolution.disabled</literal></entry>
                        <entry>
                            <para>
                                If <literal>true</literal>, Jersey will not resolve relative URIs in the <literal>Location</literal>
                                http header.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.UNWRAP_COMPLETION_STAGE_IN_WRITER_ENABLE;</entry>
                        <entry><literal>jersey.config.server.unwrap.completion.stage.writer.enable</literal></entry>
                        <entry>
                            <para>
                                If <literal>true</literal> or not set, message body writer will not use
                                <literal>CompletionStage</literal> as a generic type. The <literal>CompletionStage</literal>
                                value will be unwrapped and the message body writer will be invoked with the unwrapped type.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_NAME_SERVER;
                        </entry>
                        <entry>
                            <literal>jersey.config.server.logging.logger.name</literal>
                        </entry>
                        <entry>
                            Logger name of the logging filter.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                            The default value is <literal>org.glassfish.jersey.logging.LoggingFeature</literal>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER;
                        </entry>
                        <entry>
                            <literal>jersey.config.server.logging.logger.level</literal>
                        </entry>
                        <entry>
                            Level of logging filter's logger at which the messages will be logged.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER;
                        </entry>
                        <entry>
                            <literal>jersey.config.server.logging.verbosity</literal>
                        </entry>
                        <entry>
                            Verbosity of logging filter describes how verbose the logging filter will be.
                            There are 3 possible values &lit.jersey.logging.LoggingFeature.Verbosity.HEADERS_ONLY;,
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_TEXT; or
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_ANY;.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_MAX_ENTITY_SIZE_SERVER;
                        </entry>
                        <entry>
                            <literal>jersey.config.server.logging.entity.maxSize</literal>
                        </entry>
                        <entry>
                            The maximum number of bytes of the entity which will be logged.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_SEPARATOR_SERVER;
                        </entry>
                        <entry>
                            <literal>jersey.config.server.logging.entity.separator</literal>
                        </entry>
                        <entry>
                            Custom delimiter for new lines separation.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_REDACT_HEADERS_SERVER;
                        </entry>
                        <entry>
                            <literal>jersey.config.server.logging.headers.redact</literal>
                        </entry>
                        <entry>
                            The HTTP headers (semicolon separated) to be redacted when logging.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>

    <section xml:id="appendix-properties-webserver">
        <title>SeBootstrap and WebServer related configuration properties</title>

        <para>
            List of SeBootstrap configuration properties that can be found in &jersey.server.ServerProperties; class.
        </para>

        <table>
        <title>List of SeBootstrap and WebServer configuration properties</title>
        <tgroup cols="3">
        <thead>
            <row>
                <entry>Constant</entry>
                <entry>Value</entry>
                <entry>Description</entry>
            </row>
        </thead>
        <tbody>
            <row>
                <entry>&jersey.server.ServerProperties.WEBSERVER_ALLOW_PRIVILEGED_PORTS;</entry>
                <entry><literal>jersey.config.server.bootstrap.webserver.allow.privileged.ports</literal></entry>
                <entry>
                    <para>
                        Defines whether to allow privileged ports (0-1023) to be used to start the
                        &lit.jersey.server.spi.WebServer; implementation to be chosen from the unused ports when the
                        &lit.jaxrs.SeBootstrap.Configuration; PORT is set to <literal>-1</literal> or unset.
                    </para>
                    <para>
                        The default ports are 80 for HTTP and 443 for HTTPS when
                        <literal>WEBSERVER_ALLOW_PRIVILEGED_PORTS</literal> is &lit.true; or 8080 for HTTP and 8443 for HTTPS when
                        <literal>WEBSERVER_ALLOW_PRIVILEGED_PORTS</literal> is &lit.false;.
                    </para>
                    <para>
                        If &lit.jaxrs.SeBootstrap.Configuration; PORT is set to <literal>0</literal>, the implementation scans for
                        random port (0-65535) when <literal>WEBSERVER_ALLOW_PRIVILEGED_PORTS</literal> is &lit.true;, or
                        (1024-65535) when <literal>WEBSERVER_ALLOW_PRIVILEGED_PORTS</literal> is &lit.false;.
                    </para>
                    <para>
                        The default this is &lit.false;. Use &lit.true; to allow a restricted port number.
                    </para>
                </entry>
            </row>
            <row>
                <entry>&jersey.server.ServerProperties.WEBSERVER_AUTO_START;</entry>
                <entry><literal>jersey.config.server.bootstrap.webserver.autostart</literal></entry>
                <entry>
                    <para>
                        Whether to automatically startup <literal>WebServer</literal> at bootstrap.
                    </para>
                    <para>
                        By default, servers are immediately listening to connections after bootstrap,
                        so no explicit invocation of <literal>WebServer#start()</literal> is needed.
                    </para>
                </entry>
            </row>
            <row>
                <entry>&jersey.server.ServerProperties.WEBSERVER_CLASS;</entry>
                <entry><literal>jersey.config.server.bootstrap.webserver.class</literal></entry>
                <entry>
                    <para>
                        Defines the implementation of <literal>WebServer</literal> to bootstrap.
                    </para>
                    <para>
                        By default auto-selects the first server provider found.
                    </para>
                </entry>
            </row>
        </tbody>
        </tgroup>
        </table>
    </section>

    <section xml:id="appendix-properties-servlet">
        <title>Servlet configuration properties</title>

        <para>
            List of servlet configuration properties that can be found in &jersey.servlet.ServletProperties; class.
        </para>

        <table>
            <title>List of servlet configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.servlet.ServletProperties.FILTER_CONTEXT_PATH;</entry>
                        <entry><literal>jersey.config.servlet.filter.contextPath</literal></entry>
                        <entry>
                            <para>
                                If set, indicates the URL pattern of the Jersey servlet filter context path.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.servlet.ServletProperties.FILTER_FORWARD_ON_404;</entry>
                        <entry><literal>jersey.config.servlet.filter.forwardOn404</literal></entry>
                        <entry>
                            <para>
                                If set to <literal>true</literal> and a 404 response with no entity body is returned from either
                                the runtime or the application then the runtime forwards the request to the next filter in the
                                filter chain. This enables another filter or the underlying servlet engine to process the request.
                                Before the request is forwarded the response status is set to 200.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.servlet.ServletProperties.FILTER_STATIC_CONTENT_REGEX;</entry>
                        <entry><literal>jersey.config.servlet.filter.staticContentRegex</literal></entry>
                        <entry>
                            <para>
                                If set the regular expression is used to match an incoming servlet path URI to some web page
                                content such as static resources or JSPs to be handled by the underlying servlet engine.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.servlet.ServletProperties.JAXRS_APPLICATION_CLASS;</entry>
                        <entry><literal>jakarta.ws.rs.Application</literal></entry>
                        <entry>
                            <para>
                                Application configuration initialization property whose value is a fully qualified class name of a
                                class that implements JAX-RS Application.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.servlet.ServletProperties.PROVIDER_WEB_APP;</entry>
                        <entry><literal>jersey.config.servlet.provider.webapp</literal></entry>
                        <entry>
                            <para>
                                Indicates that Jersey should scan the whole web app for application-specific resources and
                                providers.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.servlet.ServletProperties.QUERY_PARAMS_AS_FORM_PARAMS_DISABLED;</entry>
                        <entry><literal>jersey.config.servlet.form.queryParams.disabled</literal></entry>
                        <entry>
                            <para>
                                If <literal>true</literal> then query parameters will not be treated as form parameters
                                (e.g. injectable using @FormParam) in case a Form request is processed by server.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.servlet.ServletProperties.SERVICE_LOCATOR;</entry>
                        <entry><literal>jersey.config.servlet.context.serviceLocator</literal></entry>
                        <entry>
                            <para>
                                Identifies the object that will be used as a parent ServiceLocator in the Jersey WebComponent.
                            </para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>

    <section xml:id="appendix-properties-client">
        <title>Client configuration properties</title>

        <para>
            List of client configuration properties that can be found in &jersey.client.ClientProperties; class.
        </para>

        <table>
            <title>List of client configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.client.ClientProperties.ASYNC_THREADPOOL_SIZE;</entry>
                        <entry><literal>jersey.config.client.async.threadPoolSize</literal></entry>
                        <entry>
                            <para>
                                Asynchronous thread pool size. Default value is not set.
                                <emphasis>Supported with &jersey.grizzly.GrizzlyConnectorProvider; only.</emphasis>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.BACKGROUND_SCHEDULER_THREADPOOL_SIZE;</entry>
                        <entry><literal>jersey.config.client.backgroundScheduler.threadPoolSize</literal></entry>
                        <entry>
                            <para>
                                Scheduler thread pool size. Default value is not set.
                                <emphasis>Support is undefined</emphasis>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.CHUNKED_ENCODING_SIZE;</entry>
                        <entry><literal>jersey.config.client.chunkedEncodingSize</literal></entry>
                        <entry>
                            <para>
                                Chunked encoding size. Default value is  <literal>4096</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.CONNECT_TIMEOUT;</entry>
                        <entry><literal>jersey.config.client.connectTimeout</literal></entry>
                        <entry>
                            <para>
                                Read timeout interval, in milliseconds. Default value is <literal>0</literal> (infinity).
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.CONNECTOR_PROVIDER;(Jersey 2.40 or later)</entry>
                        <entry><literal>jersey.config.client.connector.provider</literal></entry>
                        <entry>
                            <para>
                                Sets the &jersey.client.ConnectorProvider; class. Overrides the value from META-INF/services.
                            </para>
                            <para>
                                The value MUST be an instance of &lit.jdk6.String;.
                            </para>
                            <para>
                                The property is recognized by &lit.jaxrs.client.ClientBuilder;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.DIGESTAUTH_URI_CACHE_SIZELIMIT;</entry>
                        <entry><literal>jersey.config.client.digestAuthUriCacheSizeLimit</literal></entry>
                        <entry>
                            <para>
                                The property defines a URI of a HTTP proxy the client connector should use.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.EXPECT_100_CONTINUE;</entry>
                        <entry><literal>jersey.config.client.request.expect.100.continue.processing</literal></entry>
                        <entry>
                            <para>
                                Allows for HTTP Expect:100-Continue being handled by the HttpUrlConnector (default Jersey
                                connector). <literal>Since 2.32</literal>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.EXPECT_100_CONTINUE_THRESHOLD_SIZE;</entry>
                        <entry><literal>jersey.config.client.request.expect.100.continue.threshold.size</literal></entry>
                        <entry>
                            <para>
                                Property for threshold size for content length after which Expect:100-Continue header would be applied
                                before the main request.
                                Default threshold size (64kb) after which Expect:100-Continue header would be applied before
                                the main request.
                                <literal>Since 2.32</literal>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.FEATURE_AUTO_DISCOVERY_DISABLE;</entry>
                        <entry><literal>jersey.config.client.disableAutoDiscovery</literal></entry>
                        <entry>
                            <para>
                                Disables feature auto discovery on client. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.FOLLOW_REDIRECTS;</entry>
                        <entry><literal>jersey.config.client.followRedirects</literal></entry>
                        <entry>
                            <para>
                                Declares that the client will automatically redirect to the URI declared in 3xx responses. Default value is <literal>true</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.JSON_PROCESSING_FEATURE_DISABLE;</entry>
                        <entry><literal>jersey.config.client.disableJsonProcessing</literal></entry>
                        <entry>
                            <para>
                                Disables configuration of Json Processing (JSR-353) feature. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE;</entry>
                        <entry><literal>jersey.config.disableMetainfServicesLookup.client</literal></entry>
                        <entry>
                            <para>
                                Disables META-INF/services lookup on client. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.MOXY_JSON_FEATURE_DISABLE;</entry>
                        <entry><literal>jersey.config.client.disableMoxyJson</literal></entry>
                        <entry>
                            <para>
                                Disables configuration of MOXy Json feature. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.OUTBOUND_CONTENT_LENGTH_BUFFER;
                            (Jersey 2.2 or later)</entry>
                        <entry><literal>jersey.config.client.contentLength.buffer</literal></entry>
                        <entry>
                            <para>
                                An integer value that defines the buffer size used to buffer the outbound message entity in order to
                                determine its size and set the value of HTTP <literal>Content-Length</literal> header. Default
                                value is <literal>8192</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.PROXY_URI;</entry>
                        <entry><literal>jersey.config.client.proxy.uri</literal></entry>
                        <entry>
                            <para>
                                URI of a HTTP proxy the client connector should use. Default value is not set.
                                <emphasis>Currently supported with &jersey.apache.ApacheConnectorProvider;,
                                    &jersey.apache5.Apache5ConnectorProvider;,
                                    &jersey.grizzly.GrizzlyConnectorProvider;,
                                    &jersey.helidon.HelidonConnectorProvider;,
                                    &jersey.netty.NettyConnectorProvider;,
                                    &jersey.jetty11.Jetty11ConnectorProvider;, and
                                    &jersey.jetty.JettyConnectorProvider; only.</emphasis>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.PROXY_USERNAME; (Jersey 2.5 or later)</entry>
                        <entry><literal>jersey.config.client.proxy.username</literal></entry>
                        <entry>
                            <para>
                                User name which will be used for HTTP proxy authentication. Default value is not set.
                                <emphasis>Currently supported with &jersey.apache.ApacheConnectorProvider; and
                                    &jersey.jetty.JettyConnectorProvider; only.</emphasis>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.PROXY_PASSWORD; (Jersey 2.5 or later)</entry>
                        <entry><literal>jersey.config.client.proxy.password</literal></entry>
                        <entry>
                            <para>
                                Password which will be used for HTTP proxy authentication. Default value is not set.
                                <emphasis>Currently supported with &jersey.apache.ApacheConnectorProvider; and
                                    &jersey.jetty.JettyConnectorProvider; only.</emphasis>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.READ_TIMEOUT; (Jersey 2.5 or later)</entry>
                        <entry><literal>jersey.config.client.readTimeout</literal></entry>
                        <entry>
                            <para>
                                Read timeout interval, in milliseconds. Default value is <literal>0</literal> (infinity).
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.REQUEST_ENTITY_PROCESSING; (Jersey 2.5 or later)</entry>
                        <entry><literal>jersey.config.client.request.entity.processing</literal></entry>
                        <entry>
                            <para>
                                Defines whether the request entity should be serialized using internal buffer to
                                evaluate content length or chunk encoding should be used. Possible values are
                                <literal>BUFFERED</literal> or <literal>CHUNKED</literal>. Default value is
                                <literal>BUFFERED</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.SNI_HOST_NAME; (Jersey 2.43 or later)</entry>
                        <entry><literal>jersey.config.client.sniHostName</literal></entry>
                        <entry>
                            <para>
                                Sets the host name to be used for calculating the <literal>javax.net.ssl.SNIHostName</literal>
                                during the HTTPS request. Takes precedence over the HTTP HOST header, if set.
                            </para>
                            <para>
                                By default, the <literal>SNIHostName</literal> is set when the HOST HTTP header differs from
                                the HTTP request host. When the property value host name matches the HTTPS request host,
                                the <literal>SNIHostName</literal> is not set, and the HTTP HOST header is not used for
                                setting the <literal>SNIHostName</literal>. This allows for Domain Fronting.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION;
                            (Jersey 2.2 or later)</entry>
                        <entry><literal>jersey.config.client.suppressHttpComplianceValidation</literal></entry>
                        <entry>
                            <para>
                                If &lit.true;, the strict validation of HTTP specification compliance for client-side
                                requests will be suppressed. When compliance checks are suppressed, any violations will
                                be merely logged as warnings, rather than causing exceptions being raised in Jersey
                                runtime. Default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.SSL_CONTEXT_SUPPLIER;</entry>
                        <entry><literal>jersey.config.client.ssl.context.supplier</literal></entry>
                        <entry>
                            <para>
                                The <literal>javax.net.ssl.SSLContext java.util.function.Supplier</literal> to be used to set ssl
                                context in the current HTTP request. Has precedence over the
                                <literal>Client#getSslContext()</literal>.
                            </para>
                            <para>
                                Currently supported by the default <literal>HttpUrlConnector</literal> and by
                                <literal>NettyConnector</literal> only.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.USE_ENCODING;</entry>
                        <entry><literal>jersey.config.client.useEncoding</literal></entry>
                        <entry>
                            <para>
                                Indicates the value of <literal>Content-Encoding</literal> property the
                                &jersey.client.EncodingFilter; should be adding. Default value is not set.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.SNI_HOST_NAME;</entry>
                        <entry><literal>jersey.config.client.sniHostName</literal></entry>
                        <entry>
                            <para>
                                Most connectors support HOST header value to be used as an SNIHostName. However, the HOST header is restricted in JDK.
                                <literal>HttpUrlConnector</literal> and <literal>JavaNetHttpConnector</literal> need
                                an extra System Property set to allow HOST header.
                                As an option to HOST header, this property allows the HOST name to be pre-set on a Client and does not need to
                                be set on each request.
                                <literal>Since 3.1.2</literal>
                            </para>
                            <para>
                                The value MUST be an instance of &lit.jdk6.String;
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_NAME_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.logger.name</literal>
                        </entry>
                        <entry>
                            Logger name of the logging filter.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                            The default value is <literal>org.glassfish.jersey.logging.LoggingFeature</literal>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.logger.level</literal>
                        </entry>
                        <entry>
                            Level of logging filter's logger at which the messages will be logged.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_VERBOSITY_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.verbosity</literal>
                        </entry>
                        <entry>
                            Verbosity of logging filter describes how verbose the logging filter will be.
                            There are 3 possible values &lit.jersey.logging.LoggingFeature.Verbosity.HEADERS_ONLY;,
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_TEXT; or
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_ANY;.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_MAX_ENTITY_SIZE_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.entity.maxSize</literal>
                        </entry>
                        <entry>
                            The maximum number of bytes of the entity which will be logged.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_SEPARATOR_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.entity.separator</literal>
                        </entry>
                        <entry>
                            New line delimiter property (client side).
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_REDACT_HEADERS_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.headers.redact</literal>
                        </entry>
                        <entry>
                            The HTTP headers (semicolon separated) to be redacted when logging.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-message">
        <title>Jersey configuration properties for message &amp; entity processing</title>

        <para>
            List of client configuration properties that can be found in &jersey.message.MessageProperties; class.
        </para>

        <table>
            <title>List of Apache HTTP client configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.message.MessageProperties.DEFLATE_WITHOUT_ZLIB;</entry>
                        <entry><literal>jersey.config.deflate.nozlib</literal></entry>
                        <entry>
                            <para>
                                If set to &lit.true;, <literal>DeflateEncoder deflate encoding interceptor</literal> will use non-standard version
                                of the deflate content encoding, skipping the zlib wrapper. Unfortunately, deflate encoding
                                implementations in some products use this non-compliant version, hence the switch.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.message.MessageProperties.IO_BUFFER_SIZE;</entry>
                        <entry><literal>jersey.config.io.bufferSize</literal></entry>
                        <entry>
                            <para>
                                Value of the property indicates the buffer size to be used for I/O operations
                                on byte and character streams. The property value is expected to be a positive
                                integer otherwise it will be ignored.
                            </para>
                            <para>
                                The default value is value of &jersey.message.MessageProperties.IO_DEFAULT_BUFFER_SIZE;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.message.MessageProperties.JAXB_PROCESS_XML_ROOT_ELEMENT;</entry>
                        <entry><literal>jersey.config.jaxb.collections.processXmlRootElement</literal></entry>
                        <entry>
                            <para>
                                If set to &lit.true; then XML root element tag name for collections will
                                be derived from <literal>jakarta.xml.bind.annotation.XmlRootElement</literal>
                                annotation value and won't be de-capitalized.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.message.MessageProperties.JSON_MAX_STRING_LENGTH;</entry>
                        <entry><literal>jersey.config.json.string.length</literal></entry>
                        <entry>
                            <para>
                                The default value is not set and the JSON provider default maximum value is used.
                            </para>
                            <para>
                                If supported by Jackson provider, the default value can differ for each Jackson version. For instance,
                                Jackson 2.14 does not support this setting and the default value is <literal>Integer#MAX_VALUE</literal>,
                                Jackson 2.15.0 has the default value 5_000_000, Jackson 2.15.2 has the default value 20_000_000.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.message.MessageProperties.XML_SECURITY_DISABLE;</entry>
                        <entry><literal>jersey.config.xml.security.disable</literal></entry>
                        <entry>
                            <para>
                                If set to &lit.true; XML security features when parsing XML documents will be
                                disabled.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.message.MessageProperties.XML_FORMAT_OUTPUT;</entry>
                        <entry><literal>jersey.config.xml.formatOutput</literal></entry>
                        <entry>
                            <para>
                                If set to &lit.true; indicates that produced XML output should be formatted
                                if possible.
                            </para>
                            <para>
                                A XML message entity written by a &jaxrs.ext.MessageBodyWriter;
                                may be formatted for the purposes of human readability provided the respective
                                &jaxrs.ext.MessageBodyWriter; supports XML output formatting. All JAXB-based message
                                body writers support this property.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>


    </section>
    <section xml:id="appendix-properties-client-default">
        <title>The default HttpUrlConnector properties</title>
        <para>
            List of properties defined in &jersey.client.HttpUrlConnectorProvider; class.
        </para>

        <table>
            <title>List of the default &jersey.client.HttpUrlConnectorProvider; properites</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.client.HttpUrlConnectorProvider.SET_METHOD_WORKAROUND;</entry>
                        <entry><literal>jersey.config.client.httpUrlConnection.setMethodWorkaround</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.true; declares that the client will try to set
                                unsupported HTTP method to <literal>java.net.HttpURLConnection</literal> via
                                reflection as a workaround for a missing HTTP method.
                            </para>
                            <para>
                                NOTE: Enabling this property may cause security related warnings/errors
                                and it may break when other JDK implementation is used. <emphasis>Use only
                                when you know what you are doing.</emphasis>
                            </para>
                            <para>
                                The value MUST be an instance of &lit.jdk6.Boolean;. The default value is &lit.false;.
                            </para>
                            <para>Since JDK 16 the JDK internal classes are not opened for reflection and the workaround method
                                does not work, unless <literal>--add-opens java.base/java.net=ALL-UNNAMED</literal> for HTTP
                                requests and additional <literal>--add-opens java.base/sun.net.www.protocol.https=ALL-UNNAMED</literal>
                                for HTTPS (<literal>javax.net.ssl.HttpsUrlConnection</literal>) options are set.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.HttpUrlConnectorProvider.USE_FIXED_LENGTH_STREAMING;</entry>
                        <entry><literal>jersey.config.client.httpUrlConnector.useFixedLengthStreaming</literal></entry>
                        <entry>
                            <para>
                                If &lit.true;, the &lit.jersey.client.HttpUrlConnector; (if used) will assume the content length
                                from the value of <literal>jakarta.ws.rs.core.HttpHeaders#CONTENT_LENGTH</literal> request
                                header (if present).
                            </para>
                            <para>
                                When this property is enabled and the request has a valid non-zero content length
                                value specified in its <literal>jakarta.ws.rs.core.HttpHeaders#CONTENT_LENGTH</literal> request
                                header, that this value will be used as an input to the
                                <literal>java.net.HttpURLConnection#setFixedLengthStreamingMode(int)</literal> method call
                                invoked on the underlying <literal>java.net.HttpURLConnection</literal>.
                                This will also suppress the entity buffering in the <literal>HttpURLConnection</literal>,
                                which is undesirable in certain scenarios, e.g. when streaming large entities.
                            </para>
                            <para>
                                Note that the content length value defined in the request header must exactly match
                                the real size of the entity. If the <literal>jakarta.ws.rs.core.HttpHeaders#CONTENT_LENGTH</literal>
                                header is explicitly specified in a request, this property will be ignored and the
                                request entity will be still buffered by the underlying <literal>HttpURLConnection</literal> infrastructure.
                            </para>
                            <para>
                                This property also overrides the behaviour enabled by the &jersey.client.ClientProperties.CHUNKED_ENCODING_SIZE;
                                property. Chunked encoding will only be used, if the size is not specified in the header of the request.
                            </para>
                            <para>
                                Note that this property only applies to client run-times that are configured to use the default
                                &lit.jersey.client.HttpUrlConnector; as the client connector. The property is ignored by other connectors.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-client-apache">
        <title>Apache HTTP client configuration properties</title>

        <para>
            List of client configuration properties that can be found in &jersey.apache.ApacheClientProperties; class.
        </para>

        <table>
            <title>List of Apache HTTP client configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.apache.ApacheClientProperties.CONNECTION_CLOSING_STRATEGY;</entry>
                        <entry><literal>jersey.config.apache.client.connectionClosingStrategy</literal></entry>
                        <entry>
                            <para>
                                Strategy that closes the Apache Connection.
                                Accepts an instance of &jersey.apache.ApacheConnectionClosingStrategy;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache.ApacheClientProperties.CONNECTION_MANAGER;</entry>
                        <entry><literal>jersey.config.apache.client.connectionManager</literal></entry>
                        <entry>
                            <para>
                                Connection Manager which will be used to create
                                <literal>org.apache.http.client.HttpClient</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.http.conn.HttpClientConnectionManager</literal>
                            </para>
                            <para>
                                If the property is absent a default Connection Manager will be used
                                <literal>org.apache.http.impl.conn.BasicHttpClientConnectionManager</literal>.
                                If you want to use this client in multi-threaded environment, be sure you override default value with
                                <literal>org.apache.http.impl.conn.PoolingHttpClientConnectionManager</literal> instance.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache.ApacheClientProperties.CONNECTION_MANAGER_SHARED;</entry>
                        <entry><literal>jersey.config.apache.client.connectionManagerShared</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.true; indicates that configured connection manager should be shared
                                among multiple Jersey client runtime instances. It means that closing
                                a particular client runtime instance does not shut down the underlying
                                connection manager automatically. In such case, the connection manager life-cycle
                                should be fully managed by the application code. To release all allocated resources,
                                caller code should especially ensure
                                <literal>org.apache.http.conn.HttpClientConnectionManager#shutdown()</literal> gets
                                invoked eventually.
                            </para>
                            <para>
                                This property may only be set prior to constructing Apache connector using
                                &jersey.apache.ApacheConnectorProvider;
                            </para>
                            <para>
                                The value MUST be an instance of <literal>java.lang.Boolean</literal>.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache.ApacheClientProperties.CREDENTIALS_PROVIDER;</entry>
                        <entry><literal>jersey.config.apache.client.credentialsProvider</literal></entry>
                        <entry>
                            <para>
                                The credential provider that should be used to retrieve
                                credentials from a user. Credentials needed for proxy authentication
                                are stored here as well.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.http.client.CredentialsProvider</literal>.
                            </para>
                            <para>
                                If the property is absent a default provider will be used.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache.ApacheClientProperties.DISABLE_COOKIES;</entry>
                        <entry><literal>jersey.config.apache.client.handleCookies</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.false; indicates the client should handle cookies
                                automatically using HttpClient's default cookie policy. A value
                                of &lit.true; will cause the client to ignore all cookies.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>java.lang.Boolean</literal>.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache.ApacheClientProperties.KEEPALIVE_STRATEGY;</entry>
                        <entry><literal>jersey.config.apache.client.keepAliveStrategy</literal></entry>
                        <entry>
                            <para>
                                Apache <literal>ConnectionKeepAliveStrategy</literal> for the
                                <literal>org.apache.http.client.HttpClient</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.http.conn.ConnectionKeepAliveStrategy</literal>.
                            </para>
                            <para>
                                If the property is absent the default keepalive strategy of the Apache HTTP library will be used.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache.ApacheClientProperties.PREEMPTIVE_BASIC_AUTHENTICATION;</entry>
                        <entry><literal>jersey.config.apache.client.preemptiveBasicAuthentication</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.true; indicates that a client should send an
                                authentication request even before the server gives a 401
                                response.
                            </para>
                            <para>
                                This property may only be set prior to constructing Apache connector using
                                &jersey.apache.ApacheConnectorProvider;.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>java.lang.Boolean</literal>.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache.ApacheClientProperties.REQUEST_CONFIG;</entry>
                        <entry><literal>jersey.config.apache.client.requestConfig</literal></entry>
                        <entry>
                            <para>
                                Request configuration for the <literal>org.apache.http.client.HttpClient</literal>.
                                Http parameters which will be used to create <literal>org.apache.http.client.HttpClient</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.http.client.config.RequestConfig</literal>.
                            </para>
                            <para>
                                If the property is absent the default request configuration will be used.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache.ApacheClientProperties.RETRY_HANDLER;</entry>
                        <entry><literal>jersey.config.apache.client.retryHandler</literal></entry>
                        <entry>
                            <para>
                                Apache <literal>HttpRequestRetryHandler</literal> which will be used to create
                                <literal>org.apache.http.client.HttpClient</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.http.client.HttpRequestRetryHandler</literal>.
                            </para>
                            <para>
                                If the property is absent a default retry handler will be used
                                (<literal>org.apache.http.impl.client.DefaultHttpRequestRetryHandler</literal>).
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache.ApacheClientProperties.REUSE_STRATEGY;</entry>
                        <entry><literal>jersey.config.apache.client.reuseStrategy</literal></entry>
                        <entry>
                            <para>
                               Apache <literal>ConnectionReuseStrategy</literal> for the
                                <literal>org.apache.http.client.HttpClient</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.http.ConnectionReuseStrategy</literal>.
                            </para>
                            <para>
                                If the property is absent the default reuse strategy of the Apache HTTP library will be used.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache.ApacheClientProperties.USE_SYSTEM_PROPERTIES;</entry>
                        <entry><literal>jersey.config.apache.client.useSystemProperties</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.false; indicates the client will use default Apache &lit.jersey.client.Connector;
                                params. A value of &lit.true; will cause the client to take into account the system properties
                                <literal>https.protocols</literal>, <literal>https.cipherSuites</literal>,
                                <literal>http.keepAlive</literal>, <literal>http.maxConnections</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of &lit.jdk6.Boolean;
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-client-apache5">
        <title>Apache 5 HTTP client configuration properties</title>

        <para>
            List of client configuration properties that can be found in &jersey.apache5.Apache5ClientProperties; class.
        </para>

        <table>
            <title>List of Apache 5 HTTP client configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.apache5.Apache5ClientProperties.CONNECTION_CLOSING_STRATEGY;</entry>
                        <entry><literal>jersey.config.apache5.client.connectionClosingStrategy</literal></entry>
                        <entry>
                            <para>
                                Strategy that closes the Apache Connection.
                                Accepts an instance of &jersey.apache5.Apache5ConnectionClosingStrategy;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache5.Apache5ClientProperties.CONNECTION_MANAGER;</entry>
                        <entry><literal>jersey.config.apache5.client.connectionManager</literal></entry>
                        <entry>
                            <para>
                                Connection Manager which will be used to create
                                <literal>org.apache.hc.client5.http.classic.HttpClient</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.hc.client5.http.io.HttpClientConnectionManager</literal>
                            </para>
                            <para>
                                If the property is absent a default Connection Manager will be used
                                <literal>org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager</literal>.
                                If you want to use this client in multi-threaded environment, be sure you override default value with
                                <literal>org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager</literal> instance.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache5.Apache5ClientProperties.CONNECTION_MANAGER_SHARED;</entry>
                        <entry><literal>jersey.config.apache5.client.connectionManagerShared</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.true; indicates that configured connection manager should be shared
                                among multiple Jersey client runtime instances. It means that closing
                                a particular client runtime instance does not shut down the underlying
                                connection manager automatically. In such case, the connection manager life-cycle
                                should be fully managed by the application code. To release all allocated resources,
                                caller code should especially ensure
                                <literal>org.apache.hc.client5.http.io.HttpClientConnectionManager#close()</literal> gets
                                invoked eventually.
                            </para>
                            <para>
                                This property may only be set prior to constructing Apache connector using
                                &jersey.apache5.Apache5ConnectorProvider;
                            </para>
                            <para>
                                The value MUST be an instance of <literal>java.lang.Boolean</literal>.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache5.Apache5ClientProperties.CREDENTIALS_PROVIDER;</entry>
                        <entry><literal>jersey.config.apache5.client.credentialsProvider</literal></entry>
                        <entry>
                            <para>
                                The credential provider that should be used to retrieve
                                credentials from a user. Credentials needed for proxy authentication
                                are stored here as well.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.hc.client5.http.auth.CredentialsProvider</literal>.
                            </para>
                            <para>
                                If the property is absent a default provider will be used.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache5.Apache5ClientProperties.DISABLE_COOKIES;</entry>
                        <entry><literal>jersey.config.apache5.client.handleCookies</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.false; indicates the client should handle cookies
                                automatically using HttpClient's default cookie policy. A value
                                of &lit.true; will cause the client to ignore all cookies.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>java.lang.Boolean</literal>.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache5.Apache5ClientProperties.KEEPALIVE_STRATEGY;</entry>
                        <entry><literal>jersey.config.apache5.client.keepAliveStrategy</literal></entry>
                        <entry>
                            <para>
                                Apache <literal>ConnectionKeepAliveStrategy</literal> for the
                                <literal>org.apache.hc.client5.http.classic.HttpClient</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.hc.client5.http.ConnectionKeepAliveStrategy</literal>.
                            </para>
                            <para>
                                If the property is absent the default keepalive strategy of the Apache HTTP library will be used.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache5.Apache5ClientProperties.PREEMPTIVE_BASIC_AUTHENTICATION;</entry>
                        <entry><literal>jersey.config.apache5.client.preemptiveBasicAuthentication</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.true; indicates that a client should send an
                                authentication request even before the server gives a 401
                                response.
                            </para>
                            <para>
                                This property may only be set prior to constructing Apache connector using
                                &jersey.apache5.Apache5ConnectorProvider;.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>java.lang.Boolean</literal>.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache5.Apache5ClientProperties.REQUEST_CONFIG;</entry>
                        <entry><literal>jersey.config.apache5.client.requestConfig</literal></entry>
                        <entry>
                            <para>
                                Request configuration for the <literal>org.apache.hc.client5.http.classic.HttpClient</literal>.
                                Http parameters which will be used to create <literal>org.apache.hc.client5.http.classic.HttpClient</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.hc.client5.http.config.RequestConfig</literal>.
                            </para>
                            <para>
                                If the property is absent the default request configuration will be used.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache5.Apache5ClientProperties.RETRY_STRATEGY;</entry>
                        <entry><literal>jersey.config.apache5.client.retryStrategy</literal></entry>
                        <entry>
                            <para>
                                Apache <literal>HttpRequestRetryStrategy</literal> which will be used to create
                                <literal>org.apache.hc.client5.http.classic.HttpClient</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.hc.client5.http.HttpRequestRetryStrategy</literal>.
                            </para>
                            <para>
                                If the property is absent a default retry handler will be used
                                (<literal>org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy</literal>).
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache5.Apache5ClientProperties.REUSE_STRATEGY;</entry>
                        <entry><literal>jersey.config.apache5.client.reuseStrategy</literal></entry>
                        <entry>
                            <para>
                                Apache <literal>ConnectionReuseStrategy</literal> for the
                                <literal>org.apache.hc.client5.http.classic.HttpClient</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.apache.hc.core5.http.ConnectionReuseStrategy</literal>.
                            </para>
                            <para>
                                If the property is absent the default reuse strategy of the Apache HTTP library will be used.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.apache5.Apache5ClientProperties.USE_SYSTEM_PROPERTIES;</entry>
                        <entry><literal>jersey.config.apache5.client.useSystemProperties</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.false; indicates the client will use default Apache &lit.jersey.client.Connector;
                                params. A value of &lit.true; will cause the client to take into account the system properties
                                <literal>https.protocols</literal>, <literal>https.cipherSuites</literal>,
                                <literal>http.keepAlive</literal>, <literal>http.maxConnections</literal>.
                            </para>
                            <para>
                                The value MUST be an instance of &lit.jdk6.Boolean;
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-client-helidon">
        <title>Helidon HTTP client configuration properties</title>

        <para>
            List of client configuration properties that can be found in &jersey.helidon.HelidonClientProperties; class.
        </para>

        <table>
            <title>List of Helidon HTTP client configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.helidon.HelidonClientProperties.CONFIG;</entry>
                        <entry><literal>jersey.connector.helidon.config</literal></entry>
                        <entry>
                            <para>
                                A Helidon <literal>io.helidon.Config</literal> instance that is passed to
                                <literal>io.helidon.webclient.WebClient.Builder#config(Config)</literal> if available.
                            </para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-client-jdk">
        <title>JDK HTTP client configuration properties</title>

        <para>
            List of client configuration properties that can be found in &jersey.jdk.JdkClientProperties; class.
        </para>

        <table>
            <title>List of Jdk HTTP client configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.jdk.JdkClientProperties.CONTAINER_IDLE_TIMEOUT;</entry>
                        <entry><literal>jersey.config.client.JdkConnectorProvider.containerIdleTimeout</literal></entry>
                        <entry>
                            <para>
                                Container idle timeout in milliseconds <literal>Integer</literal> value).
                            </para>
                            <para>
                                The default value is <literal>java.net.CookiePolicy#ACCEPT_ORIGINAL_SERVER</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jdk.JdkClientProperties.COOKIE_POLICY;</entry>
                        <entry><literal>jersey.config.client.JdkConnectorProvider.cookiePolicy</literal></entry>
                        <entry>
                            <para>
                                To set the cookie policy of this cookie manager.
                            </para>
                            <para>
                                When the timeout elapses, the shared thread pool will be destroyed.
                            </para>
                            <para>
                                The default value is &jersey.jdk.JdkClientProperties.DEFAULT_CONNECTION_CLOSE_WAIT;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jdk.JdkClientProperties.CONNECTION_IDLE_TIMEOUT;</entry>
                        <entry><literal>jersey.config.client.JdkConnectorProvider.connectionIdleTimeout</literal></entry>
                        <entry>
                            <para>
                                An amount of time in milliseconds (<literal>Integer</literal> value) during which an idle
                                connection will be kept open.
                            </para>
                            <para>
                                The default value is &jersey.jdk.JdkClientProperties.DEFAULT_CONNECTION_IDLE_TIMEOUT;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jdk.JdkClientProperties.MAX_CONNECTIONS_PER_DESTINATION;</entry>
                        <entry><literal>jersey.config.client.JdkConnectorProvider.maxConnectionsPerDestination</literal></entry>
                        <entry>
                            <para>
                                A maximum number of open connections per each destination. A destination is determined by the
                                following triple: <literal>host</literal>, <literal>port</literal>,
                                <literal>protocol (HTTP/HTTPS)</literal>.
                            </para>
                            <para>
                                The default value is &jersey.jdk.JdkClientProperties.DEFAULT_MAX_CONNECTIONS_PER_DESTINATION;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jdk.JdkClientProperties.MAX_HEADER_SIZE;</entry>
                        <entry><literal>jersey.config.client.JdkConnectorProvider.maxHeaderSize</literal></entry>
                        <entry>
                            <para>
                                A configurable property of HTTP parser. It defines the maximal acceptable size of HTTP response
                                initial line, each header and chunk header.
                            </para>
                            <para>
                                The default value is &jersey.jdk.JdkClientProperties.DEFAULT_MAX_HEADER_SIZE;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jdk.JdkClientProperties.MAX_REDIRECTS;</entry>
                        <entry><literal>jersey.config.client.JdkConnectorProvider.maxRedirects</literal></entry>
                        <entry>
                            <para>
                                The maximal number of redirects during single request.
                            </para>
                            <para>
                                Value is expected to be positive <literal>Integer</literal>. The default value is
                                &jersey.jdk.JdkClientProperties.DEFAULT_MAX_REDIRECTS;.
                            </para>
                            <para>
                                HTTP redirection must be enabled by property &jersey.client.ClientProperties.FOLLOW_REDIRECTS;,
                                otherwise &jersey.jdk.JdkClientProperties.MAX_REDIRECTS; is not applied.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jdk.JdkClientProperties.WORKER_THREAD_POOL_CONFIG;</entry>
                        <entry><literal>jersey.config.client.JdkConnectorProvider.workerThreadPoolConfig</literal></entry>
                        <entry>
                            <para>
                                Configuration of the connector thread pool.
                            </para>
                            <para>
                                An instance of <literal>org.glassfish.jersey.jdk.connector.internal.ThreadPoolConfig</literal>
                                is expected.
                            </para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-client-jetty">
        <title>Jetty HTTP client configuration properties</title>

        <para>
            List of client configuration properties that can be found in &jersey.jetty.JettyClientProperties; class.
        </para>

        <table>
            <title>List of Jetty HTTP client configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.jetty.JettyClientProperties.DISABLE_COOKIES;</entry>
                        <entry><literal>jersey.config.jetty.client.disableCookies</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.false; indicates the client should handle cookies
                                automatically using HttpClient's default cookie policy. A value
                                of &lit.false; will cause the client to ignore all cookies.
                            </para>
                            <para>
                                The value MUST be an instance of &lit.jdk6.Boolean;.
                                If the property is absent the default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jetty.JettyClientProperties.ENABLE_SSL_HOSTNAME_VERIFICATION;</entry>
                        <entry><literal>jersey.config.jetty.client.disableCookies</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.false; indicates the client disable a hostname verification
                                during SSL Handshake. A client will ignore CN value defined in a certificate
                                that is stored in a truststore.
                            </para>
                            <para>
                                The value MUST be an instance of &lit.jdk6.Boolean;.
                                If the property is absent the default value is &lit.true;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jetty.JettyClientProperties.PREEMPTIVE_BASIC_AUTHENTICATION;</entry>
                        <entry><literal>jersey.config.jetty.client.preemptiveBasicAuthentication</literal></entry>
                        <entry>
                            <para>
                                The credential provider that should be used to retrieve
                                credentials from a user.
                            </para>
                            <para>
                                If an <literal>org.eclipse.jetty.client.api.Authentication</literal> mechanism is found,
                                it is then used for the given request, returning an
                                <literal>org.eclipse.jetty.client.api.Authentication.Result</literal>,
                                which is then stored in the <literal>org.eclipse.jetty.client.api.AuthenticationStore</literal>
                                so that subsequent requests can be preemptively authenticated.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>org.eclipse.jetty.client.util.BasicAuthentication</literal>.
                                If the property is absent a default provider will be used.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jetty.JettyClientProperties.SYNC_LISTENER_RESPONSE_MAX_SIZE;</entry>
                        <entry><literal>jersey.config.jetty.client.syncListenerResponseMaxSize</literal></entry>
                        <entry>
                            <para>
                                Overrides the default Jetty synchronous listener response max buffer size.
                                In practise, this allows you to read larger responses.
                                Size in bytes.
                            </para>
                            <para>
                                If the property is absent, the value is such as specified by Jetty (currently 2MiB).
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jetty.JettyClientProperties.TOTAL_TIMEOUT;</entry>
                        <entry><literal>jersey.config.jetty.client.totalTimeout</literal></entry>
                        <entry>
                            <para>
                                Total timeout interval for request/response conversation, in milliseconds.
                                Opposed to &jersey.client.ClientProperties.READ_TIMEOUT;.
                            </para>
                            <para>
                                The value MUST be an instance convertible to <literal>Integer</literal>.
                                The value of zero <literal>0</literal> is equivalent to an interval of infinity.
                            </para>
                            <para>
                                The default value is <literal>0</literal> (infinity).
                            </para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-client-netty">
        <title>Netty HTTP client configuration properties</title>

        <para>
            List of client configuration properties that can be found in &jersey.netty.NettyClientProperties; class.
        </para>

        <table>
            <title>List of Netty HTTP client configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.netty.NettyClientProperties.FILTER_HEADERS_FOR_PROXY;</entry>
                        <entry><literal>jersey.config.client.filter.headers.proxy</literal></entry>
                        <entry>
                            <para>
                                Filter the HTTP headers for requests (CONNECT) towards the proxy except for
                                <literal>PROXY</literal>-prefixed and <literal>HOST</literal> headers when &lit.true;.
                            </para>
                            <para>
                                The default value is &lit.true; and the headers are filtered out.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.netty.NettyClientProperties.IDLE_CONNECTION_PRUNE_TIMEOUT;</entry>
                        <entry><literal>jersey.config.client.idleConnectionPruneTimeout</literal></entry>
                        <entry>
                            <para>
                                This property determines the number of seconds the idle connections are kept in the pool before pruned.
                                The default is 60. Specify 0 to disable.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.netty.NettyClientProperties.MAX_CONNECTIONS;</entry>
                        <entry><literal>jersey.config.client.maxConnections</literal></entry>
                        <entry>
                            <para>
                                This property determines the maximum number of idle connections that will be simultaneously kept
                                alive, per destination. The default is 5.
                            </para>
                            <para>
                                This property is a Jersey alternative to System property <literal>http.maxConnections</literal>.
                                The Jersey property takes precedence over the system property.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.netty.NettyClientProperties.MAX_CONNECTIONS_TOTAL;</entry>
                        <entry><literal>jersey.config.client.maxTotalConnections</literal></entry>
                        <entry>
                            <para>
                                This property determines the maximum number of idle connections that will be simultaneously kept alive
                                in total, rather than per destination. The default is 60. Specify 0 to disable.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.netty.NettyClientProperties.MAX_REDIRECTS;</entry>
                        <entry><literal>jersey.config.client.NettyConnectorProvider.maxRedirect</literal></entry>
                        <entry>
                            <para>
                                This property determines the maximal number of redirects during single request. Value is expected to be
                                positive number. Default value is 5.
                                HTTP redirection must be enabled by property org.glassfish.jersey.client.ClientProperties.FOLLOW_REDIRECTS
                                otherwise &jersey.netty.NettyClientProperties.MAX_REDIRECTS; is not applied.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.netty.NettyClientProperties.PRESERVE_METHOD_ON_REDIRECT;</entry>
                        <entry><literal>jersey.config.client.redirect.preserve.method</literal></entry>
                        <entry>
                            <para>
                                Sets the HTTP POST method to be preserved on HTTP status 301 (MOVED PERMANENTLY) or status 302 (FOUND)
                                when &lit.true; or redirected as GET when &lit.false;.
                            </para>
                            <para>
                                The default value is &lit.true; and the HTTP POST request is not redirected as GET.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.netty.NettyClientProperties.EXPECT_100_CONTINUE_TIMEOUT;</entry>
                        <entry><literal>jersey.config.client.request.expect.100.continue.timeout</literal></entry>
                        <entry>
                            <para>
                                This timeout is used for waiting for 100-Continue response when 100-Continue
                                is sent by the client.
                                Default timeout value is 500 ms after which Expect:100-Continue feature is ignored.
                                <literal>Since 2.41</literal>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.netty.NettyClientProperties.MAX_HEADER_SIZE;</entry>
                        <entry><literal>jersey.config.client.netty.maxHeaderSize</literal></entry>
                        <entry>
                            <para>
                                Parameter which allows extending of the header size for the Netty connector

                                Default header size is 8192b.
                                <literal>Since 2.44</literal>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.netty.NettyClientProperties.MAX_CHUNK_SIZE;</entry>
                        <entry><literal>jersey.config.client.netty.maxChunkSize</literal></entry>
                        <entry>
                            <para>
                                Parameter which allows extending of the chunk size for the Netty connector

                                Default chunk size is 8192b.
                                <literal>Since 2.44</literal>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.netty.NettyClientProperties.MAX_INITIAL_LINE_LENGTH;</entry>
                        <entry><literal>jersey.config.client.netty.maxInitialLineLength</literal></entry>
                        <entry>
                            <para>
                                Parameter which allows extending of the initial line length for the Netty connector

                                Default initial line length is 4096b.
                                <literal>Since 2.44</literal>
                            </para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-client-jnh">
        <title>Java Net HTTP client configuration properties</title>

        <para>
            List of client configuration properties that can be found in &jersey.jnh.JavaNetHttpClientProperties; class.
        </para>

        <table>
            <title>List of Java Net HTTP client configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.jnh.JavaNetHttpClientProperties.COOKIE_HANDLER;</entry>
                        <entry><literal>jersey.config.jnh.client.cookieHandler</literal></entry>
                        <entry>
                            <para>
                                Configuration of the <literal>java.net.CookieHandler</literal> that should be used by the
                                <literal>java.net.http.HttpClient</literal>. If this option is not set,
                                <literal>java.net.http.HttpClient#cookieHandler()</literal> will return an empty
                                <literal>java.util.Optional</literal> and therefore no cookie handler will be used.
                            </para>
                            <para>
                                A provided value to this option has to be of type <literal>java.net.CookieHandler</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jnh.JavaNetHttpClientProperties.SSL_PARAMETERS;</entry>
                        <entry><literal>jersey.config.jnh.client.sslParameters</literal></entry>
                        <entry>
                            <para>
                                Configuration of SSL parameters used by the <literal>java.net.http.HttpClient</literal>.
                                If this option is not set, then the <literal>java.net.http.HttpClient</literal> will use
                                <it>implementation specific</it> default values.
                            </para>
                            <para>
                                A provided value to this option has to be of type <literal>javax.net.ssl.SSLParameters</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jnh.JavaNetHttpClientProperties.PREEMPTIVE_BASIC_AUTHENTICATION;</entry>
                        <entry><literal>jersey.config.jnh.client.preemptiveBasicAuthentication</literal></entry>
                        <entry>
                            <para>
                                An instance of the Authenticator class which represents an object that knows how to
                                obtain authentication for a network connection should be used.
                            </para>
                            <para>
                                If an <literal>java.net.Authenticator</literal> instance is found,
                                it is then used for the given request.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>java.net.Authenticator</literal>.
                                If the property is absent, no authentication is used.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jnh.JavaNetHttpClientProperties.DISABLE_COOKIES;</entry>
                        <entry><literal>jersey.config.jnh.client.disableCookies</literal></entry>
                        <entry>
                            <para>
                                A value of &lit.false; indicates the client should handle cookies
                                automatically using HttpClient's default cookie policy. A value
                                of &lit.true; will cause the client to ignore all cookies.
                            </para>
                            <para>
                                The value MUST be an instance of <literal>java.lang.Boolean</literal>.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.jnh.JavaNetHttpClientProperties.HTTP_VERSION;</entry>
                        <entry><literal>jersey.config.jnh.client.httpVersion</literal></entry>
                        <entry>
                            <para>
                                HTTP version - if null or instance of HttpClient.Version.HTTP_1_1
                                the version will be set to HTTP_1_1. If version is HttpClient.Version.HTTP_2
                                the client will attempt to perform each request using HTTP_2 protocol
                                but if not supported by server, the protocol will be still HTTP_1_1
                            </para>
                            <para>
                                The value MUST be an instance of <literal>java.net.http.HttpClient.Version</literal>.
                            </para>
                            <para>
                                The default value is &lit.null;.
                            </para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-multipart">
        <title>Multipart configuration properties</title>

        <para>
            List of multipart configuration properties that can be found in &jersey.media.multipart.MultiPartProperties; class.
        </para>

        <table>
            <title>
                List of multipart configuration properties settable in the
                &jersey.media.multipart.MultiPartProperties.MULTI_PART_CONFIG_RESOURCE; configuration file.
            </title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.media.multipart.MultiPartProperties.BUFFER_THRESHOLD;</entry>
                        <entry><literal>jersey.config.multipart.bufferThreshold</literal></entry>
                        <entry>
                            <para>
                                Name of the resource property for the threshold size (in bytes) above which a
                                body part entity will be buffered to disk instead of being held in memory.
                            </para>
                            <para>
                                The default value is &jersey.message.MessageProperties.IO_DEFAULT_BUFFER_SIZE;
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.media.multipart.MultiPartProperties.MAX_PARTS;</entry>
                        <entry><literal>jersey.config.multipart.maxParts</literal></entry>
                        <entry>
                            <para>
                                Limit the maximum number of parts the multipart entity can have. If the limit is over,
                                the error response status <literal>413 - REQUEST_ENTITY_TOO_LARGE</literal>
                                is returned.
                            </para>
                            <para>
                                By default, the number is unlimited.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.media.multipart.MultiPartProperties.MULTI_PART_CONFIG_RESOURCE;</entry>
                        <entry><literal>jersey-multipart-config.properties</literal></entry>
                        <entry>
                            <para>
                                Name of a properties resource that (if found in the classpath
                                for this application) will be used to configure the settings returned
                                by our getter methods.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.media.multipart.MultiPartProperties.TEMP_DIRECTORY;</entry>
                        <entry><literal>jersey.config.multipart.tempDir</literal></entry>
                        <entry>
                            <para>
                                Name of the resource property for the directory to store temporary files containing body parts
                                of multipart message that extends allowed memory threshold.
                            </para>
                            <para>
                                The default value is not set (will be taken from <literal>java.io.tmpdir</literal> system property).
                            </para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
</appendix>