/
ApacheClientProperties.java
183 lines (168 loc) · 7.68 KB
/
ApacheClientProperties.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*
* Copyright (c) 2013, 2019 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
*/
package org.glassfish.jersey.apache.connector;
import java.util.Map;
import org.glassfish.jersey.internal.util.PropertiesClass;
import org.glassfish.jersey.internal.util.PropertiesHelper;
/**
* Configuration options specific to the Client API that utilizes {@link ApacheConnectorProvider}.
*
* @author jorgeluisw@mac.com
* @author Paul Sandoz
* @author Pavel Bucek
* @author Arul Dhesiaseelan (aruld at acm.org)
*/
@PropertiesClass
public final class ApacheClientProperties {
/**
* The credential provider that should be used to retrieve
* credentials from a user. Credentials needed for proxy authentication
* are stored here as well.
* <p/>
* The value MUST be an instance of {@link org.apache.http.client.CredentialsProvider}.
* <p/>
* If the property is absent a default provider will be used.
* <p/>
* The name of the configuration property is <tt>{@value}</tt>.
*/
public static final String CREDENTIALS_PROVIDER = "jersey.config.apache.client.credentialsProvider";
/**
* A value of {@code false} indicates the client should handle cookies
* automatically using HttpClient's default cookie policy. A value
* of {@code true} will cause the client to ignore all cookies.
* <p/>
* The value MUST be an instance of {@link java.lang.Boolean}.
* <p/>
* The default value is {@code false}.
* <p/>
* The name of the configuration property is <tt>{@value}</tt>.
*/
public static final String DISABLE_COOKIES = "jersey.config.apache.client.handleCookies";
/**
* A value of {@code true} indicates that a client should send an
* authentication request even before the server gives a 401
* response.
* <p>
* This property may only be set prior to constructing Apache connector using {@link ApacheConnectorProvider}.
* <p/>
* The value MUST be an instance of {@link java.lang.Boolean}.
* <p/>
* The default value is {@code false}.
* <p/>
* The name of the configuration property is <tt>{@value}</tt>.
*/
public static final String PREEMPTIVE_BASIC_AUTHENTICATION = "jersey.config.apache.client.preemptiveBasicAuthentication";
/**
* Connection Manager which will be used to create {@link org.apache.http.client.HttpClient}.
* <p/>
* The value MUST be an instance of {@link org.apache.http.conn.HttpClientConnectionManager}.
* <p/>
* If the property is absent a default Connection Manager will be used
* ({@link org.apache.http.impl.conn.BasicHttpClientConnectionManager}).
* If you want to use this client in multi-threaded environment, be sure you override default value with
* {@link org.apache.http.impl.conn.PoolingHttpClientConnectionManager} instance.
* <p/>
* The name of the configuration property is <tt>{@value}</tt>.
*/
public static final String CONNECTION_MANAGER = "jersey.config.apache.client.connectionManager";
/**
* A value of {@code true} indicates that configured connection manager should be shared
* among multiple Jersey {@link org.glassfish.jersey.client.ClientRuntime} instances. It means that closing
* a particular {@link org.glassfish.jersey.client.ClientRuntime} 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 {@link org.apache.http.conn.HttpClientConnectionManager#shutdown()} gets
* invoked eventually.
* <p>
* This property may only be set prior to constructing Apache connector using {@link ApacheConnectorProvider}.
* <p/>
* The value MUST be an instance of {@link java.lang.Boolean}.
* <p/>
* The default value is {@code false}.
* <p/>
* The name of the configuration property is <tt>{@value}</tt>.
*
* @since 2.18
*/
public static final String CONNECTION_MANAGER_SHARED = "jersey.config.apache.client.connectionManagerShared";
/**
* Request configuration for the {@link org.apache.http.client.HttpClient}.
* Http parameters which will be used to create {@link org.apache.http.client.HttpClient}.
* <p/>
* The value MUST be an instance of {@link org.apache.http.client.config.RequestConfig}.
* <p/>
* If the property is absent default request configuration will be used.
* <p/>
* The name of the configuration property is <tt>{@value}</tt>.
*
* @since 2.5
*/
public static final String REQUEST_CONFIG = "jersey.config.apache.client.requestConfig";
/**
* HttpRequestRetryHandler which will be used to create {@link org.apache.http.client.HttpClient}.
* <p/>
* The value MUST be an instance of {@link org.apache.http.client.HttpRequestRetryHandler}.
* <p/>
* If the property is absent a default retry handler will be used
* ({@link org.apache.http.impl.client.DefaultHttpRequestRetryHandler}).
* <p/>
* The name of the configuration property is <tt>{@value}</tt>.
*/
public static final String RETRY_HANDLER = "jersey.config.apache.client.retryHandler";
/**
* ConnectionReuseStrategy for the {@link org.apache.http.client.HttpClient}.
* <p/>
* The value MUST be an instance of {@link org.apache.http.impl.ConnectionReuseStrategy}.
* <p/>
* If the property is absent the default reuse strategy of the Apache HTTP library will be used
* <p/>
* The name of the configuration property is <tt>{@value}</tt>.
*/
public static final String REUSE_STRATEGY = "jersey.config.apache.client.reuseStrategy";
/**
* ConnectionKeepAliveStrategy for the {@link org.apache.http.client.HttpClient}.
* <p/>
* The value MUST be an instance of {@link org.apache.http.conn.ConnectionKeepAliveStrategy}.
* <p/>
* If the property is absent the default keepalive strategy of the Apache HTTP library will be used
* <p/>
* The name of the configuration property is <tt>{@value}</tt>.
*/
public static final String KEEPALIVE_STRATEGY = "jersey.config.apache.client.keepAliveStrategy";
/**
* Get the value of the specified property.
*
* If the property is not set or the actual property value type is not compatible with the specified type, the method will
* return {@code null}.
*
* @param properties Map of properties to get the property value from.
* @param key Name of the property.
* @param type Type to retrieve the value as.
* @param <T> Type of the property value.
* @return Value of the property or {@code null}.
*
* @since 2.8
*/
public static <T> T getValue(final Map<String, ?> properties, final String key, final Class<T> type) {
return PropertiesHelper.getValue(properties, key, type, null);
}
/**
* Prevents instantiation.
*/
private ApacheClientProperties() {
throw new AssertionError("No instances allowed.");
}
}