Package org.apache.solr.client.solrj.impl

## Class HttpJdkSolrClient

- java.lang.Object
- - org.apache.solr.client.solrj.SolrClient
  - - org.apache.solr.client.solrj.impl.HttpSolrClientBase
    - - org.apache.solr.client.solrj.impl.HttpJdkSolrClient

All Implemented Interfaces:
  `Closeable`, `Serializable`, `AutoCloseable`

    public class HttpJdkSolrClient
    extends HttpSolrClientBase

A SolrClient implementation that communicates to a Solr server using the built-in Java 11+ Http Client. This client is targeted for those users who wish to minimize application dependencies. This client will connect to solr using Http/2 but can seamlessly downgrade to Http/1.1 when connecting to Solr hosts running on older versions.

See Also:
  Serialized Form

### Nested Class Summary

Nested Classes
`static class` `HttpJdkSolrClient.Builder`
`protected static class` `HttpJdkSolrClient.HttpSolrClientCancellable`

### Field Summary

Fields
`protected ExecutorService` `executor`
`protected boolean` `headRequested`
`protected HttpClient` `httpClient`

### Fields inherited from class org.apache.solr.client.solrj.impl.HttpSolrClientBase

`basicAuthAuthorizationStr, DEFAULT_PATH, defaultParserMimeTypes, FALLBACK_CHARSET, idleTimeoutMillis, parser, requestTimeoutMillis, requestWriter, serverBaseUrl, urlParamNames`

### Fields inherited from class org.apache.solr.client.solrj.SolrClient

`defaultCollection`

### Constructor Summary

Constructors
`protected` `HttpJdkSolrClient​(String serverBaseUrl, HttpJdkSolrClient.Builder builder)`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected String` `allProcessorSupportedContentTypesCommaDelimited​(Collection<String> processorSupportedContentTypes)`
`Cancellable` `asyncRequest​(SolrRequest<?> solrRequest, String collection, AsyncListener<NamedList<Object>> asyncListener)`
`void` `close()`
`protected String` `contentTypeToEncoding​(String contentType)`
`protected boolean` `isFollowRedirects()`
`protected boolean` `maybeTryHeadRequest​(String url)` This is a workaround for the case where:
`protected boolean` `processorAcceptsMimeType​(Collection<String> processorSupportedContentTypes, String mimeType)`
`NamedList<Object>` `request​(SolrRequest<?> solrRequest, String collection)` Execute a request against a Solr server for a given collection
`CompletableFuture<NamedList<Object>>` `requestAsync​(SolrRequest<?> solrRequest, String collection)` Execute an asynchronous request against a Solr server for a given collection.
`protected void` `updateDefaultMimeTypeForParser()`

### Methods inherited from class org.apache.solr.client.solrj.impl.HttpSolrClientBase

`basicAuthCredentialsToAuthorizationString, calculateQueryParams, getBaseURL, getIdleTimeout, getParser, getRequestUrl, getUrlParamNames, initalizeSolrParams, initializeSolrParams, isMultipart, isV2ApiRequest, processErrorsAndResponse, requestAsync, responseParser, setParser, validateGetRequest, wantStream`

### Methods inherited from class org.apache.solr.client.solrj.SolrClient

`add, add, add, add, add, add, add, add, add, add, addBean, addBean, addBean, addBean, addBeans, addBeans, addBeans, addBeans, addBeans, addBeans, commit, commit, commit, commit, commit, commit, deleteById, deleteById, deleteById, deleteById, deleteById, deleteById, deleteById, deleteById, deleteByQuery, deleteByQuery, deleteByQuery, deleteByQuery, getBinder, getById, getById, getById, getById, getById, getById, getById, getById, getContext, getDefaultCollection, optimize, optimize, optimize, optimize, optimize, optimize, ping, ping, query, query, query, query, queryAndStreamResponse, queryAndStreamResponse, queryAndStreamResponse, request, rollback, rollback`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### httpClient

    protected HttpClient httpClient

#### executor

    protected ExecutorService executor

#### headRequested

    protected volatile boolean headRequested

### Constructor Detail

#### HttpJdkSolrClient

    protected HttpJdkSolrClient​(String serverBaseUrl,
                                HttpJdkSolrClient.Builder builder)

### Method Detail

#### asyncRequest

    public Cancellable asyncRequest​(SolrRequest<?> solrRequest,
                                    String collection,
                                    AsyncListener<NamedList<Object>> asyncListener)

Specified by:
  `asyncRequest` in class `HttpSolrClientBase`
Parameters:
  `solrRequest` - the request to perform
  `collection` - if null the default collection is used
  `asyncListener` - callers should provide an implementation to handle events: start, success, exception
Returns:
  Cancellable allowing the caller to attempt cancellation

#### requestAsync

    public CompletableFuture<NamedList<Object>> requestAsync​(SolrRequest<?> solrRequest,
                                                             String collection)

Description copied from class: `HttpSolrClientBase`
Execute an asynchronous request against a Solr server for a given collection.

Specified by:
  `requestAsync` in class `HttpSolrClientBase`
Parameters:
  `solrRequest` - the request to execute
  `collection` - the collection to execute the request against
Returns:
  a `CompletableFuture` that tracks the progress of the async request. Supports cancelling requests via `CompletableFuture.cancel(boolean)`, adding callbacks/error handling using `CompletableFuture.whenComplete(BiConsumer)` and `CompletableFuture.exceptionally(Function)` methods, and other CompletableFuture functionality. Will complete exceptionally in case of either an `IOException` or `SolrServerException` during the request. Once completed, the CompletableFuture will contain a `NamedList` with the response from the server.

#### request

    public NamedList<Object> request​(SolrRequest<?> solrRequest,
                                     String collection)
                              throws SolrServerException,
                                     IOException

Description copied from class: `SolrClient`
Execute a request against a Solr server for a given collection

Specified by:
  `request` in class `SolrClient`
Parameters:
  `solrRequest` - the request to execute
  `collection` - the collection to execute the request against
Returns:
  a `NamedList` containing the response from the server
Throws:
  `SolrServerException` - if there is an error on the server
  `IOException` - If there is a low-level I/O error.

#### maybeTryHeadRequest

    protected boolean maybeTryHeadRequest​(String url)

This is a workaround for the case where:

(1) no SSL/TLS (2) using POST with stream and (3) using Http/2

The JDK Http Client will send an upgrade request over Http/1 along with request content in the same request. However, the Jetty Server underpinning Solr does not accept this.

We send a HEAD request first, then the client knows if Solr can accept Http/2, and no additional upgrade requests will be sent.

See https://bugs.openjdk.org/browse/JDK-8287589 See https://github.com/jetty/jetty.project/issues/9998#issuecomment-1614216870

We only try once, and if it fails, we downgrade to Http/1

Parameters:
  `url` - the url with no request parameters
Returns:
  true if success

#### contentTypeToEncoding

    protected String contentTypeToEncoding​(String contentType)

#### close

    public void close()
               throws IOException

Throws:
  `IOException`

#### isFollowRedirects

    protected boolean isFollowRedirects()

Specified by:
  `isFollowRedirects` in class `HttpSolrClientBase`

#### processorAcceptsMimeType

    protected boolean processorAcceptsMimeType​(Collection<String> processorSupportedContentTypes,
                                               String mimeType)

Specified by:
  `processorAcceptsMimeType` in class `HttpSolrClientBase`

#### updateDefaultMimeTypeForParser

    protected void updateDefaultMimeTypeForParser()

Specified by:
  `updateDefaultMimeTypeForParser` in class `HttpSolrClientBase`

#### allProcessorSupportedContentTypesCommaDelimited

    protected String allProcessorSupportedContentTypesCommaDelimited​(Collection<String> processorSupportedContentTypes)

Specified by:
  `allProcessorSupportedContentTypesCommaDelimited` in class `HttpSolrClientBase`