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

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

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

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

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

-->

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

    <title>Configuration Properties</title>

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

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

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

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

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

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

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

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

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

        <table>
            <title>List of server configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.server.ServerProperties.APPLICATION_NAME;</entry>
                        <entry><literal>jersey.config.server.application.name</literal></entry>
                        <entry>
                            <para>
                                Defines the application name. The name is an arbitrary user defined name which is used to
                                distinguish between Jersey applications in the case that more applications are deployed on
                                the same runtime (container). The name can be used for example for purposes of monitoring
                                by JMX when name identifies to which application deployed MBeans belong to. The name should
                                be unique in the runtime. The property does not have a default value.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.BV_FEATURE_DISABLE;</entry>
                        <entry><literal>jersey.config.beanValidation.disable.server</literal></entry>
                        <entry>
                            <para>
                                Disables Bean Validation support. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry><link xlink:href='&jersey.javadoc.uri.prefix;/server/ServerProperties.html#BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK'>ServerProperties
                            .BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK</link></entry>
                        <entry><literal>jersey.config.beanValidation
                            .disable.validateOnExecutableCheck.server</literal></entry>
                        <entry>
                            <para>
                                Disables &lit.bv.ValidateOnExecution; check. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.BV_SEND_ERROR_IN_RESPONSE;</entry>
                        <entry><literal>jersey.config.beanValidation
                            .enableOutputValidationErrorEntity.server</literal></entry>
                        <entry>
                            <para>
                                Enables sending validation error information to the client. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.server.ServerProperties.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_BINDING_FEATURE_DISABLE;</entry>
                        <entry><literal>jersey.config.server.disableJsonBinding</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.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.CONNECTOR_PROVIDER;(Jersey 2.40 or later)</entry>
                        <entry><literal>jersey.config.client.connector.provider</literal></entry>
                        <entry>
                            <para>
                                Sets the &jersey.client.ConnectorProvider; class. Overrides the value from META-INF/services.
                            </para>
                            <para>
                                The value MUST be an instance of &lit.jdk6.String;.
                            </para>
                            <para>
                                The property is recognized by &lit.jaxrs.client.ClientBuilder;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.DIGESTAUTH_URI_CACHE_SIZELIMIT;</entry>
                        <entry><literal>jersey.config.client.digestAuthUriCacheSizeLimit</literal></entry>
                        <entry>
                            <para>
                                The property defines a URI of a HTTP proxy the client connector should use.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.EXPECT_100_CONTINUE;</entry>
                        <entry><literal>jersey.config.client.request.expect.100.continue.processing</literal></entry>
                        <entry>
                            <para>
                                Allows for HTTP Expect:100-Continue being handled by the HttpUrlConnector (default Jersey
                                connector). <literal>Since 2.32</literal>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.EXPECT_100_CONTINUE_THRESHOLD_SIZE;</entry>
                        <entry><literal>jersey.config.client.request.expect.100.continue.threshold.size</literal></entry>
                        <entry>
                            <para>
                                Property for threshold size for content length after which Expect:100-Continue header would be applied
                                before the main request.
                                Default threshold size (64kb) after which Expect:100-Continue header would be applied before
                                the main request.
                                <literal>Since 2.32</literal>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.FEATURE_AUTO_DISCOVERY_DISABLE;</entry>
                        <entry><literal>jersey.config.client.disableAutoDiscovery</literal></entry>
                        <entry>
                            <para>
                                Disables feature auto discovery on client. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.FOLLOW_REDIRECTS;</entry>
                        <entry><literal>jersey.config.client.followRedirects</literal></entry>
                        <entry>
                            <para>
                                Declares that the client will automatically redirect to the URI declared in 3xx responses. Default value is <literal>true</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.JSON_BINDING_FEATURE_DISABLE;</entry>
                        <entry><literal>jersey.config.client.disableJsonBinding</literal></entry>
                        <entry>
                            <para>
                                Disables configuration of Json Binding (JSR-367) feature. Default value is <literal>false</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.SNI_HOST_NAME; (Jersey 2.43 or later)</entry>
                        <entry><literal>jersey.config.client.sniHostName</literal></entry>
                        <entry>
                            <para>
                                Sets the host name to be used for calculating the <literal>javax.net.ssl.SNIHostName</literal>
                                during the HTTPS request. Takes precedence over the HTTP HOST header, if set.
                            </para>
                            <para>
                                By default, the <literal>SNIHostName</literal> is set when the HOST HTTP header differs from
                                the HTTP request host. When the property value host name matches the HTTPS request host,
                                the <literal>SNIHostName</literal> is not set, and the HTTP HOST header is not used for
                                setting the <literal>SNIHostName</literal>. This allows for Domain Fronting.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION;
                            (Jersey 2.2 or later)</entry>
                        <entry><literal>jersey.config.client.suppressHttpComplianceValidation</literal></entry>
                        <entry>
                            <para>
                                If &lit.true;, the strict validation of HTTP specification compliance for client-side
                                requests will be suppressed. When compliance checks are suppressed, any violations will
                                be merely logged as warnings, rather than causing exceptions being raised in Jersey
                                runtime. Default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.SSL_CONTEXT_SUPPLIER;</entry>
                        <entry><literal>jersey.config.client.ssl.context.supplier</literal></entry>
                        <entry>
                            <para>
                                The <literal>javax.net.ssl.SSLContext java.util.function.Supplier</literal> to be used to set ssl
                                context in the current HTTP request. Has precedence over the
                                <literal>Client#getSslContext()</literal>.
                            </para>
                            <para>
                                Currently supported by the default <literal>HttpUrlConnector</literal> and by
                                <literal>NettyConnector</literal> only.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.USE_ENCODING;</entry>
                        <entry><literal>jersey.config.client.useEncoding</literal></entry>
                        <entry>
                            <para>
                                Indicates the value of <literal>Content-Encoding</literal> property the
                                &jersey.client.EncodingFilter; should be adding. Default value is not set.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_NAME_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.logger.name</literal>
                        </entry>
                        <entry>
                            Logger name of the logging filter.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                            The default value is <literal>org.glassfish.jersey.logging.LoggingFeature</literal>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.logger.level</literal>
                        </entry>
                        <entry>
                            Level of logging filter's logger at which the messages will be logged.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_VERBOSITY_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.verbosity</literal>
                        </entry>
                        <entry>
                            Verbosity of logging filter describes how verbose the logging filter will be.
                            There are 3 possible values &lit.jersey.logging.LoggingFeature.Verbosity.HEADERS_ONLY;,
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_TEXT; or
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_ANY;.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_MAX_ENTITY_SIZE_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.entity.maxSize</literal>
                        </entry>
                        <entry>
                            The maximum number of bytes of the entity which will be logged.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_SEPARATOR_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.entity.separator</literal>
                        </entry>
                        <entry>
                            New line delimiter property (client side).
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_REDACT_HEADERS_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.headers.redact</literal>
                        </entry>
                        <entry>
                            The HTTP headers (semicolon separated) to be redacted when logging.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-message">
        <title>Jersey configuration properties for message &amp; entity processing</title>

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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