001// *************************************************************************************************************************** 002// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * 003// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * 004// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * 005// * with the License. You may obtain a copy of the License at * 006// * * 007// * http://www.apache.org/licenses/LICENSE-2.0 * 008// * * 009// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * 010// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * 011// * specific language governing permissions and limitations under the License. * 012// *************************************************************************************************************************** 013package org.apache.juneau.rest.client; 014 015import static org.apache.juneau.internal.StringUtils.*; 016import static org.apache.juneau.parser.InputStreamParser.*; 017import static org.apache.juneau.parser.ReaderParser.*; 018import static org.apache.juneau.rest.client.RestClient.*; 019import static org.apache.juneau.BeanTraverseContext.*; 020import static org.apache.juneau.serializer.OutputStreamSerializer.*; 021import static org.apache.juneau.serializer.WriterSerializer.*; 022import static org.apache.juneau.uon.UonSerializer.*; 023 024import java.lang.reflect.*; 025import java.net.*; 026import java.security.*; 027import java.util.*; 028import java.util.concurrent.*; 029import java.util.logging.*; 030 031import javax.net.ssl.*; 032 033import org.apache.http.*; 034import org.apache.http.auth.*; 035import org.apache.http.client.*; 036import org.apache.http.client.CookieStore; 037import org.apache.http.client.config.*; 038import org.apache.http.client.entity.*; 039import org.apache.http.config.*; 040import org.apache.http.conn.*; 041import org.apache.http.conn.routing.*; 042import org.apache.http.conn.socket.*; 043import org.apache.http.conn.ssl.*; 044import org.apache.http.conn.util.*; 045import org.apache.http.cookie.*; 046import org.apache.http.impl.client.*; 047import org.apache.http.impl.conn.*; 048import org.apache.http.protocol.*; 049import org.apache.juneau.*; 050import org.apache.juneau.html.*; 051import org.apache.juneau.http.*; 052import org.apache.juneau.httppart.*; 053import org.apache.juneau.internal.*; 054import org.apache.juneau.json.*; 055import org.apache.juneau.msgpack.*; 056import org.apache.juneau.oapi.*; 057import org.apache.juneau.parser.*; 058import org.apache.juneau.plaintext.*; 059import org.apache.juneau.rest.client.mock.*; 060import org.apache.juneau.serializer.*; 061import org.apache.juneau.uon.*; 062import org.apache.juneau.urlencoding.*; 063import org.apache.juneau.utils.*; 064import org.apache.juneau.xml.*; 065 066/** 067 * Builder class for the {@link RestClient} class. 068 * 069 * <p> 070 * Instances of this class are created by the following methods: 071 * <ul> 072 * <li>{@link RestClient#create()} - Create from scratch. 073 * <li>{@link RestClient#create(Serializer,Parser)} - Create from scratch using specified serializer/parser. 074 * <li>{@link RestClient#create(Class,Class)} - Create from scratch using specified serializer/parser classes. 075 * <li>{@link RestClient#builder()} - Copy settings from an existing client. 076 * </ul> 077 * 078 * <h5 class='section'>See Also:</h5> 079 * <ul> 080 * <li class='link'>{@doc juneau-rest-client} 081 * </ul> 082 */ 083public class RestClientBuilder extends BeanContextBuilder { 084 085 private HttpClientConnectionManager httpClientConnectionManager; 086 private HttpClientBuilder httpClientBuilder; 087 private CloseableHttpClient httpClient; 088 private boolean enableSsl = false; 089 private HostnameVerifier hostnameVerifier; 090 private KeyManager[] keyManagers; 091 private TrustManager[] trustManagers; 092 private SecureRandom secureRandom; 093 private String[] sslProtocols, cipherSuites; 094 private boolean pooled; 095 096 /** 097 * Constructor. 098 * @param ps 099 * Initial configuration properties for this builder. 100 * <br>Can be <jk>null</jk>. 101 * @param httpClientBuilder 102 * The HTTP client builder to use for this REST client builder. 103 * <br>Can be <jk>null</jk> to just call {@link #createHttpClientBuilder()} to instantiate it again. 104 */ 105 protected RestClientBuilder(PropertyStore ps, HttpClientBuilder httpClientBuilder) { 106 super(ps); 107 this.httpClientBuilder = httpClientBuilder != null ? httpClientBuilder : createHttpClientBuilder(); 108 } 109 110 @SuppressWarnings("resource") 111 @Override /* ContextBuilder */ 112 public RestClient build() { 113 try { 114 CloseableHttpClient c = httpClient != null ? httpClient : createHttpClient(); 115 PropertyStore ps = psb.build(); 116 117 return new RestClient(ps, httpClientBuilder, c); 118 } catch (Exception e) { 119 throw new RuntimeException(e); 120 } 121 } 122 123 /** 124 * Convenience method for specifying JSON as the transmission media type. 125 * 126 * <p> 127 * Identical to calling <code>serializer(JsonSerializer.<jk>class</jk>).parser(JsonParser.<jk>class</jk>)</code>. 128 * 129 * @return This object (for method chaining). 130 */ 131 public RestClientBuilder json() { 132 return serializer(JsonSerializer.class).parser(JsonParser.class); 133 } 134 135 /** 136 * Convenience method for specifying Simple JSON as the transmission media type. 137 * 138 * <p> 139 * Identical to calling <code>serializer(SimpleJsonSerializer.<jk>class</jk>).parser(JsonParser.<jk>class</jk>)</code>. 140 * 141 * @return This object (for method chaining). 142 */ 143 public RestClientBuilder simpleJson() { 144 return serializer(SimpleJsonSerializer.class).parser(JsonParser.class); 145 } 146 147 /** 148 * Convenience method for specifying XML as the transmission media type. 149 * 150 * <p> 151 * Identical to calling <code>serializer(XmlSerializer.<jk>class</jk>).parser(XmlParser.<jk>class</jk>)</code>. 152 * 153 * @return This object (for method chaining). 154 */ 155 public RestClientBuilder xml() { 156 return serializer(XmlSerializer.class).parser(XmlParser.class); 157 } 158 159 /** 160 * Convenience method for specifying HTML as the transmission media type. 161 * 162 * <p> 163 * Identical to calling <code>serializer(HtmlSerializer.<jk>class</jk>).parser(HtmlParser.<jk>class</jk>)</code>. 164 * 165 * @return This object (for method chaining). 166 */ 167 public RestClientBuilder html() { 168 return serializer(HtmlSerializer.class).parser(HtmlParser.class); 169 } 170 171 /** 172 * Convenience method for specifying plain-text as the transmission media type. 173 * 174 * <p> 175 * Identical to calling <code>serializer(PlainTextSerializer.<jk>class</jk>).parser(PlainTextParser.<jk>class</jk>)</code>. 176 * 177 * @return This object (for method chaining). 178 */ 179 public RestClientBuilder plainText() { 180 return serializer(PlainTextSerializer.class).parser(PlainTextParser.class); 181 } 182 183 /** 184 * Convenience method for specifying MessagePack as the transmission media type. 185 * 186 * <p> 187 * Identical to calling <code>serializer(MsgPackSerializer.<jk>class</jk>).parser(MsgPackParser.<jk>class</jk>)</code>. 188 * 189 * @return This object (for method chaining). 190 */ 191 public RestClientBuilder msgpack() { 192 return serializer(MsgPackSerializer.class).parser(MsgPackParser.class); 193 } 194 195 /** 196 * Convenience method for specifying UON as the transmission media type. 197 * 198 * <p> 199 * Identical to calling <code>serializer(UonSerializer.<jk>class</jk>).parser(UonParser.<jk>class</jk>)</code>. 200 * 201 * @return This object (for method chaining). 202 */ 203 public RestClientBuilder uon() { 204 return serializer(UonSerializer.class).parser(UonParser.class); 205 } 206 207 /** 208 * Convenience method for specifying URL-Encoding as the transmission media type. 209 * 210 * <p> 211 * Identical to calling <code>serializer(UrlEncodingSerializer.<jk>class</jk>).parser(UrlEncodingParser.<jk>class</jk>)</code>. 212 * 213 * @return This object (for method chaining). 214 */ 215 public RestClientBuilder urlEnc() { 216 return serializer(UrlEncodingSerializer.class).parser(UrlEncodingParser.class); 217 } 218 219 /** 220 * Convenience method for specifying URL-Encoding as the transmission media type. 221 * 222 * <p> 223 * Identical to calling <code>serializer(OpenApiSerializer.<jk>class</jk>).parser(OpenApiParser.<jk>class</jk>)</code>. 224 * 225 * @return This object (for method chaining). 226 */ 227 public RestClientBuilder openapi() { 228 return serializer(OpenApiSerializer.class).parser(OpenApiParser.class); 229 } 230 231 /** 232 * Creates an instance of an {@link HttpClient} to be used to handle all HTTP communications with the target server. 233 * 234 * <p> 235 * This HTTP client is used when the HTTP client is not specified through one of the constructors or the 236 * {@link #httpClient(CloseableHttpClient, boolean)} method. 237 * 238 * <p> 239 * Subclasses can override this method to provide specially-configured HTTP clients to handle stuff such as 240 * SSL/TLS certificate handling, authentication, etc. 241 * 242 * <p> 243 * The default implementation returns an instance of {@link HttpClient} using the client builder returned by 244 * {@link #createHttpClientBuilder()}. 245 * 246 * @return The HTTP client to use. 247 * @throws Exception 248 */ 249 protected CloseableHttpClient createHttpClient() throws Exception { 250 // Don't call createConnectionManager() if RestClient.setConnectionManager() was called. 251 if (httpClientConnectionManager == null) 252 httpClientBuilder.setConnectionManager(createConnectionManager()); 253 else 254 httpClientBuilder.setConnectionManager(httpClientConnectionManager); 255 return httpClientBuilder.build(); 256 } 257 258 /** 259 * Creates an instance of an {@link HttpClientBuilder} to be used to create the {@link HttpClient}. 260 * 261 * <p> 262 * Subclasses can override this method to provide their own client builder. 263 * 264 * <p> 265 * The predefined method returns an {@link HttpClientBuilder} with the following settings: 266 * <ul> 267 * <li>Lax redirect strategy. 268 * <li>The connection manager returned by {@link #createConnectionManager()}. 269 * </ul> 270 * 271 * @return The HTTP client builder to use to create the HTTP client. 272 */ 273 protected HttpClientBuilder createHttpClientBuilder() { 274 HttpClientBuilder b = HttpClientBuilder.create(); 275 b.setRedirectStrategy(new AllowAllRedirects()); 276 return b; 277 } 278 279 /** 280 * Creates the {@link HttpClientConnectionManager} returned by {@link #createConnectionManager()}. 281 * 282 * <p> 283 * Subclasses can override this method to provide their own connection manager. 284 * 285 * <p> 286 * The default implementation returns an instance of a {@link PoolingHttpClientConnectionManager}. 287 * 288 * @return The HTTP client builder to use to create the HTTP client. 289 * @throws NoSuchAlgorithmException 290 * @throws KeyManagementException 291 */ 292 @SuppressWarnings("resource") 293 protected HttpClientConnectionManager createConnectionManager() throws KeyManagementException, NoSuchAlgorithmException { 294 if (enableSsl) { 295 296 HostnameVerifier hv = hostnameVerifier != null ? hostnameVerifier : new DefaultHostnameVerifier(); 297 TrustManager[] tm = trustManagers; 298 String[] sslp = sslProtocols == null ? getDefaultProtocols() : sslProtocols; 299 SecureRandom sr = secureRandom; 300 KeyManager[] km = keyManagers; 301 String[] cs = cipherSuites; 302 303 RegistryBuilder<ConnectionSocketFactory> rb = RegistryBuilder.<ConnectionSocketFactory>create(); 304 rb.register("http", PlainConnectionSocketFactory.getSocketFactory()); 305 306 SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom().build(); 307 sslContext.init(km, tm, sr); 308 309 SSLConnectionSocketFactory sslcsf = new SSLConnectionSocketFactory(sslContext, sslp, cs, hv); 310 rb.register("https", sslcsf).build(); 311 312 return (pooled ? new PoolingHttpClientConnectionManager(rb.build()) : new BasicHttpClientConnectionManager(rb.build())); 313 } 314 315 // Using pooling connection so that this client is threadsafe. 316 return (pooled ? new PoolingHttpClientConnectionManager() : new BasicHttpClientConnectionManager()); 317 } 318 319 /** 320 * Enable SSL support on this client. 321 * 322 * <p> 323 * Used in conjunction with the following methods for setting up SSL parameters: 324 * <ul class='doctree'> 325 * <li class='jf'>{@link #sslProtocols(String...)} 326 * <li class='jf'>{@link #cipherSuites(String...)} 327 * <li class='jf'>{@link #hostnameVerifier(HostnameVerifier)} 328 * <li class='jf'>{@link #keyManagers(KeyManager...)} 329 * <li class='jf'>{@link #trustManagers(TrustManager...)} 330 * <li class='jf'>{@link #secureRandom(SecureRandom)} 331 * </ul> 332 * 333 * @return This object (for method chaining). 334 * @throws KeyStoreException 335 * @throws NoSuchAlgorithmException 336 */ 337 public RestClientBuilder enableSSL() throws KeyStoreException, NoSuchAlgorithmException { 338 this.enableSsl = true; 339 return this; 340 } 341 342 /** 343 * Enable LARestClientBuilder SSL support. 344 * 345 * <p> 346 * Same as calling the following: 347 * <p class='bcode w800'> 348 * builder 349 * .enableSSL() 350 * .hostnameVerifier(<jk>new</jk> NoopHostnameVerifier()) 351 * .trustManagers(<jk>new</jk> SimpleX509TrustManager(<jk>true</jk>)); 352 * </p> 353 * 354 * @return This object (for method chaining). 355 * @throws KeyStoreException 356 * @throws NoSuchAlgorithmException 357 */ 358 public RestClientBuilder enableLaxSSL() throws KeyStoreException, NoSuchAlgorithmException { 359 this.enableSsl = true; 360 hostnameVerifier(new NoopHostnameVerifier()); 361 trustManagers(new SimpleX509TrustManager(true)); 362 return this; 363 } 364 365 /** 366 * Supported SSL protocols. 367 * 368 * <p> 369 * This is the value passed to the <code>supportedProtocols</code> parameter of the 370 * {@link SSLConnectionSocketFactory#SSLConnectionSocketFactory(SSLContext,String[],String[],HostnameVerifier)} 371 * constructor. 372 * 373 * <p> 374 * The default value is taken from the system property <js>"transport.client.protocol"</js>. 375 * <br>If system property is not defined, defaults to <code>{<js>"SSL_TLS"</js>,<js>"TLS"</js>,<js>"SSL"</js>}</code>. 376 * 377 * <p> 378 * This method is effectively ignored if {@link #enableSSL()} has not been called or the client connection manager 379 * has been defined via {@link #httpClientConnectionManager(HttpClientConnectionManager)}. 380 * 381 * @param sslProtocols The supported SSL protocols. 382 * @return This object (for method chaining). 383 */ 384 public RestClientBuilder sslProtocols(String...sslProtocols) { 385 this.sslProtocols = sslProtocols; 386 return this; 387 } 388 389 /** 390 * Supported cipher suites. 391 * 392 * <p> 393 * This is the value passed to the <code>supportedCipherSuites</code> parameter of the 394 * {@link SSLConnectionSocketFactory#SSLConnectionSocketFactory(SSLContext,String[],String[],HostnameVerifier)} 395 * constructor. 396 * 397 * <p> 398 * The default value is <jk>null</jk>. 399 * 400 * <p> 401 * This method is effectively ignored if {@link #enableSSL()} has not been called or the client connection manager 402 * has been defined via {@link #httpClientConnectionManager(HttpClientConnectionManager)}. 403 * 404 * @param cipherSuites The supported cipher suites. 405 * @return This object (for method chaining). 406 */ 407 public RestClientBuilder cipherSuites(String...cipherSuites) { 408 this.cipherSuites = cipherSuites; 409 return this; 410 } 411 412 /** 413 * Hostname verifier. 414 * 415 * <p> 416 * This is the value passed to the <code>hostnameVerifier</code> parameter of the 417 * {@link SSLConnectionSocketFactory#SSLConnectionSocketFactory(SSLContext,String[],String[],HostnameVerifier)} 418 * constructor. 419 * 420 * <p> 421 * The default value is <jk>null</jk>. 422 * 423 * <p> 424 * This method is effectively ignored if {@link #enableSSL()} has not been called or the client connection manager 425 * has been defined via {@link #httpClientConnectionManager(HttpClientConnectionManager)}. 426 * 427 * @param hostnameVerifier The hostname verifier. 428 * @return This object (for method chaining). 429 */ 430 public RestClientBuilder hostnameVerifier(HostnameVerifier hostnameVerifier) { 431 this.hostnameVerifier = hostnameVerifier; 432 return this; 433 } 434 435 /** 436 * Key managers. 437 * 438 * <p> 439 * This is the value passed to the <code>keyManagers</code> parameter of the 440 * {@link SSLContext#init(KeyManager[],TrustManager[],SecureRandom)} method. 441 * 442 * <p> 443 * The default value is <jk>null</jk>. 444 * 445 * <p> 446 * This method is effectively ignored if {@link #enableSSL()} has not been called or the client connection manager 447 * has been defined via {@link #httpClientConnectionManager(HttpClientConnectionManager)}. 448 * 449 * @param keyManagers The key managers. 450 * @return This object (for method chaining). 451 */ 452 public RestClientBuilder keyManagers(KeyManager...keyManagers) { 453 this.keyManagers = keyManagers; 454 return this; 455 } 456 457 /** 458 * Trust managers. 459 * 460 * <p> 461 * This is the value passed to the <code>trustManagers</code> parameter of the 462 * {@link SSLContext#init(KeyManager[],TrustManager[],SecureRandom)} method. 463 * 464 * <p> 465 * The default value is <jk>null</jk>. 466 * 467 * <p> 468 * This method is effectively ignored if {@link #enableSSL()} has not been called or the client connection manager 469 * has been defined via {@link #httpClientConnectionManager(HttpClientConnectionManager)}. 470 * 471 * @param trustManagers The trust managers. 472 * @return This object (for method chaining). 473 */ 474 public RestClientBuilder trustManagers(TrustManager...trustManagers) { 475 this.trustManagers = trustManagers; 476 return this; 477 } 478 479 /** 480 * Trust managers. 481 * 482 * <p> 483 * This is the value passed to the <code>random</code> parameter of the 484 * {@link SSLContext#init(KeyManager[],TrustManager[],SecureRandom)} method. 485 * 486 * <p> 487 * The default value is <jk>null</jk>. 488 * 489 * <p> 490 * This method is effectively ignored if {@link #enableSSL()} has not been called or the client connection manager 491 * has been defined via {@link #httpClientConnectionManager(HttpClientConnectionManager)}. 492 * 493 * @param secureRandom The random number generator. 494 * @return This object (for method chaining). 495 */ 496 public RestClientBuilder secureRandom(SecureRandom secureRandom) { 497 this.secureRandom = secureRandom; 498 return this; 499 } 500 501 /** 502 * Sets the client version by setting the value for the <js>"X-Client-Version"</js> header. 503 * 504 * @param version The version string (e.g. <js>"1.2.3"</js>) 505 * @return This object (for method chaining). 506 */ 507 public RestClientBuilder clientVersion(String version) { 508 return header("X-Client-Version", version); 509 } 510 511 /** 512 * Adds a {@link RestCallLogger} to the list of interceptors on this class. 513 * 514 * @param level The log level to log messages at. 515 * @param log The logger to log messages to. 516 * @return This object (for method chaining). 517 */ 518 public RestClientBuilder logTo(Level level, Logger log) { 519 return interceptors(new RestCallLogger(level, log)); 520 } 521 522 /** 523 * When called, the {@link #createConnectionManager()} method will return a {@link PoolingHttpClientConnectionManager} 524 * instead of a {@link BasicHttpClientConnectionManager}. 525 * 526 * @return This object (for method chaining). 527 */ 528 public RestClientBuilder pooled() { 529 this.pooled = true; 530 return this; 531 } 532 533 /** 534 * Set up this client to use BASIC auth. 535 * 536 * @param host The auth scope hostname. 537 * @param port The auth scope port. 538 * @param user The username. 539 * @param pw The password. 540 * @return This object (for method chaining). 541 */ 542 public RestClientBuilder basicAuth(String host, int port, String user, String pw) { 543 AuthScope scope = new AuthScope(host, port); 544 Credentials up = new UsernamePasswordCredentials(user, pw); 545 CredentialsProvider p = new BasicCredentialsProvider(); 546 p.setCredentials(scope, up); 547 defaultCredentialsProvider(p); 548 return this; 549 } 550 551 /** 552 * Sets the internal {@link HttpClient} to use for handling HTTP communications. 553 * 554 * @param httpClient The HTTP client. 555 * @param keepHttpClientOpen Don't close this client when the {@link RestClient#close()} method is called. 556 * @return This object (for method chaining). 557 */ 558 public RestClientBuilder httpClient(CloseableHttpClient httpClient, boolean keepHttpClientOpen) { 559 this.httpClient = httpClient; 560 set(RESTCLIENT_keepHttpClientOpen, keepHttpClientOpen); 561 return this; 562 } 563 564 /** 565 * Sets the internal {@link HttpClientConnectionManager}. 566 * 567 * @param httpClientConnectionManager The HTTP client connection manager. 568 * @return This object (for method chaining). 569 */ 570 public RestClientBuilder httpClientConnectionManager(HttpClientConnectionManager httpClientConnectionManager) { 571 this.httpClientConnectionManager = httpClientConnectionManager; 572 return this; 573 } 574 575 /** 576 * Sets a mock connection used to construct a connection manager for working against mocked REST interfaces. 577 * 578 * <h5 class='section'>See Also:</h5> 579 * <ul> 580 * <li class='link'>{@doc juneau-rest-client.UnitTesting} 581 * </ul> 582 * 583 * @param c The mock connection. 584 * @return This object (for method chaining). 585 */ 586 public RestClientBuilder mockHttpConnection(MockHttpConnection c) { 587 rootUrl("http://localhost"); 588 return httpClientConnectionManager(new MockHttpClientConnectionManager(c)); 589 } 590 591 592 //----------------------------------------------------------------------------------------------------------------- 593 // HTTP headers 594 //----------------------------------------------------------------------------------------------------------------- 595 596 /** 597 * Sets the value for the <code>Accept</code> request header. 598 * 599 * <p> 600 * This overrides the media type specified on the parser, but is overridden by calling 601 * <code>header(<js>"Accept"</js>, value);</code> 602 * 603 * @param value The new header value. 604 * @return This object (for method chaining). 605 */ 606 public RestClientBuilder accept(Object value) { 607 return header("Accept", value); 608 } 609 610 /** 611 * Sets the value for the <code>Accept-Charset</code> request header. 612 * 613 * <p> 614 * This is a shortcut for calling <code>header(<js>"Accept-Charset"</js>, value);</code> 615 * 616 * @param value The new header value. 617 * @return This object (for method chaining). 618 */ 619 public RestClientBuilder acceptCharset(Object value) { 620 return header("Accept-Charset", value); 621 } 622 623 /** 624 * Sets the value for the <code>Accept-Encoding</code> request header. 625 * 626 * <p> 627 * This is a shortcut for calling <code>header(<js>"Accept-Encoding"</js>, value);</code> 628 * 629 * @param value The new header value. 630 * @return This object (for method chaining). 631 */ 632 public RestClientBuilder acceptEncoding(Object value) { 633 return header("Accept-Encoding", value); 634 } 635 636 /** 637 * Sets the value for the <code>Accept-Language</code> request header. 638 * 639 * <p> 640 * This is a shortcut for calling <code>header(<js>"Accept-Language"</js>, value);</code> 641 * 642 * @param value The new header value. 643 * @return This object (for method chaining). 644 */ 645 public RestClientBuilder acceptLanguage(Object value) { 646 return header("Accept-Language", value); 647 } 648 649 /** 650 * Sets the value for the <code>Authorization</code> request header. 651 * 652 * <p> 653 * This is a shortcut for calling <code>header(<js>"Authorization"</js>, value);</code> 654 * 655 * @param value The new header value. 656 * @return This object (for method chaining). 657 */ 658 public RestClientBuilder authorization(Object value) { 659 return header("Authorization", value); 660 } 661 662 /** 663 * Sets the value for the <code>Cache-Control</code> request header. 664 * 665 * <p> 666 * This is a shortcut for calling <code>header(<js>"Cache-Control"</js>, value);</code> 667 * 668 * @param value The new header value. 669 * @return This object (for method chaining). 670 */ 671 public RestClientBuilder cacheControl(Object value) { 672 return header("Cache-Control", value); 673 } 674 675 /** 676 * Sets the value for the <code>Connection</code> request header. 677 * 678 * <p> 679 * This is a shortcut for calling <code>header(<js>"Connection"</js>, value);</code> 680 * 681 * @param value The new header value. 682 * @return This object (for method chaining). 683 */ 684 public RestClientBuilder connection(Object value) { 685 return header("Connection", value); 686 } 687 688 /** 689 * Sets the value for the <code>Content-Length</code> request header. 690 * 691 * <p> 692 * This is a shortcut for calling <code>header(<js>"Content-Length"</js>, value);</code> 693 * 694 * @param value The new header value. 695 * @return This object (for method chaining). 696 */ 697 public RestClientBuilder contentLength(Object value) { 698 return header("Content-Length", value); 699 } 700 701 /** 702 * Sets the value for the <code>Content-Type</code> request header. 703 * 704 * <p> 705 * This overrides the media type specified on the serializer, but is overridden by calling 706 * <code>header(<js>"Content-Type"</js>, value);</code> 707 * 708 * @param value The new header value. 709 * @return This object (for method chaining). 710 */ 711 public RestClientBuilder contentType(Object value) { 712 return header("Content-Type", value); 713 } 714 715 /** 716 * Sets the value for the <code>Date</code> request header. 717 * 718 * <p> 719 * This is a shortcut for calling <code>header(<js>"Date"</js>, value);</code> 720 * 721 * @param value The new header value. 722 * @return This object (for method chaining). 723 */ 724 public RestClientBuilder date(Object value) { 725 return header("Date", value); 726 } 727 728 /** 729 * Sets the value for the <code>Expect</code> request header. 730 * 731 * <p> 732 * This is a shortcut for calling <code>header(<js>"Expect"</js>, value);</code> 733 * 734 * @param value The new header value. 735 * @return This object (for method chaining). 736 */ 737 public RestClientBuilder expect(Object value) { 738 return header("Expect", value); 739 } 740 741 /** 742 * Sets the value for the <code>Forwarded</code> request header. 743 * 744 * <p> 745 * This is a shortcut for calling <code>header(<js>"Forwarded"</js>, value);</code> 746 * 747 * @param value The new header value. 748 * @return This object (for method chaining). 749 */ 750 public RestClientBuilder forwarded(Object value) { 751 return header("Forwarded", value); 752 } 753 754 /** 755 * Sets the value for the <code>From</code> request header. 756 * 757 * <p> 758 * This is a shortcut for calling <code>header(<js>"From"</js>, value);</code> 759 * 760 * @param value The new header value. 761 * @return This object (for method chaining). 762 */ 763 public RestClientBuilder from(Object value) { 764 return header("From", value); 765 } 766 767 /** 768 * Sets the value for the <code>Host</code> request header. 769 * 770 * <p> 771 * This is a shortcut for calling <code>header(<js>"Host"</js>, value);</code> 772 * 773 * @param value The new header value. 774 * @return This object (for method chaining). 775 */ 776 public RestClientBuilder host(Object value) { 777 return header("Host", value); 778 } 779 780 /** 781 * Sets the value for the <code>If-Match</code> request header. 782 * 783 * <p> 784 * This is a shortcut for calling <code>header(<js>"If-Match"</js>, value);</code> 785 * 786 * @param value The new header value. 787 * @return This object (for method chaining). 788 */ 789 public RestClientBuilder ifMatch(Object value) { 790 return header("If-Match", value); 791 } 792 793 /** 794 * Sets the value for the <code>If-Modified-Since</code> request header. 795 * 796 * <p> 797 * This is a shortcut for calling <code>header(<js>"If-Modified-Since"</js>, value);</code> 798 * 799 * @param value The new header value. 800 * @return This object (for method chaining). 801 */ 802 public RestClientBuilder ifModifiedSince(Object value) { 803 return header("If-Modified-Since", value); 804 } 805 806 /** 807 * Sets the value for the <code>If-None-Match</code> request header. 808 * 809 * <p> 810 * This is a shortcut for calling <code>header(<js>"If-None-Match"</js>, value);</code> 811 * 812 * @param value The new header value. 813 * @return This object (for method chaining). 814 */ 815 public RestClientBuilder ifNoneMatch(Object value) { 816 return header("If-None-Match", value); 817 } 818 819 /** 820 * Sets the value for the <code>If-Range</code> request header. 821 * 822 * <p> 823 * This is a shortcut for calling <code>header(<js>"If-Range"</js>, value);</code> 824 * 825 * @param value The new header value. 826 * @return This object (for method chaining). 827 */ 828 public RestClientBuilder ifRange(Object value) { 829 return header("If-Range", value); 830 } 831 832 /** 833 * Sets the value for the <code>If-Unmodified-Since</code> request header. 834 * 835 * <p> 836 * This is a shortcut for calling <code>header(<js>"If-Unmodified-Since"</js>, value);</code> 837 * 838 * @param value The new header value. 839 * @return This object (for method chaining). 840 */ 841 public RestClientBuilder ifUnmodifiedSince(Object value) { 842 return header("If-Unmodified-Since", value); 843 } 844 845 /** 846 * Sets the value for the <code>Max-Forwards</code> request header. 847 * 848 * <p> 849 * This is a shortcut for calling <code>header(<js>"Max-Forwards"</js>, value);</code> 850 * 851 * @param value The new header value. 852 * @return This object (for method chaining). 853 */ 854 public RestClientBuilder maxForwards(Object value) { 855 return header("If-Unmodified-Since", value); 856 } 857 858 /** 859 * When called, <code>No-Trace: true</code> is added to requests. 860 * 861 * <p> 862 * This gives the opportunity for the servlet to not log errors on invalid requests. 863 * This is useful for testing purposes when you don't want your log file to show lots of errors that are simply the 864 * results of testing. 865 * 866 * @return This object (for method chaining). 867 */ 868 public RestClientBuilder noTrace() { 869 return header("No-Trace", true); 870 } 871 872 /** 873 * Sets the value for the <code>Origin</code> request header. 874 * 875 * <p> 876 * This is a shortcut for calling <code>header(<js>"Origin"</js>, value);</code> 877 * 878 * @param value The new header value. 879 * @return This object (for method chaining). 880 */ 881 public RestClientBuilder origin(Object value) { 882 return header("If-Unmodified-Since", value); 883 } 884 885 /** 886 * Sets the value for the <code>Pragma</code> request header. 887 * 888 * <p> 889 * This is a shortcut for calling <code>header(<js>"Pragma"</js>, value);</code> 890 * 891 * @param value The new header value. 892 * @return This object (for method chaining). 893 */ 894 public RestClientBuilder pragma(Object value) { 895 return header("Pragma", value); 896 } 897 898 /** 899 * Sets the value for the <code>Proxy-Authorization</code> request header. 900 * 901 * <p> 902 * This is a shortcut for calling <code>header(<js>"Proxy-Authorization"</js>, value);</code> 903 * 904 * @param value The new header value. 905 * @return This object (for method chaining). 906 */ 907 public RestClientBuilder proxyAuthorization(Object value) { 908 return header("Proxy-Authorization", value); 909 } 910 911 /** 912 * Sets the value for the <code>Range</code> request header. 913 * 914 * <p> 915 * This is a shortcut for calling <code>header(<js>"Range"</js>, value);</code> 916 * 917 * @param value The new header value. 918 * @return This object (for method chaining). 919 */ 920 public RestClientBuilder range(Object value) { 921 return header("Range", value); 922 } 923 924 /** 925 * Sets the value for the <code>Referer</code> request header. 926 * 927 * <p> 928 * This is a shortcut for calling <code>header(<js>"Referer"</js>, value);</code> 929 * 930 * @param value The new header value. 931 * @return This object (for method chaining). 932 */ 933 public RestClientBuilder referer(Object value) { 934 return header("Referer", value); 935 } 936 937 /** 938 * Sets the value for the <code>TE</code> request header. 939 * 940 * <p> 941 * This is a shortcut for calling <code>header(<js>"TE"</js>, value);</code> 942 * 943 * @param value The new header value. 944 * @return This object (for method chaining). 945 */ 946 public RestClientBuilder te(Object value) { 947 return header("TE", value); 948 } 949 950 /** 951 * Sets the value for the <code>User-Agent</code> request header. 952 * 953 * <p> 954 * This is a shortcut for calling <code>header(<js>"User-Agent"</js>, value);</code> 955 * 956 * @param value The new header value. 957 * @return This object (for method chaining). 958 */ 959 public RestClientBuilder userAgent(Object value) { 960 return header("User-Agent", value); 961 } 962 963 /** 964 * Sets the value for the <code>Upgrade</code> request header. 965 * 966 * <p> 967 * This is a shortcut for calling <code>header(<js>"Upgrade"</js>, value);</code> 968 * 969 * @param value The new header value. 970 * @return This object (for method chaining). 971 */ 972 public RestClientBuilder upgrade(Object value) { 973 return header("Upgrade", value); 974 } 975 976 /** 977 * Sets the value for the <code>Via</code> request header. 978 * 979 * <p> 980 * This is a shortcut for calling <code>header(<js>"Via"</js>, value);</code> 981 * 982 * @param value The new header value. 983 * @return This object (for method chaining). 984 */ 985 public RestClientBuilder via(Object value) { 986 return header("Via", value); 987 } 988 989 /** 990 * Sets the value for the <code>Warning</code> request header. 991 * 992 * <p> 993 * This is a shortcut for calling <code>header(<js>"Warning"</js>, value);</code> 994 * 995 * @param value The new header value. 996 * @return This object (for method chaining). 997 */ 998 public RestClientBuilder warning(Object value) { 999 return header("Warning", value); 1000 } 1001 1002 1003 //----------------------------------------------------------------------------------------------------------------- 1004 // Properties 1005 //----------------------------------------------------------------------------------------------------------------- 1006 1007 /** 1008 * Configuration property: Executor service. 1009 * 1010 * <p> 1011 * Defines the executor service to use when calling future methods on the {@link RestCall} class. 1012 * 1013 * <p> 1014 * This executor service is used to create {@link Future} objects on the following methods: 1015 * <ul> 1016 * <li>{@link RestCall#runFuture()} 1017 * <li>{@link RestCall#getResponseFuture(Class)} 1018 * <li>{@link RestCall#getResponseFuture(Type,Type...)} 1019 * <li>{@link RestCall#getResponseAsString()} 1020 * </ul> 1021 * 1022 * <p> 1023 * The default executor service is a single-threaded {@link ThreadPoolExecutor} with a 30 second timeout 1024 * and a queue size of 10. 1025 * 1026 * <h5 class='section'>See Also:</h5> 1027 * <ul> 1028 * <li class='jf'>{@link RestClient#RESTCLIENT_executorService} 1029 * <li class='jf'>{@link RestClient#RESTCLIENT_executorServiceShutdownOnClose} 1030 * </ul> 1031 * 1032 * @param executorService The executor service. 1033 * @param shutdownOnClose Call {@link ExecutorService#shutdown()} when {@link RestClient#close()} is called. 1034 * @return This object (for method chaining). 1035 */ 1036 public RestClientBuilder executorService(ExecutorService executorService, boolean shutdownOnClose) { 1037 set(RESTCLIENT_executorService, executorService); 1038 set(RESTCLIENT_executorServiceShutdownOnClose, shutdownOnClose); 1039 return this; 1040 } 1041 1042 /** 1043 * Configuration property: Request headers. 1044 * 1045 * <h5 class='section'>See Also:</h5> 1046 * <ul> 1047 * <li class='jf'>{@link RestClient#RESTCLIENT_headers} 1048 * </ul> 1049 * 1050 * @param key The header name. 1051 * @param value The header value. 1052 * @return This object (for method chaining). 1053 */ 1054 public RestClientBuilder header(String key, Object value) { 1055 return addTo(RESTCLIENT_headers, key, value); 1056 } 1057 1058 /** 1059 * Configuration property: Keep HttpClient open. 1060 * 1061 * <p> 1062 * Don't close this client when the {@link RestClient#close()} method is called. 1063 * 1064 * <h5 class='section'>See Also:</h5> 1065 * <ul> 1066 * <li class='jf'>{@link RestClient#RESTCLIENT_keepHttpClientOpen} 1067 * </ul> 1068 * 1069 * @param value 1070 * The new value for this property. 1071 * <br>The default value is <jk>false</jk>. 1072 * @return This object (for method chaining). 1073 */ 1074 public RestClientBuilder keepHttpClientOpen(boolean value) { 1075 return set(RESTCLIENT_keepHttpClientOpen, value); 1076 } 1077 1078 /** 1079 * Configuration property: Call interceptors. 1080 * 1081 * <p> 1082 * Adds an interceptor that gets called immediately after a connection is made. 1083 * 1084 * <h5 class='section'>See Also:</h5> 1085 * <ul> 1086 * <li class='jf'>{@link RestClient#RESTCLIENT_interceptors} 1087 * </ul> 1088 * 1089 * @param value The values to add to this setting. 1090 * @return This object (for method chaining). 1091 */ 1092 public RestClientBuilder interceptors(RestCallInterceptor...value) { 1093 return addTo(RESTCLIENT_interceptors, value); 1094 } 1095 1096 /** 1097 * Configuration property: Parser. 1098 * 1099 * <p> 1100 * The parser to use for parsing POJOs in response bodies. 1101 * 1102 * <h5 class='section'>See Also:</h5> 1103 * <ul> 1104 * <li class='jf'>{@link RestClient#RESTCLIENT_parser} 1105 * </ul> 1106 * 1107 * @param value 1108 * The new value for this setting. 1109 * <br>The default value is {@link JsonParser#DEFAULT}. 1110 * @return This object (for method chaining). 1111 */ 1112 public RestClientBuilder parser(Class<? extends Parser> value) { 1113 return set(RESTCLIENT_parser, value); 1114 } 1115 1116 /** 1117 * Configuration property: Parser. 1118 * 1119 * <p> 1120 * Same as {@link #parser(Parser)} except takes in a parser instance. 1121 * 1122 * <h5 class='section'>See Also:</h5> 1123 * <ul> 1124 * <li class='jf'>{@link RestClient#RESTCLIENT_parser} 1125 * </ul> 1126 * 1127 * @param value 1128 * The new value for this setting. 1129 * <br>The default value is {@link JsonParser#DEFAULT}. 1130 * @return This object (for method chaining). 1131 */ 1132 public RestClientBuilder parser(Parser value) { 1133 return set(RESTCLIENT_parser, value); 1134 } 1135 1136 /** 1137 * Configuration property: Part parser. 1138 * 1139 * <p> 1140 * The parser to use for parsing POJOs from form data, query parameters, headers, and path variables. 1141 * 1142 * <h5 class='section'>See Also:</h5> 1143 * <ul> 1144 * <li class='jf'>{@link RestClient#RESTCLIENT_partParser} 1145 * </ul> 1146 * 1147 * @param value 1148 * The new value for this setting. 1149 * <br>The default value is {@link OpenApiParser}. 1150 * @return This object (for method chaining). 1151 */ 1152 public RestClientBuilder partParser(Class<? extends HttpPartParser> value) { 1153 return set(RESTCLIENT_partParser, value); 1154 } 1155 1156 /** 1157 * Configuration property: Part parser. 1158 * 1159 * <p> 1160 * Same as {@link #partParser(Class)} but takes in a parser instance. 1161 * 1162 * <h5 class='section'>See Also:</h5> 1163 * <ul> 1164 * <li class='jf'>{@link RestClient#RESTCLIENT_partParser} 1165 * </ul> 1166 * 1167 * @param value 1168 * The new value for this setting. 1169 * <br>The default value is {@link OpenApiParser}. 1170 * @return This object (for method chaining). 1171 */ 1172 public RestClientBuilder partParser(HttpPartParser value) { 1173 return set(RESTCLIENT_partParser, value); 1174 } 1175 1176 /** 1177 * Configuration property: Part serializer. 1178 * 1179 * <p> 1180 * The serializer to use for serializing POJOs in form data, query parameters, headers, and path variables. 1181 * 1182 * <h5 class='section'>See Also:</h5> 1183 * <ul> 1184 * <li class='jf'>{@link RestClient#RESTCLIENT_partSerializer} 1185 * </ul> 1186 * 1187 * @param value 1188 * The new value for this setting. 1189 * <br>The default value is {@link OpenApiSerializer}. 1190 * @return This object (for method chaining). 1191 */ 1192 public RestClientBuilder partSerializer(Class<? extends HttpPartSerializer> value) { 1193 return set(RESTCLIENT_partSerializer, value); 1194 } 1195 1196 /** 1197 * Configuration property: Part serializer. 1198 * 1199 * <p> 1200 * Same as {@link #partSerializer(Class)} but takes in a parser instance. 1201 * 1202 * <h5 class='section'>See Also:</h5> 1203 * <ul> 1204 * <li class='jf'>{@link RestClient#RESTCLIENT_partSerializer} 1205 * </ul> 1206 * 1207 * @param value 1208 * The new value for this setting. 1209 * <br>The default value is {@link OpenApiSerializer}. 1210 * @return This object (for method chaining). 1211 */ 1212 public RestClientBuilder partSerializer(HttpPartSerializer value) { 1213 return set(RESTCLIENT_partSerializer, value); 1214 } 1215 1216 /** 1217 * Make HTTP calls retryable if an error response (>=400) is received. 1218 * 1219 * <h5 class='section'>See Also:</h5> 1220 * <ul> 1221 * <li class='jf'>{@link RestClient#RESTCLIENT_retries} 1222 * <li class='jf'>{@link RestClient#RESTCLIENT_retryInterval} 1223 * <li class='jf'>{@link RestClient#RESTCLIENT_retryOn} 1224 * </ul> 1225 * 1226 * @param retries The number of retries to attempt. 1227 * @param interval The time in milliseconds between attempts. 1228 * @param retryOn 1229 * Optional object used for determining whether a retry should be attempted. 1230 * If <jk>null</jk>, uses {@link RetryOn#DEFAULT}. 1231 * @return This object (for method chaining). 1232 */ 1233 public RestClientBuilder retryable(int retries, int interval, RetryOn retryOn) { 1234 set(RESTCLIENT_retries, retries); 1235 set(RESTCLIENT_retryInterval, interval); 1236 set(RESTCLIENT_retryOn, retryOn); 1237 return this; 1238 } 1239 1240 /** 1241 * Configuration property: Root URI. 1242 * 1243 * <p> 1244 * When set, relative URL strings passed in through the various rest call methods (e.g. {@link RestClient#doGet(Object)} 1245 * will be prefixed with the specified root. 1246 * <br>This root URL is ignored on those methods if you pass in a {@link URL}, {@link URI}, or an absolute URL string. 1247 * 1248 * <h5 class='section'>See Also:</h5> 1249 * <ul> 1250 * <li class='jf'>{@link RestClient#RESTCLIENT_rootUri} 1251 * </ul> 1252 * 1253 * @param value 1254 * The root URL to prefix to relative URL strings. 1255 * <br>Trailing slashes are trimmed. 1256 * <br>Usually a <code>String</code> but you can also pass in <code>URI</code> and <code>URL</code> objects as well. 1257 * @return This object (for method chaining). 1258 */ 1259 public RestClientBuilder rootUrl(Object value) { 1260 return set(RESTCLIENT_rootUri, value); 1261 } 1262 1263 /** 1264 * Configuration property: Request query parameters. 1265 * 1266 * <h5 class='section'>See Also:</h5> 1267 * <ul> 1268 * <li class='jf'>{@link RestClient#RESTCLIENT_query} 1269 * </ul> 1270 * 1271 * @param key The query parameter name. 1272 * @param value The query parameter value value. 1273 * @return This object (for method chaining). 1274 */ 1275 public RestClientBuilder query(String key, Object value) { 1276 return addTo(RESTCLIENT_query, key, value); 1277 } 1278 1279 /** 1280 * Configuration property: Serializer. 1281 * 1282 * <p> 1283 * The serializer to use for serializing POJOs in request bodies. 1284 * 1285 * <h5 class='section'>See Also:</h5> 1286 * <ul> 1287 * <li class='jf'>{@link RestClient#RESTCLIENT_serializer} 1288 * </ul> 1289 * 1290 * @param value 1291 * The new value for this setting. 1292 * <br>The default is {@link JsonSerializer}. 1293 * @return This object (for method chaining). 1294 */ 1295 public RestClientBuilder serializer(Class<? extends Serializer> value) { 1296 return set(RESTCLIENT_serializer, value); 1297 } 1298 1299 /** 1300 * Configuration property: Serializer. 1301 * 1302 * <p> 1303 * Same as {@link #serializer(Class)} but takes in a serializer instance. 1304 * 1305 * <h5 class='section'>See Also:</h5> 1306 * <ul> 1307 * <li class='jf'>{@link RestClient#RESTCLIENT_serializer} 1308 * </ul> 1309 * 1310 * @param value 1311 * The new value for this setting. 1312 * <br>The default is {@link JsonSerializer}. 1313 * @return This object (for method chaining). 1314 */ 1315 public RestClientBuilder serializer(Serializer value) { 1316 return set(RESTCLIENT_serializer, value); 1317 } 1318 1319 /** 1320 * Configuration property: Add <js>"_type"</js> properties when needed. 1321 * 1322 * <p> 1323 * If <jk>true</jk>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred 1324 * through reflection. 1325 * 1326 * <h5 class='section'>See Also:</h5> 1327 * <ul> 1328 * <li class='jf'>{@link Serializer#SERIALIZER_addBeanTypes} 1329 * </ul> 1330 * 1331 * @param value 1332 * The new value for this property. 1333 * <br>The default is <jk>false</jk>. 1334 * @return This object (for method chaining). 1335 */ 1336 public RestClientBuilder addBeanTypes(boolean value) { 1337 return set(SERIALIZER_addBeanTypes, value); 1338 } 1339 1340 /** 1341 * Configuration property: Add <js>"_type"</js> properties when needed. 1342 * 1343 * <p> 1344 * Shortcut for calling <code>addBeanTypes(<jk>true</jk>)</code>. 1345 * 1346 * <h5 class='section'>See Also:</h5> 1347 * <ul> 1348 * <li class='jf'>{@link Serializer#SERIALIZER_addBeanTypes} 1349 * </ul> 1350 * 1351 * @return This object (for method chaining). 1352 */ 1353 public RestClientBuilder addBeanTypes() { 1354 return set(SERIALIZER_addBeanTypes, true); 1355 } 1356 1357 /** 1358 * Configuration property: Add type attribute to root nodes. 1359 * 1360 * <p> 1361 * When disabled, it is assumed that the parser knows the exact Java POJO type being parsed, and therefore top-level 1362 * type information that might normally be included to determine the data type will not be serialized. 1363 * 1364 * <h5 class='section'>See Also:</h5> 1365 * <ul> 1366 * <li class='jf'>{@link Serializer#SERIALIZER_addRootType} 1367 * </ul> 1368 * 1369 * @param value 1370 * The new value for this property. 1371 * <br>The default is <jk>false</jk>. 1372 * @return This object (for method chaining). 1373 */ 1374 public RestClientBuilder addRootType(boolean value) { 1375 return set(SERIALIZER_addRootType, value); 1376 } 1377 1378 /** 1379 * Configuration property: Add type attribute to root nodes. 1380 * 1381 * <p> 1382 * Shortcut for calling <code>addRootType(<jk>true</jk>)</code>. 1383 * 1384 * <h5 class='section'>See Also:</h5> 1385 * <ul> 1386 * <li class='jf'>{@link Serializer#SERIALIZER_addRootType} 1387 * </ul> 1388 * 1389 * @return This object (for method chaining). 1390 */ 1391 public RestClientBuilder addRootType() { 1392 return set(SERIALIZER_addRootType, true); 1393 } 1394 1395 /** 1396 * Configuration property: Automatically detect POJO recursions. 1397 * 1398 * <p> 1399 * Specifies that recursions should be checked for during serialization. 1400 * 1401 * <h5 class='section'>Notes:</h5> 1402 * <ul class='spaced-list'> 1403 * <li> 1404 * Checking for recursion can cause a small performance penalty. 1405 * </ul> 1406 * 1407 * <h5 class='section'>See Also:</h5> 1408 * <ul> 1409 * <li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_detectRecursions} 1410 * </ul> 1411 * 1412 * @param value 1413 * The new value for this property. 1414 * <br>The default is <jk>false</jk>. 1415 * @return This object (for method chaining). 1416 */ 1417 public RestClientBuilder detectRecursions(boolean value) { 1418 return set(BEANTRAVERSE_detectRecursions, value); 1419 } 1420 1421 /** 1422 * Configuration property: Automatically detect POJO recursions. 1423 * 1424 * <p> 1425 * Shortcut for calling <code>detectRecursions(<jk>true</jk>)</code>. 1426 * 1427 * <h5 class='section'>See Also:</h5> 1428 * <ul> 1429 * <li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_detectRecursions} 1430 * </ul> 1431 * 1432 * @return This object (for method chaining). 1433 */ 1434 public RestClientBuilder detectRecursions() { 1435 return set(BEANTRAVERSE_detectRecursions, true); 1436 } 1437 1438 /** 1439 * Configuration property: Ignore recursion errors. 1440 * 1441 * <p> 1442 * If <jk>true</jk>, when we encounter the same object when serializing a tree, we set the value to <jk>null</jk>. 1443 * Otherwise, an exception is thrown. 1444 * 1445 * <h5 class='section'>Notes:</h5> 1446 * <ul class='spaced-list'> 1447 * <li> 1448 * Checking for recursion can cause a small performance penalty. 1449 * </ul> 1450 * 1451 * <h5 class='section'>See Also:</h5> 1452 * <ul> 1453 * <li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_ignoreRecursions} 1454 * </ul> 1455 * 1456 * @param value 1457 * The new value for this property. 1458 * <br>The default is <jk>false</jk>. 1459 * @return This object (for method chaining). 1460 */ 1461 public RestClientBuilder ignoreRecursions(boolean value) { 1462 return set(BEANTRAVERSE_ignoreRecursions, value); 1463 } 1464 1465 /** 1466 * Configuration property: Ignore recursion errors. 1467 * 1468 * <p> 1469 * Shortcut for calling <code>ignoreRecursions(<jk>true</jk>)</code>. 1470 * 1471 * <h5 class='section'>See Also:</h5> 1472 * <ul> 1473 * <li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_ignoreRecursions} 1474 * </ul> 1475 * 1476 * @return This object (for method chaining). 1477 */ 1478 public RestClientBuilder ignoreRecursions() { 1479 return set(BEANTRAVERSE_ignoreRecursions, true); 1480 } 1481 1482 /** 1483 * Configuration property: Initial depth. 1484 * 1485 * <p> 1486 * The initial indentation level at the root. 1487 * 1488 * <h5 class='section'>See Also:</h5> 1489 * <ul> 1490 * <li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_initialDepth} 1491 * </ul> 1492 * 1493 * @param value 1494 * The new value for this property. 1495 * <br>The default is <code>0</code>. 1496 * @return This object (for method chaining). 1497 */ 1498 public RestClientBuilder initialDepth(int value) { 1499 return set(BEANTRAVERSE_initialDepth, value); 1500 } 1501 1502 /** 1503 * Configuration property: Serializer listener. 1504 * 1505 * <p> 1506 * Class used to listen for errors and warnings that occur during serialization. 1507 * 1508 * <h5 class='section'>See Also:</h5> 1509 * <ul> 1510 * <li class='jf'>{@link Serializer#SERIALIZER_listener} 1511 * </ul> 1512 * 1513 * @param value 1514 * The new value for this property. 1515 * @return This object (for method chaining). 1516 */ 1517 public RestClientBuilder listenerS(Class<? extends SerializerListener> value) { 1518 return set(SERIALIZER_listener, value); 1519 } 1520 1521 /** 1522 * Configuration property: Max serialization depth. 1523 * 1524 * <p> 1525 * Abort serialization if specified depth is reached in the POJO tree. 1526 * <br>If this depth is exceeded, an exception is thrown. 1527 * <br>This prevents stack overflows from occurring when trying to serialize models with recursive references. 1528 * 1529 * <h5 class='section'>See Also:</h5> 1530 * <ul> 1531 * <li class='jf'>{@link BeanTraverseContext#BEANTRAVERSE_maxDepth} 1532 * </ul> 1533 * 1534 * @param value 1535 * The new value for this property. 1536 * <br>The default is <code>100</code>. 1537 * @return This object (for method chaining). 1538 */ 1539 public RestClientBuilder maxDepth(int value) { 1540 return set(BEANTRAVERSE_maxDepth, value); 1541 } 1542 1543 /** 1544 * Configuration property: Sort arrays and collections alphabetically. 1545 * 1546 * <p> 1547 * Copies and sorts the contents of arrays and collections before serializing them. 1548 * 1549 * <h5 class='section'>See Also:</h5> 1550 * <ul> 1551 * <li class='jf'>{@link Serializer#SERIALIZER_sortCollections} 1552 * </ul> 1553 * 1554 * @param value 1555 * The new value for this property. 1556 * <br>The default is <jk>false</jk>. 1557 * @return This object (for method chaining). 1558 */ 1559 public RestClientBuilder sortCollections(boolean value) { 1560 return set(SERIALIZER_sortCollections, value); 1561 } 1562 1563 /** 1564 * Configuration property: Sort arrays and collections alphabetically. 1565 * 1566 * <p> 1567 * Shortcut for calling <code>sortCollections(<jk>true</jk>)</code>. 1568 * 1569 * <h5 class='section'>See Also:</h5> 1570 * <ul> 1571 * <li class='jf'>{@link Serializer#SERIALIZER_sortCollections} 1572 * </ul> 1573 * 1574 * @return This object (for method chaining). 1575 */ 1576 public RestClientBuilder sortCollections() { 1577 return set(SERIALIZER_sortCollections, true); 1578 } 1579 1580 /** 1581 * Sets the {@link Serializer#SERIALIZER_sortMaps} property on all serializers in this group. 1582 * 1583 * <p> 1584 * Copies and sorts the contents of maps before serializing them. 1585 * 1586 * <h5 class='section'>See Also:</h5> 1587 * <ul> 1588 * <li class='jf'>{@link Serializer#SERIALIZER_sortMaps} 1589 * </ul> 1590 * 1591 * @param value The new value for this property. 1592 * @return This object (for method chaining). 1593 */ 1594 public RestClientBuilder sortMaps(boolean value) { 1595 return set(SERIALIZER_sortMaps, value); 1596 } 1597 1598 /** 1599 * Configuration property: Sort maps alphabetically. 1600 * 1601 * <p> 1602 * Shortcut for calling <code>sortMaps(<jk>true</jk>)</code>. 1603 * 1604 * <h5 class='section'>See Also:</h5> 1605 * <ul> 1606 * <li class='jf'>{@link Serializer#SERIALIZER_sortMaps} 1607 * </ul> 1608 * 1609 * @return This object (for method chaining). 1610 */ 1611 public RestClientBuilder sortMaps() { 1612 return set(SERIALIZER_sortMaps, true); 1613 } 1614 1615 /** 1616 * Configuration property: Trim empty lists and arrays. 1617 * 1618 * <p> 1619 * If <jk>true</jk>, empty list values will not be serialized to the output. 1620 * 1621 * <h5 class='section'>See Also:</h5> 1622 * <ul> 1623 * <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyCollections} 1624 * </ul> 1625 * 1626 * @param value 1627 * The new value for this property. 1628 * <br>The default is <jk>false</jk>. 1629 * @return This object (for method chaining). 1630 */ 1631 public RestClientBuilder trimEmptyCollections(boolean value) { 1632 return set(SERIALIZER_trimEmptyCollections, value); 1633 } 1634 1635 /** 1636 * Configuration property: Trim empty lists and arrays. 1637 * 1638 * <p> 1639 * Shortcut for calling <code>trimEmptyCollections(<jk>true</jk>)</code>. 1640 * 1641 * <h5 class='section'>See Also:</h5> 1642 * <ul> 1643 * <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyCollections} 1644 * </ul> 1645 * 1646 * @return This object (for method chaining). 1647 */ 1648 public RestClientBuilder trimEmptyCollections() { 1649 return set(SERIALIZER_trimEmptyCollections, true); 1650 } 1651 1652 /** 1653 * Configuration property: Trim empty maps. 1654 * 1655 * <p> 1656 * If <jk>true</jk>, empty map values will not be serialized to the output. 1657 * 1658 * <h5 class='section'>See Also:</h5> 1659 * <ul> 1660 * <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyMaps} 1661 * </ul> 1662 * 1663 * @param value 1664 * The new value for this property. 1665 * <br>The default is <jk>false</jk>. 1666 * @return This object (for method chaining). 1667 */ 1668 public RestClientBuilder trimEmptyMaps(boolean value) { 1669 return set(SERIALIZER_trimEmptyMaps, value); 1670 } 1671 1672 /** 1673 * Configuration property: Trim empty maps. 1674 * 1675 * <p> 1676 * Shortcut for calling <code>trimEmptyMaps(<jk>true</jk>)</code>. 1677 * 1678 * <h5 class='section'>See Also:</h5> 1679 * <ul> 1680 * <li class='jf'>{@link Serializer#SERIALIZER_trimEmptyMaps} 1681 * </ul> 1682 * 1683 * @return This object (for method chaining). 1684 */ 1685 public RestClientBuilder trimEmptyMaps() { 1686 return set(SERIALIZER_trimEmptyMaps, true); 1687 } 1688 1689 /** 1690 * Configuration property: Trim null bean property values. 1691 * 1692 * <p> 1693 * If <jk>true</jk>, null bean values will not be serialized to the output. 1694 * 1695 * <h5 class='section'>See Also:</h5> 1696 * <ul> 1697 * <li class='jf'>{@link Serializer#SERIALIZER_trimNullProperties} 1698 * </ul> 1699 * 1700 * @param value 1701 * The new value for this property. 1702 * <br>The default is <jk>true</jk>. 1703 * @return This object (for method chaining). 1704 */ 1705 public RestClientBuilder trimNullProperties(boolean value) { 1706 return set(SERIALIZER_trimNullProperties, value); 1707 } 1708 1709 /** 1710 * Configuration property: Trim strings. 1711 * 1712 * <p> 1713 * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being serialized. 1714 * 1715 * <h5 class='section'>See Also:</h5> 1716 * <ul> 1717 * <li class='jf'>{@link Serializer#SERIALIZER_trimStrings} 1718 * </ul> 1719 * 1720 * @param value 1721 * The new value for this property. 1722 * <br>The default is <jk>false</jk>. 1723 * @return This object (for method chaining). 1724 */ 1725 public RestClientBuilder trimStringsS(boolean value) { 1726 return set(SERIALIZER_trimStrings, value); 1727 } 1728 1729 /** 1730 * Configuration property: Trim strings. 1731 * 1732 * <p> 1733 * Shortcut for calling <code>trimStrings(<jk>true</jk>)</code>. 1734 * 1735 * <h5 class='section'>See Also:</h5> 1736 * <ul> 1737 * <li class='jf'>{@link Serializer#SERIALIZER_trimStrings} 1738 * </ul> 1739 * 1740 * @return This object (for method chaining). 1741 */ 1742 public RestClientBuilder trimStringsS() { 1743 return set(SERIALIZER_trimStrings, true); 1744 } 1745 1746 /** 1747 * Configuration property: URI context bean. 1748 * 1749 * <p> 1750 * Bean used for resolution of URIs to absolute or root-relative form. 1751 * 1752 * <h5 class='section'>See Also:</h5> 1753 * <ul> 1754 * <li class='jf'>{@link Serializer#SERIALIZER_uriContext} 1755 * </ul> 1756 * 1757 * @param value The new value for this property. 1758 * @return This object (for method chaining). 1759 */ 1760 public RestClientBuilder uriContext(UriContext value) { 1761 return set(SERIALIZER_uriContext, value); 1762 } 1763 1764 /** 1765 * Configuration property: URI relativity. 1766 * 1767 * <p> 1768 * Defines what relative URIs are relative to when serializing URI/URL objects. 1769 * 1770 * <h5 class='section'>See Also:</h5> 1771 * <ul> 1772 * <li class='jf'>{@link Serializer#SERIALIZER_uriRelativity} 1773 * </ul> 1774 * 1775 * @param value 1776 * The new value for this property. 1777 * <br>The default is {@link UriRelativity#RESOURCE} 1778 * @return This object (for method chaining). 1779 */ 1780 public RestClientBuilder uriRelativity(UriRelativity value) { 1781 return set(SERIALIZER_uriRelativity, value); 1782 } 1783 1784 /** 1785 * Configuration property: URI resolution. 1786 * 1787 * <p> 1788 * Defines the resolution level for URIs when serializing URI/URL objects. 1789 * 1790 * <h5 class='section'>See Also:</h5> 1791 * <ul> 1792 * <li class='jf'>{@link Serializer#SERIALIZER_uriResolution} 1793 * </ul> 1794 * 1795 * @param value 1796 * The new value for this property. 1797 * <br>The default is {@link UriResolution#NONE} 1798 * @return This object (for method chaining). 1799 */ 1800 public RestClientBuilder uriResolution(UriResolution value) { 1801 return set(SERIALIZER_uriResolution, value); 1802 } 1803 1804 /** 1805 * Configuration property: Maximum indentation. 1806 * 1807 * <p> 1808 * Specifies the maximum indentation level in the serialized document. 1809 * 1810 * <h5 class='section'>See Also:</h5> 1811 * <ul> 1812 * <li class='jf'>{@link WriterSerializer#WSERIALIZER_maxIndent} 1813 * </ul> 1814 * 1815 * @param value 1816 * The new value for this property. 1817 * <br>The default is <code>100</code>. 1818 * @return This object (for method chaining). 1819 */ 1820 public RestClientBuilder maxIndent(int value) { 1821 return set(WSERIALIZER_maxIndent, value); 1822 } 1823 1824 /** 1825 * Configuration property: Quote character. 1826 * 1827 * <p> 1828 * This is the character used for quoting attributes and values. 1829 * 1830 * <h5 class='section'>See Also:</h5> 1831 * <ul> 1832 * <li class='jf'>{@link WriterSerializer#WSERIALIZER_quoteChar} 1833 * </ul> 1834 * 1835 * @param value 1836 * The new value for this property. 1837 * <br>The default is <js>'"'</js>. 1838 * @return This object (for method chaining). 1839 */ 1840 public RestClientBuilder quoteChar(char value) { 1841 return set(WSERIALIZER_quoteChar, value); 1842 } 1843 1844 /** 1845 * Configuration property: Quote character. 1846 * 1847 * <p> 1848 * Shortcut for calling <code>quoteChar(<js>'\''</js>)</code>. 1849 * 1850 * <h5 class='section'>See Also:</h5> 1851 * <ul> 1852 * <li class='jf'>{@link WriterSerializer#WSERIALIZER_quoteChar} 1853 * </ul> 1854 * 1855 * @return This object (for method chaining). 1856 */ 1857 public RestClientBuilder sq() { 1858 return set(WSERIALIZER_quoteChar, '\''); 1859 } 1860 1861 /** 1862 * Configuration property: Use whitespace. 1863 * 1864 * <p> 1865 * If <jk>true</jk>, newlines and indentation and spaces are added to the output to improve readability. 1866 * 1867 * <h5 class='section'>See Also:</h5> 1868 * <ul> 1869 * <li class='jf'>{@link Serializer#SERIALIZER_useWhitespace} 1870 * </ul> 1871 * 1872 * @param value 1873 * The new value for this property. 1874 * <br>The default is <jk>false</jk>. 1875 * @return This object (for method chaining). 1876 */ 1877 public RestClientBuilder useWhitespace(boolean value) { 1878 return set(SERIALIZER_useWhitespace, value); 1879 } 1880 1881 /** 1882 * Configuration property: Use whitespace. 1883 * 1884 * <p> 1885 * Shortcut for calling <code>useWhitespace(<jk>true</jk>)</code>. 1886 * 1887 * <h5 class='section'>See Also:</h5> 1888 * <ul> 1889 * <li class='jf'>{@link Serializer#SERIALIZER_useWhitespace} 1890 * </ul> 1891 * @return This object (for method chaining). 1892 */ 1893 public RestClientBuilder useWhitespace() { 1894 return set(SERIALIZER_useWhitespace, true); 1895 } 1896 1897 /** 1898 * Configuration property: Use whitespace. 1899 * 1900 * <p> 1901 * Shortcut for calling <code>useWhitespace(<jk>true</jk>)</code>. 1902 * 1903 * <h5 class='section'>See Also:</h5> 1904 * <ul> 1905 * <li class='jf'>{@link Serializer#SERIALIZER_useWhitespace} 1906 * </ul> 1907 * 1908 * @return This object (for method chaining). 1909 */ 1910 public RestClientBuilder ws() { 1911 return set(SERIALIZER_useWhitespace, true); 1912 } 1913 1914 /** 1915 * Configuration property: Binary string format. 1916 * 1917 * <p> 1918 * When using the {@link Serializer#serializeToString(Object)} method on stream-based serializers, this defines the format to use 1919 * when converting the resulting byte array to a string. 1920 * 1921 * <ul> 1922 * <li class='jf'>{@link OutputStreamSerializer#OSSERIALIZER_binaryFormat} 1923 * </ul> 1924 * 1925 * @param value 1926 * The new value for this property. 1927 * <br>The default is {@link BinaryFormat#HEX}. 1928 * @return This object (for method chaining). 1929 */ 1930 public RestClientBuilder binaryOutputFormat(BinaryFormat value) { 1931 return set(OSSERIALIZER_binaryFormat, value); 1932 } 1933 1934 /** 1935 * Configuration property: Auto-close streams. 1936 * 1937 * If <jk>true</jk>, <l>InputStreams</l> and <l>Readers</l> passed into parsers will be closed 1938 * after parsing is complete. 1939 * 1940 * <h5 class='section'>See Also:</h5> 1941 * <ul> 1942 * <li class='jf'>{@link Parser#PARSER_autoCloseStreams} 1943 * </ul> 1944 * 1945 * @param value 1946 * The new value for this property. 1947 * <br>The default value is <jk>false</jk>. 1948 * @return This object (for method chaining). 1949 */ 1950 public RestClientBuilder autoCloseStreams(boolean value) { 1951 return set(PARSER_autoCloseStreams, value); 1952 } 1953 1954 /** 1955 * Configuration property: Auto-close streams. 1956 * 1957 * <p> 1958 * Shortcut for calling <code>autoCloseStreams(<jk>true</jk>)</code>. 1959 * 1960 * <h5 class='section'>See Also:</h5> 1961 * <ul> 1962 * <li class='jf'>{@link Parser#PARSER_autoCloseStreams} 1963 * </ul> 1964 * 1965 * @return This object (for method chaining). 1966 */ 1967 public RestClientBuilder autoCloseStreams() { 1968 return set(PARSER_autoCloseStreams, true); 1969 } 1970 1971 /** 1972 * Configuration property: Debug output lines. 1973 * 1974 * When parse errors occur, this specifies the number of lines of input before and after the 1975 * error location to be printed as part of the exception message. 1976 * 1977 * <h5 class='section'>See Also:</h5> 1978 * <ul> 1979 * <li class='jf'>{@link Parser#PARSER_debugOutputLines} 1980 * </ul> 1981 * 1982 * @param value 1983 * The new value for this property. 1984 * <br>The default value is <code>5</code>. 1985 * @return This object (for method chaining). 1986 */ 1987 public RestClientBuilder debugOutputLines(int value) { 1988 set(PARSER_debugOutputLines, value); 1989 return this; 1990 } 1991 1992 /** 1993 * Configuration property: Parser listener. 1994 * 1995 * <p> 1996 * Class used to listen for errors and warnings that occur during parsing. 1997 * 1998 * <h5 class='section'>See Also:</h5> 1999 * <ul> 2000 * <li class='jf'>{@link Parser#PARSER_listener} 2001 * </ul> 2002 * 2003 * @param value The new value for this property. 2004 * @return This object (for method chaining). 2005 */ 2006 public RestClientBuilder listenerP(Class<? extends ParserListener> value) { 2007 return set(PARSER_listener, value); 2008 } 2009 2010 /** 2011 * Configuration property: Strict mode. 2012 * 2013 * <p> 2014 * If <jk>true</jk>, strict mode for the parser is enabled. 2015 * 2016 * <h5 class='section'>See Also:</h5> 2017 * <ul> 2018 * <li class='jf'>{@link Parser#PARSER_strict} 2019 * </ul> 2020 * 2021 * @param value 2022 * The new value for this property. 2023 * <br>The default value is <jk>false</jk>. 2024 * @return This object (for method chaining). 2025 */ 2026 public RestClientBuilder strict(boolean value) { 2027 return set(PARSER_strict, value); 2028 } 2029 2030 /** 2031 * Configuration property: Strict mode. 2032 * 2033 * <p> 2034 * Shortcut for calling <code>strict(<jk>true</jk>)</code>. 2035 * 2036 * <h5 class='section'>See Also:</h5> 2037 * <ul> 2038 * <li class='jf'>{@link Parser#PARSER_strict} 2039 * </ul> 2040 * 2041 * @return This object (for method chaining). 2042 */ 2043 public RestClientBuilder strict() { 2044 return set(PARSER_strict, true); 2045 } 2046 2047 /** 2048 * Configuration property: Trim parsed strings. 2049 * 2050 * <p> 2051 * If <jk>true</jk>, string values will be trimmed of whitespace using {@link String#trim()} before being added to 2052 * the POJO. 2053 * 2054 * <h5 class='section'>See Also:</h5> 2055 * <ul> 2056 * <li class='jf'>{@link Parser#PARSER_trimStrings} 2057 * </ul> 2058 * 2059 * @param value 2060 * The new value for this property. 2061 * <br>The default value is <jk>false</jk>. 2062 * @return This object (for method chaining). 2063 */ 2064 public RestClientBuilder trimStringsP(boolean value) { 2065 return set(PARSER_trimStrings, value); 2066 } 2067 2068 /** 2069 * Configuration property: Trim parsed strings. 2070 * 2071 * <p> 2072 * Shortcut for calling <code>trimStrings(<jk>true</jk>)</code>. 2073 * 2074 * <h5 class='section'>See Also:</h5> 2075 * <ul> 2076 * <li class='jf'>{@link Parser#PARSER_trimStrings} 2077 * </ul> 2078 * 2079 * @return This object (for method chaining). 2080 */ 2081 public RestClientBuilder trimStringsP() { 2082 return set(PARSER_trimStrings, true); 2083 } 2084 2085 /** 2086 * Configuration property: Unbuffered. 2087 * 2088 * If <jk>true</jk>, don't use internal buffering during parsing. 2089 * 2090 * <h5 class='section'>See Also:</h5> 2091 * <ul> 2092 * <li class='jf'>{@link Parser#PARSER_unbuffered} 2093 * </ul> 2094 * 2095 * @param value 2096 * The new value for this property. 2097 * <br>The default value is <jk>false</jk>. 2098 * @return This object (for method chaining). 2099 */ 2100 public RestClientBuilder unbuffered(boolean value) { 2101 return set(PARSER_unbuffered, value); 2102 } 2103 2104 /** 2105 * Configuration property: Unbuffered. 2106 * 2107 * <p> 2108 * Shortcut for calling <code>unbuffered(<jk>true</jk>)</code>. 2109 * 2110 * <h5 class='section'>See Also:</h5> 2111 * <ul> 2112 * <li class='jf'>{@link Parser#PARSER_unbuffered} 2113 * </ul> 2114 * 2115 * @return This object (for method chaining). 2116 */ 2117 public RestClientBuilder unbuffered() { 2118 return set(PARSER_unbuffered, true); 2119 } 2120 2121 /** 2122 * Configuration property: File charset. 2123 * 2124 * <p> 2125 * The character set to use for reading <code>Files</code> from the file system. 2126 * 2127 * <h5 class='section'>See Also:</h5> 2128 * <ul> 2129 * <li class='jf'>{@link ReaderParser#RPARSER_fileCharset} 2130 * </ul> 2131 * 2132 * @param value 2133 * The new value for this property. 2134 * <br>The default value is <js>"DEFAULT"</js> which causes the system default to be used. 2135 * @return This object (for method chaining). 2136 */ 2137 public RestClientBuilder fileCharset(String value) { 2138 return set(RPARSER_fileCharset, value); 2139 } 2140 2141 /** 2142 * Configuration property: Input stream charset. 2143 * 2144 * <p> 2145 * The character set to use for converting <code>InputStreams</code> and byte arrays to readers. 2146 * 2147 * <h5 class='section'>See Also:</h5> 2148 * <ul> 2149 * <li class='jf'>{@link ReaderParser#RPARSER_inputStreamCharset} 2150 * </ul> 2151 * 2152 * @param value 2153 * The new value for this property. 2154 * <br>The default value is <js>"UTF-8"</js>. 2155 * @return This object (for method chaining). 2156 */ 2157 public RestClientBuilder inputStreamCharset(String value) { 2158 return set(RPARSER_inputStreamCharset, value); 2159 } 2160 2161 /** 2162 * Configuration property: Binary input format. 2163 * 2164 * <p> 2165 * When using the {@link Parser#parse(Object,Class)} method on stream-based parsers and the input is a string, this defines the format to use 2166 * when converting the string into a byte array. 2167 * 2168 * <h5 class='section'>See Also:</h5> 2169 * <ul> 2170 * <li class='jf'>{@link InputStreamParser#ISPARSER_binaryFormat} 2171 * </ul> 2172 * 2173 * @param value 2174 * The new value for this property. 2175 * <br>The default value is {@link BinaryFormat#HEX}. 2176 * @return This object (for method chaining). 2177 */ 2178 public RestClientBuilder binaryInputFormat(BinaryFormat value) { 2179 return set(ISPARSER_binaryFormat, value); 2180 } 2181 2182 /** 2183 * Configuration property: Parameter format. 2184 * 2185 * <h5 class='section'>See Also:</h5> 2186 * <ul> 2187 * <li class='jf'>{@link UonSerializer#UON_paramFormat} 2188 * </ul> 2189 * 2190 * @param value The new value for this property. 2191 * @return This object (for method chaining). 2192 */ 2193 public RestClientBuilder paramFormat(String value) { 2194 return set(UON_paramFormat, value); 2195 } 2196 2197 /** 2198 * Configuration property: Parameter format. 2199 * 2200 * <h5 class='section'>See Also:</h5> 2201 * <ul> 2202 * <li class='jf'>{@link UonSerializer#UON_paramFormat} 2203 * </ul> 2204 * 2205 * @return This object (for method chaining). 2206 */ 2207 public RestClientBuilder paramFormatPlain() { 2208 return set(UON_paramFormat, "PLAINTEXT"); 2209 } 2210 2211 @Override /* BeanContextBuilder */ 2212 public RestClientBuilder beanClassVisibility(Visibility value) { 2213 super.beanClassVisibility(value); 2214 return this; 2215 } 2216 2217 @Override /* BeanContextBuilder */ 2218 public RestClientBuilder beanConstructorVisibility(Visibility value) { 2219 super.beanConstructorVisibility(value); 2220 return this; 2221 } 2222 2223 @Override /* BeanContextBuilder */ 2224 public RestClientBuilder beanDictionary(boolean append, Object...values) { 2225 super.beanDictionary(append, values); 2226 return this; 2227 } 2228 2229 @Override /* BeanContextBuilder */ 2230 public RestClientBuilder beanDictionary(Class<?>...values) { 2231 super.beanDictionary(values); 2232 return this; 2233 } 2234 2235 @Override /* BeanContextBuilder */ 2236 public RestClientBuilder beanDictionary(Object...values) { 2237 super.beanDictionary(values); 2238 return this; 2239 } 2240 2241 @Override /* BeanContextBuilder */ 2242 public RestClientBuilder beanDictionaryRemove(Object...values) { 2243 super.beanDictionaryRemove(values); 2244 return this; 2245 } 2246 2247 @Override /* BeanContextBuilder */ 2248 public RestClientBuilder beanFieldVisibility(Visibility value) { 2249 super.beanFieldVisibility(value); 2250 return this; 2251 } 2252 2253 @Override /* BeanContextBuilder */ 2254 public RestClientBuilder beanFilters(boolean append, Object...values) { 2255 super.beanFilters(append, values); 2256 return this; 2257 } 2258 2259 @Override /* BeanContextBuilder */ 2260 public RestClientBuilder beanFilters(Class<?>...values) { 2261 super.beanFilters(values); 2262 return this; 2263 } 2264 2265 @Override /* BeanContextBuilder */ 2266 public RestClientBuilder beanFilters(Object...values) { 2267 super.beanFilters(values); 2268 return this; 2269 } 2270 2271 @Override /* BeanContextBuilder */ 2272 public RestClientBuilder beanFiltersRemove(Object...values) { 2273 super.beanFiltersRemove(values); 2274 return this; 2275 } 2276 2277 @Override /* BeanContextBuilder */ 2278 public RestClientBuilder beanMapPutReturnsOldValue(boolean value) { 2279 super.beanMapPutReturnsOldValue(value); 2280 return this; 2281 } 2282 2283 @Override /* BeanContextBuilder */ 2284 public RestClientBuilder beanMapPutReturnsOldValue() { 2285 super.beanMapPutReturnsOldValue(); 2286 return this; 2287 } 2288 2289 @Override /* BeanContextBuilder */ 2290 public RestClientBuilder beanMethodVisibility(Visibility value) { 2291 super.beanMethodVisibility(value); 2292 return this; 2293 } 2294 2295 @Override /* BeanContextBuilder */ 2296 public RestClientBuilder beansRequireDefaultConstructor(boolean value) { 2297 super.beansRequireDefaultConstructor(value); 2298 return this; 2299 } 2300 2301 @Override /* BeanContextBuilder */ 2302 public RestClientBuilder beansRequireDefaultConstructor() { 2303 super.beansRequireDefaultConstructor(); 2304 return this; 2305 } 2306 2307 @Override /* BeanContextBuilder */ 2308 public RestClientBuilder beansRequireSerializable(boolean value) { 2309 super.beansRequireSerializable(value); 2310 return this; 2311 } 2312 2313 @Override /* BeanContextBuilder */ 2314 public RestClientBuilder beansRequireSerializable() { 2315 super.beansRequireSerializable(); 2316 return this; 2317 } 2318 2319 @Override /* BeanContextBuilder */ 2320 public RestClientBuilder beansRequireSettersForGetters(boolean value) { 2321 super.beansRequireSettersForGetters(value); 2322 return this; 2323 } 2324 2325 @Override /* BeanContextBuilder */ 2326 public RestClientBuilder beansRequireSettersForGetters() { 2327 super.beansRequireSettersForGetters(); 2328 return this; 2329 } 2330 2331 @Override /* BeanContextBuilder */ 2332 public RestClientBuilder beansRequireSomeProperties(boolean value) { 2333 super.beansRequireSomeProperties(value); 2334 return this; 2335 } 2336 2337 @Override /* BeanContextBuilder */ 2338 public RestClientBuilder beanTypePropertyName(String value) { 2339 super.beanTypePropertyName(value); 2340 return this; 2341 } 2342 2343 @Override /* BeanContextBuilder */ 2344 public RestClientBuilder debug() { 2345 super.debug(); 2346 return this; 2347 } 2348 2349 @Override /* BeanContextBuilder */ 2350 public <T> RestClientBuilder example(Class<T> c, T o) { 2351 super.example(c, o); 2352 return this; 2353 } 2354 2355 @Override /* BeanContextBuilder */ 2356 public RestClientBuilder ignoreInvocationExceptionsOnGetters(boolean value) { 2357 super.ignoreInvocationExceptionsOnGetters(value); 2358 return this; 2359 } 2360 2361 @Override /* BeanContextBuilder */ 2362 public RestClientBuilder ignoreInvocationExceptionsOnGetters() { 2363 super.ignoreInvocationExceptionsOnGetters(); 2364 return this; 2365 } 2366 2367 @Override /* BeanContextBuilder */ 2368 public RestClientBuilder ignoreInvocationExceptionsOnSetters(boolean value) { 2369 super.ignoreInvocationExceptionsOnSetters(value); 2370 return this; 2371 } 2372 2373 @Override /* BeanContextBuilder */ 2374 public RestClientBuilder ignoreInvocationExceptionsOnSetters() { 2375 super.ignoreInvocationExceptionsOnSetters(); 2376 return this; 2377 } 2378 2379 @Override /* BeanContextBuilder */ 2380 public RestClientBuilder ignorePropertiesWithoutSetters(boolean value) { 2381 super.ignorePropertiesWithoutSetters(value); 2382 return this; 2383 } 2384 2385 @Override /* BeanContextBuilder */ 2386 public RestClientBuilder ignoreUnknownBeanProperties(boolean value) { 2387 super.ignoreUnknownBeanProperties(value); 2388 return this; 2389 } 2390 2391 @Override /* BeanContextBuilder */ 2392 public RestClientBuilder ignoreUnknownBeanProperties() { 2393 super.ignoreUnknownBeanProperties(); 2394 return this; 2395 } 2396 2397 @Override /* BeanContextBuilder */ 2398 public RestClientBuilder ignoreUnknownNullBeanProperties(boolean value) { 2399 super.ignoreUnknownNullBeanProperties(value); 2400 return this; 2401 } 2402 2403 @Override /* BeanContextBuilder */ 2404 public <T> RestClientBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) { 2405 super.implClass(interfaceClass, implClass); 2406 return this; 2407 } 2408 2409 @Override /* BeanContextBuilder */ 2410 public RestClientBuilder implClasses(Map<String,Class<?>> values) { 2411 super.implClasses(values); 2412 return this; 2413 } 2414 2415 @Override /* BeanContextBuilder */ 2416 public RestClientBuilder locale(Locale value) { 2417 super.locale(value); 2418 return this; 2419 } 2420 2421 @Override /* BeanContextBuilder */ 2422 public RestClientBuilder mediaType(MediaType value) { 2423 super.mediaType(value); 2424 return this; 2425 } 2426 2427 @Override /* BeanContextBuilder */ 2428 public RestClientBuilder notBeanClasses(boolean append, Object...values) { 2429 super.notBeanClasses(append, values); 2430 return this; 2431 } 2432 2433 @Override /* BeanContextBuilder */ 2434 public RestClientBuilder notBeanClasses(Class<?>...values) { 2435 super.notBeanClasses(values); 2436 return this; 2437 } 2438 2439 @Override /* BeanContextBuilder */ 2440 public RestClientBuilder notBeanClasses(Object...values) { 2441 super.notBeanClasses(values); 2442 return this; 2443 } 2444 2445 @Override /* BeanContextBuilder */ 2446 public RestClientBuilder notBeanClassesRemove(Object...values) { 2447 super.notBeanClassesRemove(values); 2448 return this; 2449 } 2450 2451 @Override /* BeanContextBuilder */ 2452 public RestClientBuilder notBeanPackages(boolean append, Object...values) { 2453 super.notBeanPackages(append, values); 2454 return this; 2455 } 2456 2457 @Override /* BeanContextBuilder */ 2458 public RestClientBuilder notBeanPackages(Object...values) { 2459 super.notBeanPackages(values); 2460 return this; 2461 } 2462 2463 @Override /* BeanContextBuilder */ 2464 public RestClientBuilder notBeanPackages(String...values) { 2465 super.notBeanPackages(values); 2466 return this; 2467 } 2468 2469 @Override /* BeanContextBuilder */ 2470 public RestClientBuilder notBeanPackagesRemove(Object...values) { 2471 super.notBeanPackagesRemove(values); 2472 return this; 2473 } 2474 2475 @Override /* BeanContextBuilder */ 2476 public RestClientBuilder pojoSwaps(boolean append, Object...values) { 2477 super.pojoSwaps(append, values); 2478 return this; 2479 } 2480 2481 @Override /* BeanContextBuilder */ 2482 public RestClientBuilder pojoSwaps(Class<?>...values) { 2483 super.pojoSwaps(values); 2484 return this; 2485 } 2486 2487 @Override /* BeanContextBuilder */ 2488 public RestClientBuilder pojoSwaps(Object...values) { 2489 super.pojoSwaps(values); 2490 return this; 2491 } 2492 2493 @Override /* BeanContextBuilder */ 2494 public RestClientBuilder pojoSwapsRemove(Object...values) { 2495 super.pojoSwapsRemove(values); 2496 return this; 2497 } 2498 2499 @Override /* BeanContextBuilder */ 2500 public RestClientBuilder sortProperties(boolean value) { 2501 super.sortProperties(value); 2502 return this; 2503 } 2504 2505 @Override /* BeanContextBuilder */ 2506 public RestClientBuilder sortProperties() { 2507 super.sortProperties(); 2508 return this; 2509 } 2510 2511 @Override /* BeanContextBuilder */ 2512 public RestClientBuilder timeZone(TimeZone value) { 2513 super.timeZone(value); 2514 return this; 2515 } 2516 2517 @Override /* BeanContextBuilder */ 2518 public RestClientBuilder useEnumNames() { 2519 super.useEnumNames(); 2520 return this; 2521 } 2522 2523 @Override /* BeanContextBuilder */ 2524 public RestClientBuilder useInterfaceProxies(boolean value) { 2525 super.useInterfaceProxies(value); 2526 return this; 2527 } 2528 2529 @Override /* BeanContextBuilder */ 2530 public RestClientBuilder useJavaBeanIntrospector(boolean value) { 2531 super.useJavaBeanIntrospector(value); 2532 return this; 2533 } 2534 2535 @Override /* BeanContextBuilder */ 2536 public RestClientBuilder useJavaBeanIntrospector() { 2537 super.useJavaBeanIntrospector(); 2538 return this; 2539 } 2540 2541 @Override /* ContextBuilder */ 2542 public RestClientBuilder set(String name, Object value) { 2543 super.set(name, value); 2544 return this; 2545 } 2546 2547 @Override /* ContextBuilder */ 2548 public RestClientBuilder set(boolean append, String name, Object value) { 2549 super.set(append, name, value); 2550 return this; 2551 } 2552 2553 @Override /* ContextBuilder */ 2554 public RestClientBuilder set(Map<String,Object> properties) { 2555 super.set(properties); 2556 return this; 2557 } 2558 2559 @Override /* ContextBuilder */ 2560 public RestClientBuilder add(Map<String,Object> properties) { 2561 super.add(properties); 2562 return this; 2563 } 2564 2565 @Override /* ContextBuilder */ 2566 public RestClientBuilder addTo(String name, Object value) { 2567 super.addTo(name, value); 2568 return this; 2569 } 2570 2571 @Override /* ContextBuilder */ 2572 public RestClientBuilder addTo(String name, String key, Object value) { 2573 super.addTo(name, key, value); 2574 return this; 2575 } 2576 2577 @Override /* ContextBuilder */ 2578 public RestClientBuilder removeFrom(String name, Object value) { 2579 super.removeFrom(name, value); 2580 return this; 2581 } 2582 2583 @Override /* ContextBuilder */ 2584 public RestClientBuilder apply(PropertyStore copyFrom) { 2585 super.apply(copyFrom); 2586 return this; 2587 } 2588 2589 2590 //------------------------------------------------------------------------------------------------ 2591 // Passthrough methods for HttpClientBuilder. 2592 //------------------------------------------------------------------------------------------------ 2593 2594 /** 2595 * @param redirectStrategy 2596 * @return This object (for method chaining). 2597 * @see HttpClientBuilder#setRedirectStrategy(RedirectStrategy) 2598 */ 2599 public RestClientBuilder redirectStrategy(RedirectStrategy redirectStrategy) { 2600 httpClientBuilder.setRedirectStrategy(redirectStrategy); 2601 return this; 2602 } 2603 2604 /** 2605 * @param cookieSpecRegistry 2606 * @return This object (for method chaining). 2607 * @see HttpClientBuilder#setDefaultCookieSpecRegistry(Lookup) 2608 */ 2609 public RestClientBuilder defaultCookieSpecRegistry(Lookup<CookieSpecProvider> cookieSpecRegistry) { 2610 httpClientBuilder.setDefaultCookieSpecRegistry(cookieSpecRegistry); 2611 return this; 2612 } 2613 2614 /** 2615 * @param requestExec 2616 * @return This object (for method chaining). 2617 * @see HttpClientBuilder#setRequestExecutor(HttpRequestExecutor) 2618 */ 2619 public RestClientBuilder requestExecutor(HttpRequestExecutor requestExec) { 2620 httpClientBuilder.setRequestExecutor(requestExec); 2621 return this; 2622 } 2623 2624 /** 2625 * @param hostnameVerifier 2626 * @return This object (for method chaining). 2627 * @see HttpClientBuilder#setSSLHostnameVerifier(HostnameVerifier) 2628 */ 2629 public RestClientBuilder sslHostnameVerifier(HostnameVerifier hostnameVerifier) { 2630 httpClientBuilder.setSSLHostnameVerifier(hostnameVerifier); 2631 return this; 2632 } 2633 2634 /** 2635 * @param publicSuffixMatcher 2636 * @return This object (for method chaining). 2637 * @see HttpClientBuilder#setPublicSuffixMatcher(PublicSuffixMatcher) 2638 */ 2639 public RestClientBuilder publicSuffixMatcher(PublicSuffixMatcher publicSuffixMatcher) { 2640 httpClientBuilder.setPublicSuffixMatcher(publicSuffixMatcher); 2641 return this; 2642 } 2643 2644 /** 2645 * @param sslContext 2646 * @return This object (for method chaining). 2647 * @see HttpClientBuilder#setSSLContext(SSLContext) 2648 */ 2649 public RestClientBuilder sslContext(SSLContext sslContext) { 2650 httpClientBuilder.setSSLContext(sslContext); 2651 return this; 2652 } 2653 2654 /** 2655 * @param sslSocketFactory 2656 * @return This object (for method chaining). 2657 * @see HttpClientBuilder#setSSLSocketFactory(LayeredConnectionSocketFactory) 2658 */ 2659 public RestClientBuilder sslSocketFactory(LayeredConnectionSocketFactory sslSocketFactory) { 2660 httpClientBuilder.setSSLSocketFactory(sslSocketFactory); 2661 return this; 2662 } 2663 2664 /** 2665 * @param maxConnTotal 2666 * @return This object (for method chaining). 2667 * @see HttpClientBuilder#setMaxConnTotal(int) 2668 */ 2669 public RestClientBuilder maxConnTotal(int maxConnTotal) { 2670 httpClientBuilder.setMaxConnTotal(maxConnTotal); 2671 return this; 2672 } 2673 2674 /** 2675 * @param maxConnPerRoute 2676 * @return This object (for method chaining). 2677 * @see HttpClientBuilder#setMaxConnPerRoute(int) 2678 */ 2679 public RestClientBuilder maxConnPerRoute(int maxConnPerRoute) { 2680 httpClientBuilder.setMaxConnPerRoute(maxConnPerRoute); 2681 return this; 2682 } 2683 2684 /** 2685 * @param config 2686 * @return This object (for method chaining). 2687 * @see HttpClientBuilder#setDefaultSocketConfig(SocketConfig) 2688 */ 2689 public RestClientBuilder defaultSocketConfig(SocketConfig config) { 2690 httpClientBuilder.setDefaultSocketConfig(config); 2691 return this; 2692 } 2693 2694 /** 2695 * @param config 2696 * @return This object (for method chaining). 2697 * @see HttpClientBuilder#setDefaultConnectionConfig(ConnectionConfig) 2698 */ 2699 public RestClientBuilder defaultConnectionConfig(ConnectionConfig config) { 2700 httpClientBuilder.setDefaultConnectionConfig(config); 2701 return this; 2702 } 2703 2704 /** 2705 * @param connTimeToLive 2706 * @param connTimeToLiveTimeUnit 2707 * @return This object (for method chaining). 2708 * @see HttpClientBuilder#setConnectionTimeToLive(long,TimeUnit) 2709 */ 2710 public RestClientBuilder connectionTimeToLive(long connTimeToLive, TimeUnit connTimeToLiveTimeUnit) { 2711 httpClientBuilder.setConnectionTimeToLive(connTimeToLive, connTimeToLiveTimeUnit); 2712 return this; 2713 } 2714 2715 /** 2716 * @param connManager 2717 * @return This object (for method chaining). 2718 * @see HttpClientBuilder#setConnectionManager(HttpClientConnectionManager) 2719 */ 2720 public RestClientBuilder connectionManager(HttpClientConnectionManager connManager) { 2721 this.httpClientConnectionManager = connManager; 2722 httpClientBuilder.setConnectionManager(connManager); 2723 return this; 2724 } 2725 2726 /** 2727 * @param shared 2728 * @return This object (for method chaining). 2729 * @see HttpClientBuilder#setConnectionManagerShared(boolean) 2730 */ 2731 public RestClientBuilder connectionManagerShared(boolean shared) { 2732 httpClientBuilder.setConnectionManagerShared(shared); 2733 return this; 2734 } 2735 2736 /** 2737 * @param reuseStrategy 2738 * @return This object (for method chaining). 2739 * @see HttpClientBuilder#setConnectionReuseStrategy(ConnectionReuseStrategy) 2740 */ 2741 public RestClientBuilder connectionReuseStrategy(ConnectionReuseStrategy reuseStrategy) { 2742 httpClientBuilder.setConnectionReuseStrategy(reuseStrategy); 2743 return this; 2744 } 2745 2746 /** 2747 * @param keepAliveStrategy 2748 * @return This object (for method chaining). 2749 * @see HttpClientBuilder#setKeepAliveStrategy(ConnectionKeepAliveStrategy) 2750 */ 2751 public RestClientBuilder keepAliveStrategy(ConnectionKeepAliveStrategy keepAliveStrategy) { 2752 httpClientBuilder.setKeepAliveStrategy(keepAliveStrategy); 2753 return this; 2754 } 2755 2756 /** 2757 * @param targetAuthStrategy 2758 * @return This object (for method chaining). 2759 * @see HttpClientBuilder#setTargetAuthenticationStrategy(AuthenticationStrategy) 2760 */ 2761 public RestClientBuilder targetAuthenticationStrategy(AuthenticationStrategy targetAuthStrategy) { 2762 httpClientBuilder.setTargetAuthenticationStrategy(targetAuthStrategy); 2763 return this; 2764 } 2765 2766 /** 2767 * @param proxyAuthStrategy 2768 * @return This object (for method chaining). 2769 * @see HttpClientBuilder#setProxyAuthenticationStrategy(AuthenticationStrategy) 2770 */ 2771 public RestClientBuilder proxyAuthenticationStrategy(AuthenticationStrategy proxyAuthStrategy) { 2772 httpClientBuilder.setProxyAuthenticationStrategy(proxyAuthStrategy); 2773 return this; 2774 } 2775 2776 /** 2777 * @param userTokenHandler 2778 * @return This object (for method chaining). 2779 * @see HttpClientBuilder#setUserTokenHandler(UserTokenHandler) 2780 */ 2781 public RestClientBuilder userTokenHandler(UserTokenHandler userTokenHandler) { 2782 httpClientBuilder.setUserTokenHandler(userTokenHandler); 2783 return this; 2784 } 2785 2786 /** 2787 * @return This object (for method chaining). 2788 * @see HttpClientBuilder#disableConnectionState() 2789 */ 2790 public RestClientBuilder disableConnectionState() { 2791 httpClientBuilder.disableConnectionState(); 2792 return this; 2793 } 2794 2795 /** 2796 * @param schemePortResolver 2797 * @return This object (for method chaining). 2798 * @see HttpClientBuilder#setSchemePortResolver(SchemePortResolver) 2799 */ 2800 public RestClientBuilder schemePortResolver(SchemePortResolver schemePortResolver) { 2801 httpClientBuilder.setSchemePortResolver(schemePortResolver); 2802 return this; 2803 } 2804 2805 /** 2806 * @param userAgent 2807 * @return This object (for method chaining). 2808 * @see HttpClientBuilder#setUserAgent(String) 2809 */ 2810 public RestClientBuilder userAgent(String userAgent) { 2811 httpClientBuilder.setUserAgent(userAgent); 2812 return this; 2813 } 2814 2815 /** 2816 * @param defaultHeaders 2817 * @return This object (for method chaining). 2818 * @see HttpClientBuilder#setDefaultHeaders(Collection) 2819 */ 2820 public RestClientBuilder defaultHeaders(Collection<? extends Header> defaultHeaders) { 2821 httpClientBuilder.setDefaultHeaders(defaultHeaders); 2822 return this; 2823 } 2824 2825 /** 2826 * @param itcp 2827 * @return This object (for method chaining). 2828 * @see HttpClientBuilder#addInterceptorFirst(HttpResponseInterceptor) 2829 */ 2830 public RestClientBuilder addInterceptorFirst(HttpResponseInterceptor itcp) { 2831 httpClientBuilder.addInterceptorFirst(itcp); 2832 return this; 2833 } 2834 2835 /** 2836 * @param itcp 2837 * @return This object (for method chaining). 2838 * @see HttpClientBuilder#addInterceptorLast(HttpResponseInterceptor) 2839 */ 2840 public RestClientBuilder addInterceptorLast(HttpResponseInterceptor itcp) { 2841 httpClientBuilder.addInterceptorLast(itcp); 2842 return this; 2843 } 2844 2845 /** 2846 * @param itcp 2847 * @return This object (for method chaining). 2848 * @see HttpClientBuilder#addInterceptorFirst(HttpRequestInterceptor) 2849 */ 2850 public RestClientBuilder addInterceptorFirst(HttpRequestInterceptor itcp) { 2851 httpClientBuilder.addInterceptorFirst(itcp); 2852 return this; 2853 } 2854 2855 /** 2856 * @param itcp 2857 * @return This object (for method chaining). 2858 * @see HttpClientBuilder#addInterceptorLast(HttpRequestInterceptor) 2859 */ 2860 public RestClientBuilder addInterceptorLast(HttpRequestInterceptor itcp) { 2861 httpClientBuilder.addInterceptorLast(itcp); 2862 return this; 2863 } 2864 2865 /** 2866 * @return This object (for method chaining). 2867 * @see HttpClientBuilder#disableCookieManagement() 2868 */ 2869 public RestClientBuilder disableCookieManagement() { 2870 httpClientBuilder.disableCookieManagement(); 2871 return this; 2872 } 2873 2874 /** 2875 * @return This object (for method chaining). 2876 * @see HttpClientBuilder#disableContentCompression() 2877 */ 2878 public RestClientBuilder disableContentCompression() { 2879 httpClientBuilder.disableContentCompression(); 2880 return this; 2881 } 2882 2883 /** 2884 * @return This object (for method chaining). 2885 * @see HttpClientBuilder#disableAuthCaching() 2886 */ 2887 public RestClientBuilder disableAuthCaching() { 2888 httpClientBuilder.disableAuthCaching(); 2889 return this; 2890 } 2891 2892 /** 2893 * @param httpprocessor 2894 * @return This object (for method chaining). 2895 * @see HttpClientBuilder#setHttpProcessor(HttpProcessor) 2896 */ 2897 public RestClientBuilder httpProcessor(HttpProcessor httpprocessor) { 2898 httpClientBuilder.setHttpProcessor(httpprocessor); 2899 return this; 2900 } 2901 2902 /** 2903 * @param retryHandler 2904 * @return This object (for method chaining). 2905 * @see HttpClientBuilder#setRetryHandler(HttpRequestRetryHandler) 2906 */ 2907 public RestClientBuilder retryHandler(HttpRequestRetryHandler retryHandler) { 2908 httpClientBuilder.setRetryHandler(retryHandler); 2909 return this; 2910 } 2911 2912 /** 2913 * @return This object (for method chaining). 2914 * @see HttpClientBuilder#disableAutomaticRetries() 2915 */ 2916 public RestClientBuilder disableAutomaticRetries() { 2917 httpClientBuilder.disableAutomaticRetries(); 2918 return this; 2919 } 2920 2921 /** 2922 * @param proxy 2923 * @return This object (for method chaining). 2924 * @see HttpClientBuilder#setProxy(HttpHost) 2925 */ 2926 public RestClientBuilder proxy(HttpHost proxy) { 2927 httpClientBuilder.setProxy(proxy); 2928 return this; 2929 } 2930 2931 /** 2932 * @param routePlanner 2933 * @return This object (for method chaining). 2934 * @see HttpClientBuilder#setRoutePlanner(HttpRoutePlanner) 2935 */ 2936 public RestClientBuilder routePlanner(HttpRoutePlanner routePlanner) { 2937 httpClientBuilder.setRoutePlanner(routePlanner); 2938 return this; 2939 } 2940 2941 /** 2942 * @return This object (for method chaining). 2943 * @see HttpClientBuilder#disableRedirectHandling() 2944 */ 2945 public RestClientBuilder disableRedirectHandling() { 2946 httpClientBuilder.disableRedirectHandling(); 2947 return this; 2948 } 2949 2950 /** 2951 * @param connectionBackoffStrategy 2952 * @return This object (for method chaining). 2953 * @see HttpClientBuilder#setConnectionBackoffStrategy(ConnectionBackoffStrategy) 2954 */ 2955 public RestClientBuilder connectionBackoffStrategy(ConnectionBackoffStrategy connectionBackoffStrategy) { 2956 httpClientBuilder.setConnectionBackoffStrategy(connectionBackoffStrategy); 2957 return this; 2958 } 2959 2960 /** 2961 * @param backoffManager 2962 * @return This object (for method chaining). 2963 * @see HttpClientBuilder#setBackoffManager(BackoffManager) 2964 */ 2965 public RestClientBuilder backoffManager(BackoffManager backoffManager) { 2966 httpClientBuilder.setBackoffManager(backoffManager); 2967 return this; 2968 } 2969 2970 /** 2971 * @param serviceUnavailStrategy 2972 * @return This object (for method chaining). 2973 * @see HttpClientBuilder#setServiceUnavailableRetryStrategy(ServiceUnavailableRetryStrategy) 2974 */ 2975 public RestClientBuilder serviceUnavailableRetryStrategy(ServiceUnavailableRetryStrategy serviceUnavailStrategy) { 2976 httpClientBuilder.setServiceUnavailableRetryStrategy(serviceUnavailStrategy); 2977 return this; 2978 } 2979 2980 /** 2981 * @param cookieStore 2982 * @return This object (for method chaining). 2983 * @see HttpClientBuilder#setDefaultCookieStore(CookieStore) 2984 */ 2985 public RestClientBuilder defaultCookieStore(CookieStore cookieStore) { 2986 httpClientBuilder.setDefaultCookieStore(cookieStore); 2987 return this; 2988 } 2989 2990 /** 2991 * @param credentialsProvider 2992 * @return This object (for method chaining). 2993 * @see HttpClientBuilder#setDefaultCredentialsProvider(CredentialsProvider) 2994 */ 2995 public RestClientBuilder defaultCredentialsProvider(CredentialsProvider credentialsProvider) { 2996 httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); 2997 return this; 2998 } 2999 3000 /** 3001 * @param authSchemeRegistry 3002 * @return This object (for method chaining). 3003 * @see HttpClientBuilder#setDefaultAuthSchemeRegistry(Lookup) 3004 */ 3005 public RestClientBuilder defaultAuthSchemeRegistry(Lookup<AuthSchemeProvider> authSchemeRegistry) { 3006 httpClientBuilder.setDefaultAuthSchemeRegistry(authSchemeRegistry); 3007 return this; 3008 } 3009 3010 /** 3011 * @param contentDecoderMap 3012 * @return This object (for method chaining). 3013 * @see HttpClientBuilder#setContentDecoderRegistry(Map) 3014 */ 3015 public RestClientBuilder contentDecoderRegistry(Map<String,InputStreamFactory> contentDecoderMap) { 3016 httpClientBuilder.setContentDecoderRegistry(contentDecoderMap); 3017 return this; 3018 } 3019 3020 /** 3021 * @param config 3022 * @return This object (for method chaining). 3023 * @see HttpClientBuilder#setDefaultRequestConfig(RequestConfig) 3024 */ 3025 public RestClientBuilder defaultRequestConfig(RequestConfig config) { 3026 httpClientBuilder.setDefaultRequestConfig(config); 3027 return this; 3028 } 3029 3030 /** 3031 * @return This object (for method chaining). 3032 * @see HttpClientBuilder#useSystemProperties() 3033 */ 3034 public RestClientBuilder useSystemProperties() { 3035 httpClientBuilder.useSystemProperties(); 3036 return this; 3037 } 3038 3039 /** 3040 * @return This object (for method chaining). 3041 * @see HttpClientBuilder#evictExpiredConnections() 3042 */ 3043 public RestClientBuilder evictExpiredConnections() { 3044 httpClientBuilder.evictExpiredConnections(); 3045 return this; 3046 } 3047 3048 /** 3049 * @param maxIdleTime 3050 * @param maxIdleTimeUnit 3051 * @return This object (for method chaining). 3052 * @see HttpClientBuilder#evictIdleConnections(long,TimeUnit) 3053 */ 3054 public RestClientBuilder evictIdleConnections(long maxIdleTime, TimeUnit maxIdleTimeUnit) { 3055 httpClientBuilder.evictIdleConnections(maxIdleTime, maxIdleTimeUnit); 3056 return this; 3057 } 3058 3059 private static String[] getDefaultProtocols() { 3060 String sp = System.getProperty("transport.client.protocol"); 3061 if (isEmpty(sp)) 3062 return new String[] {"SSL_TLS","TLS","SSL"}; 3063 return StringUtils.split(sp, ','); 3064 } 3065 3066 /** 3067 * @deprecated Use {@link #addRootType(boolean)} 3068 */ 3069 @SuppressWarnings("javadoc") 3070 @Deprecated 3071 public RestClientBuilder abridged(boolean value) { 3072 return set(SERIALIZER_abridged, value); 3073 } 3074 3075 /** 3076 * @deprecated Use {@link #addRootType()} 3077 */ 3078 @SuppressWarnings("javadoc") 3079 @Deprecated 3080 public RestClientBuilder abridged() { 3081 return set(SERIALIZER_abridged, true); 3082 } 3083 3084 /** 3085 * @deprecated Use {@link #addBeanTypes(boolean)} 3086 */ 3087 @SuppressWarnings("javadoc") 3088 @Deprecated 3089 public RestClientBuilder addBeanTypeProperties(boolean value) { 3090 return set(SERIALIZER_addBeanTypeProperties, value); 3091 } 3092 3093 /** 3094 * @deprecated Use {@link #maxIndent(int)} 3095 */ 3096 @SuppressWarnings("javadoc") 3097 @Deprecated 3098 public RestClientBuilder maxIndent(boolean value) { 3099 return set(SERIALIZER_maxIndent, value); 3100 } 3101 3102 /** 3103 * @deprecated Use {@link #redirectStrategy(RedirectStrategy)} 3104 */ 3105 @SuppressWarnings("javadoc") 3106 @Deprecated 3107 public RestClientBuilder setRedirectStrategy(RedirectStrategy redirectStrategy) { 3108 return redirectStrategy(redirectStrategy); 3109 } 3110 3111 /** 3112 * @deprecated Use {@link #defaultCookieSpecRegistry(Lookup)} 3113 */ 3114 @SuppressWarnings("javadoc") 3115 @Deprecated 3116 public RestClientBuilder setDefaultCookieSpecRegistry(Lookup<CookieSpecProvider> cookieSpecRegistry) { 3117 return defaultCookieSpecRegistry(cookieSpecRegistry); 3118 } 3119 3120 /** 3121 * @deprecated Use {@link #requestExecutor(HttpRequestExecutor)} 3122 */ 3123 @SuppressWarnings("javadoc") 3124 @Deprecated 3125 public RestClientBuilder setRequestExecutor(HttpRequestExecutor requestExec) { 3126 return requestExecutor(requestExec); 3127 } 3128 3129 /** 3130 * @deprecated Use {@link #sslHostnameVerifier(HostnameVerifier)} 3131 */ 3132 @SuppressWarnings("javadoc") 3133 @Deprecated 3134 public RestClientBuilder setSSLHostnameVerifier(HostnameVerifier hostnameVerifier) { 3135 return sslHostnameVerifier(hostnameVerifier); 3136 } 3137 3138 /** 3139 * @deprecated Use {@link #publicSuffixMatcher(PublicSuffixMatcher)} 3140 */ 3141 @SuppressWarnings("javadoc") 3142 @Deprecated 3143 public RestClientBuilder setPublicSuffixMatcher(PublicSuffixMatcher publicSuffixMatcher) { 3144 return publicSuffixMatcher(publicSuffixMatcher); 3145 } 3146 3147 /** 3148 * @deprecated Use {@link #sslContext(SSLContext)} 3149 */ 3150 @SuppressWarnings("javadoc") 3151 @Deprecated 3152 public RestClientBuilder setSSLContext(SSLContext sslContext) { 3153 return sslContext(sslContext); 3154 } 3155 3156 /** 3157 * @deprecated Use {@link #sslSocketFactory(LayeredConnectionSocketFactory)} 3158 */ 3159 @SuppressWarnings("javadoc") 3160 @Deprecated 3161 public RestClientBuilder setSSLSocketFactory(LayeredConnectionSocketFactory sslSocketFactory) { 3162 return sslSocketFactory(sslSocketFactory); 3163 } 3164 3165 /** 3166 * @deprecated Use {@link #maxConnTotal(int)} 3167 */ 3168 @SuppressWarnings("javadoc") 3169 @Deprecated 3170 public RestClientBuilder setMaxConnTotal(int maxConnTotal) { 3171 return maxConnTotal(maxConnTotal); 3172 } 3173 3174 /** 3175 * @deprecated Use {@link #maxConnPerRoute(int)} 3176 */ 3177 @SuppressWarnings("javadoc") 3178 @Deprecated 3179 public RestClientBuilder setMaxConnPerRoute(int maxConnPerRoute) { 3180 return maxConnPerRoute(maxConnPerRoute); 3181 } 3182 3183 /** 3184 * @deprecated Use {@link #defaultSocketConfig(SocketConfig)} 3185 */ 3186 @SuppressWarnings("javadoc") 3187 @Deprecated 3188 public RestClientBuilder setDefaultSocketConfig(SocketConfig config) { 3189 return defaultSocketConfig(config); 3190 } 3191 3192 /** 3193 * @deprecated Use {@link #defaultConnectionConfig(ConnectionConfig)} 3194 */ 3195 @SuppressWarnings("javadoc") 3196 @Deprecated 3197 public RestClientBuilder setDefaultConnectionConfig(ConnectionConfig config) { 3198 return defaultConnectionConfig(config); 3199 } 3200 3201 /** 3202 * @deprecated Use {@link #connectionTimeToLive(long,TimeUnit)} 3203 */ 3204 @SuppressWarnings("javadoc") 3205 @Deprecated 3206 public RestClientBuilder setConnectionTimeToLive(long connTimeToLive, TimeUnit connTimeToLiveTimeUnit) { 3207 return connectionTimeToLive(connTimeToLive, connTimeToLiveTimeUnit); 3208 } 3209 3210 /** 3211 * @deprecated Use {@link #connectionManager(HttpClientConnectionManager)} 3212 */ 3213 @SuppressWarnings("javadoc") 3214 @Deprecated 3215 public RestClientBuilder setConnectionManager(HttpClientConnectionManager connManager) { 3216 return connectionManager(connManager); 3217 } 3218 3219 /** 3220 * @deprecated Use {@link #connectionManagerShared(boolean)} 3221 */ 3222 @SuppressWarnings("javadoc") 3223 @Deprecated 3224 public RestClientBuilder setConnectionManagerShared(boolean shared) { 3225 return connectionManagerShared(shared); 3226 } 3227 3228 /** 3229 * @deprecated Use {@link #connectionReuseStrategy(ConnectionReuseStrategy)} 3230 */ 3231 @SuppressWarnings("javadoc") 3232 @Deprecated 3233 public RestClientBuilder setConnectionReuseStrategy(ConnectionReuseStrategy reuseStrategy) { 3234 return connectionReuseStrategy(reuseStrategy); 3235 } 3236 3237 /** 3238 * @deprecated Use {@link #keepAliveStrategy(ConnectionKeepAliveStrategy)} 3239 */ 3240 @SuppressWarnings("javadoc") 3241 @Deprecated 3242 public RestClientBuilder setKeepAliveStrategy(ConnectionKeepAliveStrategy keepAliveStrategy) { 3243 return keepAliveStrategy(keepAliveStrategy); 3244 } 3245 3246 /** 3247 * @deprecated Use {@link #targetAuthenticationStrategy(AuthenticationStrategy)} 3248 */ 3249 @SuppressWarnings("javadoc") 3250 @Deprecated 3251 public RestClientBuilder setTargetAuthenticationStrategy(AuthenticationStrategy targetAuthStrategy) { 3252 return targetAuthenticationStrategy(targetAuthStrategy); 3253 } 3254 3255 /** 3256 * @deprecated Use {@link #proxyAuthenticationStrategy(AuthenticationStrategy)} 3257 */ 3258 @SuppressWarnings("javadoc") 3259 @Deprecated 3260 public RestClientBuilder setProxyAuthenticationStrategy(AuthenticationStrategy proxyAuthStrategy) { 3261 return proxyAuthenticationStrategy(proxyAuthStrategy); 3262 } 3263 3264 /** 3265 * @deprecated Use {@link #userTokenHandler(UserTokenHandler)} 3266 */ 3267 @SuppressWarnings("javadoc") 3268 @Deprecated 3269 public RestClientBuilder setUserTokenHandler(UserTokenHandler userTokenHandler) { 3270 return userTokenHandler(userTokenHandler); 3271 } 3272 3273 /** 3274 * @deprecated Use {@link #schemePortResolver(SchemePortResolver)} 3275 */ 3276 @SuppressWarnings("javadoc") 3277 @Deprecated 3278 public RestClientBuilder setSchemePortResolver(SchemePortResolver schemePortResolver) { 3279 return schemePortResolver(schemePortResolver); 3280 } 3281 3282 /** 3283 * @deprecated Use {@link #defaultHeaders(Collection)} 3284 */ 3285 @SuppressWarnings("javadoc") 3286 @Deprecated 3287 public RestClientBuilder setDefaultHeaders(Collection<? extends Header> defaultHeaders) { 3288 return defaultHeaders(defaultHeaders); 3289 } 3290 3291 /** 3292 * @deprecated Use {@link #userAgent(String)} 3293 */ 3294 @SuppressWarnings("javadoc") 3295 @Deprecated 3296 public RestClientBuilder setUserAgent(String userAgent) { 3297 return userAgent(userAgent); 3298 } 3299 3300 /** 3301 * @deprecated Use {@link #httpProcessor(HttpProcessor)} 3302 */ 3303 @SuppressWarnings("javadoc") 3304 @Deprecated 3305 public RestClientBuilder setHttpProcessor(HttpProcessor httpprocessor) { 3306 return httpProcessor(httpprocessor); 3307 } 3308 3309 /** 3310 * @deprecated Use {@link #retryHandler(HttpRequestRetryHandler)} 3311 */ 3312 @SuppressWarnings("javadoc") 3313 @Deprecated 3314 public RestClientBuilder setRetryHandler(HttpRequestRetryHandler retryHandler) { 3315 return retryHandler(retryHandler); 3316 } 3317 3318 /** 3319 * @deprecated Use {@link #proxy(HttpHost)} 3320 */ 3321 @SuppressWarnings("javadoc") 3322 @Deprecated 3323 public RestClientBuilder setProxy(HttpHost proxy) { 3324 return proxy(proxy); 3325 } 3326 3327 /** 3328 * @deprecated Use {@link #routePlanner(HttpRoutePlanner)} 3329 */ 3330 @SuppressWarnings("javadoc") 3331 @Deprecated 3332 public RestClientBuilder setRoutePlanner(HttpRoutePlanner routePlanner) { 3333 return routePlanner(routePlanner); 3334 } 3335 3336 /** 3337 * @deprecated Use {@link #connectionBackoffStrategy(ConnectionBackoffStrategy)} 3338 */ 3339 @SuppressWarnings("javadoc") 3340 @Deprecated 3341 public RestClientBuilder setConnectionBackoffStrategy(ConnectionBackoffStrategy connectionBackoffStrategy) { 3342 return connectionBackoffStrategy(connectionBackoffStrategy); 3343 } 3344 3345 /** 3346 * @deprecated Use {@link #backoffManager(BackoffManager)} 3347 */ 3348 @SuppressWarnings("javadoc") 3349 @Deprecated 3350 public RestClientBuilder setBackoffManager(BackoffManager backoffManager) { 3351 return backoffManager(backoffManager); 3352 } 3353 3354 /** 3355 * @deprecated Use {@link #serviceUnavailableRetryStrategy(ServiceUnavailableRetryStrategy)} 3356 */ 3357 @SuppressWarnings("javadoc") 3358 @Deprecated 3359 public RestClientBuilder setServiceUnavailableRetryStrategy(ServiceUnavailableRetryStrategy serviceUnavailStrategy) { 3360 return serviceUnavailableRetryStrategy(serviceUnavailStrategy); 3361 } 3362 3363 /** 3364 * @deprecated Use {@link #defaultCookieStore(CookieStore)} 3365 */ 3366 @SuppressWarnings("javadoc") 3367 @Deprecated 3368 public RestClientBuilder setDefaultCookieStore(CookieStore cookieStore) { 3369 return defaultCookieStore(cookieStore); 3370 } 3371 3372 /** 3373 * @deprecated Use {@link #defaultCredentialsProvider(CredentialsProvider)} 3374 */ 3375 @SuppressWarnings("javadoc") 3376 @Deprecated 3377 public RestClientBuilder setDefaultCredentialsProvider(CredentialsProvider credentialsProvider) { 3378 return defaultCredentialsProvider(credentialsProvider); 3379 } 3380 3381 /** 3382 * @deprecated Use {@link #defaultAuthSchemeRegistry(Lookup)} 3383 */ 3384 @SuppressWarnings("javadoc") 3385 @Deprecated 3386 public RestClientBuilder setDefaultAuthSchemeRegistry(Lookup<AuthSchemeProvider> authSchemeRegistry) { 3387 return defaultAuthSchemeRegistry(authSchemeRegistry); 3388 } 3389 3390 /** 3391 * @deprecated Use {@link #contentDecoderRegistry(Map)} 3392 */ 3393 @SuppressWarnings("javadoc") 3394 @Deprecated 3395 public RestClientBuilder setContentDecoderRegistry(Map<String,InputStreamFactory> contentDecoderMap) { 3396 return contentDecoderRegistry(contentDecoderMap); 3397 } 3398 3399 /** 3400 * @deprecated Use {@link #defaultRequestConfig(RequestConfig)} 3401 */ 3402 @SuppressWarnings("javadoc") 3403 @Deprecated 3404 public RestClientBuilder setDefaultRequestConfig(RequestConfig config) { 3405 return defaultRequestConfig(config); 3406 } 3407 3408 /** 3409 * @deprecated Use {@link #sslSocketFactory(LayeredConnectionSocketFactory)} and others. 3410 */ 3411 @SuppressWarnings({ "javadoc", "unused" }) 3412 @Deprecated 3413 public RestClientBuilder enableSSL(SSLOpts opts) throws KeyStoreException, NoSuchAlgorithmException { 3414 return this; 3415 } 3416}