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

    Copyright (c) 2013, 2022 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.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.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.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-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>javax.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.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;, 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.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.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.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 which Expect:100-Continue header would be applied before
                                the main request.
                                <literal>Since 2.32</literal>
                            </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-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.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>
                </tbody>
            </tgroup>
        </table>
    </section>
</appendix>