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

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

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

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

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

-->

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

    <title>Configuration Properties</title>

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

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

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

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

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

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

                            Default value is <literal>NULL</literal>
                            @since 2.36
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.common.CommonProperties.PARAM_CONVERTERS_THROW_IAE;(Jersey 2.40 or later)
                        </entry>
                        <entry>
                            <literal>jersey.config.paramconverters.throw.iae</literal>
                        </entry>
                        <entry>
                            <para>
                                Force the &jaxrs.ext.ParamConverter; to throw <literal>IllegalArgumentException
                            </literal> as mandated in javadoc.
                                Must be convertible to &lit.jdk6.Boolean; value.
                            </para>
                            <para>
                                Internally the <literal>Exception</literal> is caught by Jersey and usually converted to
                                <literal>null</literal>
                                Therefore, the default value is set to &lit.false; to speed up the conversion.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_NAME;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.logger.name</literal>
                        </entry>
                        <entry>
                            Logger name of the logging filter.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                            The default value is <literal>org.glassfish.jersey.logging.LoggingFeature</literal>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.logger.level</literal>
                        </entry>
                        <entry>
                            Level of logging filter's logger at which the messages will be logged.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_VERBOSITY;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.verbosity</literal>
                        </entry>
                        <entry>
                            Verbosity of logging filter describes how verbose the logging filter will be.
                            There are 3 possible values &lit.jersey.logging.LoggingFeature.Verbosity.HEADERS_ONLY;,
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_TEXT; or
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_ANY;.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_MAX_ENTITY_SIZE;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.entity.maxSize</literal>
                        </entry>
                        <entry>
                            The maximum number of bytes of the entity which will be logged.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_SEPARATOR;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.entity.separator</literal>
                        </entry>
                        <entry>
                            Custom logging delimiter for new lines separation.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_REDACT_HEADERS;
                        </entry>
                        <entry>
                            <literal>jersey.config.logging.headers.redact</literal>
                        </entry>
                        <entry>
                            The HTTP headers (semicolon separated) to be redacted when logging.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        <table>
            <title>List of client configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.client.ClientProperties.ASYNC_THREADPOOL_SIZE;</entry>
                        <entry><literal>jersey.config.client.async.threadPoolSize</literal></entry>
                        <entry>
                            <para>
                                Asynchronous thread pool size. Default value is not set.
                                <emphasis>Supported with &jersey.grizzly.GrizzlyConnectorProvider; only.</emphasis>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.BACKGROUND_SCHEDULER_THREADPOOL_SIZE;</entry>
                        <entry><literal>jersey.config.client.backgroundScheduler.threadPoolSize</literal></entry>
                        <entry>
                            <para>
                                Scheduler thread pool size. Default value is not set.
                                <emphasis>Support is undefined</emphasis>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.CHUNKED_ENCODING_SIZE;</entry>
                        <entry><literal>jersey.config.client.chunkedEncodingSize</literal></entry>
                        <entry>
                            <para>
                                Chunked encoding size. Default value is  <literal>4096</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.CONNECT_TIMEOUT;</entry>
                        <entry><literal>jersey.config.client.connectTimeout</literal></entry>
                        <entry>
                            <para>
                                Read timeout interval, in milliseconds. Default value is <literal>0</literal> (infinity).
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.CONNECTOR_PROVIDER;(Jersey 2.40 or later)</entry>
                        <entry><literal>jersey.config.client.connector.provider</literal></entry>
                        <entry>
                            <para>
                                Sets the &jersey.client.ConnectorProvider; class. Overrides the value from META-INF/services.
                            </para>
                            <para>
                                The value MUST be an instance of &lit.jdk6.String;.
                            </para>
                            <para>
                                The property is recognized by &lit.jaxrs.client.ClientBuilder;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.DIGESTAUTH_URI_CACHE_SIZELIMIT;</entry>
                        <entry><literal>jersey.config.client.digestAuthUriCacheSizeLimit</literal></entry>
                        <entry>
                            <para>
                                The property defines a URI of a HTTP proxy the client connector should use.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.EXPECT_100_CONTINUE;</entry>
                        <entry><literal>jersey.config.client.request.expect.100.continue.processing</literal></entry>
                        <entry>
                            <para>
                                Allows for HTTP Expect:100-Continue being handled by the HttpUrlConnector (default Jersey
                                connector). <literal>Since 2.32</literal>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.EXPECT_100_CONTINUE_THRESHOLD_SIZE;</entry>
                        <entry><literal>jersey.config.client.request.expect.100.continue.threshold.size</literal></entry>
                        <entry>
                            <para>
                                Property for threshold size for content length after which Expect:100-Continue header would be applied
                                before the main request.
                                Default threshold size (64kb) after which Expect:100-Continue header would be applied before
                                the main request.
                                <literal>Since 2.32</literal>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.FEATURE_AUTO_DISCOVERY_DISABLE;</entry>
                        <entry><literal>jersey.config.client.disableAutoDiscovery</literal></entry>
                        <entry>
                            <para>
                                Disables feature auto discovery on client. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.FOLLOW_REDIRECTS;</entry>
                        <entry><literal>jersey.config.client.followRedirects</literal></entry>
                        <entry>
                            <para>
                                Declares that the client will automatically redirect to the URI declared in 3xx responses. Default value is <literal>true</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.JSON_PROCESSING_FEATURE_DISABLE;</entry>
                        <entry><literal>jersey.config.client.disableJsonProcessing</literal></entry>
                        <entry>
                            <para>
                                Disables configuration of Json Processing (JSR-353) feature. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE;</entry>
                        <entry><literal>jersey.config.disableMetainfServicesLookup.client</literal></entry>
                        <entry>
                            <para>
                                Disables META-INF/services lookup on client. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.MOXY_JSON_FEATURE_DISABLE;</entry>
                        <entry><literal>jersey.config.client.disableMoxyJson</literal></entry>
                        <entry>
                            <para>
                                Disables configuration of MOXy Json feature. Default value is <literal>false</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.OUTBOUND_CONTENT_LENGTH_BUFFER;
                            (Jersey 2.2 or later)</entry>
                        <entry><literal>jersey.config.client.contentLength.buffer</literal></entry>
                        <entry>
                            <para>
                                An integer value that defines the buffer size used to buffer the outbound message entity in order to
                                determine its size and set the value of HTTP <literal>Content-Length</literal> header. Default
                                value is <literal>8192</literal>.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.PROXY_URI;</entry>
                        <entry><literal>jersey.config.client.proxy.uri</literal></entry>
                        <entry>
                            <para>
                                URI of a HTTP proxy the client connector should use. Default value is not set.
                                <emphasis>Currently supported with &jersey.apache.ApacheConnectorProvider;,
                                    &jersey.apache5.Apache5ConnectorProvider;,
                                    &jersey.grizzly.GrizzlyConnectorProvider;,
                                    &jersey.helidon.HelidonConnectorProvider;,
                                    &jersey.netty.NettyConnectorProvider;,
                                    &jersey.jetty11.Jetty11ConnectorProvider;, and
                                    &jersey.jetty.JettyConnectorProvider; only.</emphasis>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.PROXY_USERNAME; (Jersey 2.5 or later)</entry>
                        <entry><literal>jersey.config.client.proxy.username</literal></entry>
                        <entry>
                            <para>
                                User name which will be used for HTTP proxy authentication. Default value is not set.
                                <emphasis>Currently supported with &jersey.apache.ApacheConnectorProvider; and
                                    &jersey.jetty.JettyConnectorProvider; only.</emphasis>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.PROXY_PASSWORD; (Jersey 2.5 or later)</entry>
                        <entry><literal>jersey.config.client.proxy.password</literal></entry>
                        <entry>
                            <para>
                                Password which will be used for HTTP proxy authentication. Default value is not set.
                                <emphasis>Currently supported with &jersey.apache.ApacheConnectorProvider; and
                                    &jersey.jetty.JettyConnectorProvider; only.</emphasis>
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.READ_TIMEOUT; (Jersey 2.5 or later)</entry>
                        <entry><literal>jersey.config.client.readTimeout</literal></entry>
                        <entry>
                            <para>
                                Read timeout interval, in milliseconds. Default value is <literal>0</literal> (infinity).
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.REQUEST_ENTITY_PROCESSING; (Jersey 2.5 or later)</entry>
                        <entry><literal>jersey.config.client.request.entity.processing</literal></entry>
                        <entry>
                            <para>
                                Defines whether the request entity should be serialized using internal buffer to
                                evaluate content length or chunk encoding should be used. Possible values are
                                <literal>BUFFERED</literal> or <literal>CHUNKED</literal>. Default value is
                                <literal>BUFFERED</literal>.
                            </para>
                        </entry>
                    </row>

                    <row>
                        <entry>&jersey.client.ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION;
                            (Jersey 2.2 or later)</entry>
                        <entry><literal>jersey.config.client.suppressHttpComplianceValidation</literal></entry>
                        <entry>
                            <para>
                                If &lit.true;, the strict validation of HTTP specification compliance for client-side
                                requests will be suppressed. When compliance checks are suppressed, any violations will
                                be merely logged as warnings, rather than causing exceptions being raised in Jersey
                                runtime. Default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.SSL_CONTEXT_SUPPLIER;</entry>
                        <entry><literal>jersey.config.client.ssl.context.supplier</literal></entry>
                        <entry>
                            <para>
                                The <literal>javax.net.ssl.SSLContext java.util.function.Supplier</literal> to be used to set ssl
                                context in the current HTTP request. Has precedence over the
                                <literal>Client#getSslContext()</literal>.
                            </para>
                            <para>
                                Currently supported by the default <literal>HttpUrlConnector</literal> and by
                                <literal>NettyConnector</literal> only.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.USE_ENCODING;</entry>
                        <entry><literal>jersey.config.client.useEncoding</literal></entry>
                        <entry>
                            <para>
                                Indicates the value of <literal>Content-Encoding</literal> property the
                                &jersey.client.EncodingFilter; should be adding. Default value is not set.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.client.ClientProperties.SNI_HOST_NAME;</entry>
                        <entry><literal>jersey.config.client.sniHostName</literal></entry>
                        <entry>
                            <para>
                                Most connectors support HOST header value to be used as an SNIHostName. However, the HOST header is restricted in JDK.
                                <literal>HttpUrlConnector</literal> and <literal>JavaNetHttpConnector</literal> need
                                an extra System Property set to allow HOST header.
                                As an option to HOST header, this property allows the HOST name to be pre-set on a Client and does not need to
                                be set on each request.
                                <literal>Since 3.1.2</literal>
                            </para>
                            <para>
                                The value MUST be an instance of &lit.jdk6.String;
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_NAME_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.logger.name</literal>
                        </entry>
                        <entry>
                            Logger name of the logging filter.
                            See <link linkend="logging.xml">logging</link> chapter for more information.
                            The default value is <literal>org.glassfish.jersey.logging.LoggingFeature</literal>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.logger.level</literal>
                        </entry>
                        <entry>
                            Level of logging filter's logger at which the messages will be logged.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_VERBOSITY_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.verbosity</literal>
                        </entry>
                        <entry>
                            Verbosity of logging filter describes how verbose the logging filter will be.
                            There are 3 possible values &lit.jersey.logging.LoggingFeature.Verbosity.HEADERS_ONLY;,
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_TEXT; or
                            &lit.jersey.logging.LoggingFeature.Verbosity.PAYLOAD_ANY;.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_MAX_ENTITY_SIZE_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.entity.maxSize</literal>
                        </entry>
                        <entry>
                            The maximum number of bytes of the entity which will be logged.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_SEPARATOR_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.entity.separator</literal>
                        </entry>
                        <entry>
                            New line delimiter property (client side).
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.logging.LoggingFeature.LOGGING_FEATURE_REDACT_HEADERS_CLIENT;
                        </entry>
                        <entry>
                            <literal>jersey.config.client.logging.headers.redact</literal>
                        </entry>
                        <entry>
                            The HTTP headers (semicolon separated) to be redacted when logging.
                            See <link linkend="logging_chapter">logging</link> chapter for more information.
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-message">
        <title>Jersey configuration properties for message &amp; entity processing</title>

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

        <table>
            <title>List of Apache HTTP client configuration properties</title>
            <tgroup cols="3">
                <thead>
                    <row>
                        <entry>Constant</entry>
                        <entry>Value</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry>&jersey.message.MessageProperties.DEFLATE_WITHOUT_ZLIB;</entry>
                        <entry><literal>jersey.config.deflate.nozlib</literal></entry>
                        <entry>
                            <para>
                                If set to &lit.true;, <literal>DeflateEncoder deflate encoding interceptor</literal> will use non-standard version
                                of the deflate content encoding, skipping the zlib wrapper. Unfortunately, deflate encoding
                                implementations in some products use this non-compliant version, hence the switch.
                            </para>
                            <para>
                                The default value is &lit.false;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.message.MessageProperties.IO_BUFFER_SIZE;</entry>
                        <entry><literal>jersey.config.io.bufferSize</literal></entry>
                        <entry>
                            <para>
                                Value of the property indicates the buffer size to be used for I/O operations
                                on byte and character streams. The property value is expected to be a positive
                                integer otherwise it will be ignored.
                            </para>
                            <para>
                                The default value is value of &jersey.message.MessageProperties.IO_DEFAULT_BUFFER_SIZE;.
                            </para>
                        </entry>
                    </row>
                    <row>
                        <entry>&jersey.message.MessageProperties.JAXB_PROCESS_XML_ROOT_ELEMENT;</entry>
                        <entry><literal>jersey.config.jaxb.collections.processXmlRootElement</literal></entry>
                        <entry>
                            <para>
                                If set to &lit.true; then XML root element tag name for collections will
                                be derived from <literal>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-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>
                </tbody>
            </tgroup>
        </table>
    </section>
    <section xml:id="appendix-properties-client-jnh">
        <title>Java Net HTTP client configuration properties</title>

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

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