Files
doc-exports/docs/css/umn/css_01_0037.html
zhengxiu 93d856d5c5 css umn 25.6.0 version
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com>
Co-authored-by: zhengxiu <zhengxiu@huawei.com>
Co-committed-by: zhengxiu <zhengxiu@huawei.com>
2025-11-25 11:34:43 +00:00

3585 lines
409 KiB
HTML

<a name="EN-US_TOPIC_0000001992165569"></a><a name="EN-US_TOPIC_0000001992165569"></a>
<h1 class="topictitle1">Accessing an OpenSearch Cluster Using the Low Level REST Client</h1>
<div id="body0000001992165569"><p id="EN-US_TOPIC_0000001992165569__p1233494913499">You can query and manage data in a CSS OpenSearch cluster using the Low Level REST Client. The Low Level REST Client encapsulates OpenSearch APIs. You only need to construct the required structures to access an OpenSearch cluster. This simplifies the process of working with an OpenSearch cluster. The Low Level REST Client allows you to customize the request structure, which is more flexible and supports all the request formats of OpenSearch, such as GET, POST, DELETE, and HEAD.</p>
<p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001972416125_en-us_topic_0000001934179694_p173131359936">You can access an OpenSearch cluster with the Low Level REST Client using either of the following ways: directly creating the Low Level REST Client; or creating the High Level REST Client first and then calling <span class="parmname" id="EN-US_TOPIC_0000001992165569__parmname1954911598191"><b>RestHighLevelClient.getLowLevelClient()</b></span> to obtain the Low Level REST Client.</p>
<div class="section" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001972416125_en-us_topic_0000001934179694_section4509421174413"><h4 class="sectiontitle">Prerequisites</h4><ul id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_ul115524012184"><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_li181191829144220">The target OpenSearch cluster is available.</li><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_li14176183813502">The server that runs the Java code can communicate with the OpenSearch cluster.</li><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_li578832518434">Depending on the network configuration method used, obtain the cluster access address. For details, see <a href="css_01_0289.html#EN-US_TOPIC_0000001992165561__en-us_topic_0000001975823337_section855085010198">Network Configuration</a>.</li><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_li551945111016">Java has been installed on the server and the JDK version is 11 or later. Download JDK 11 from <a href="https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html" target="_blank" rel="noopener noreferrer">Java Archive Downloads</a>.</li></ul>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section1577619493224"><h4 class="sectiontitle">Introducing Dependencies</h4><p id="EN-US_TOPIC_0000001992165569__p167182024102012">Introduce the required Java dependencies on the server where you run Java code.</p>
<p id="EN-US_TOPIC_0000001992165569__p118151312191612">CSS allows you to use the Elasticsearch 7.10 Java client to connect to OpenSearch clusters. To ensure better compatibility, however, you are advised to use an OpenSearch Java client that has the same version as the target OpenSearch cluster.</p>
<p id="EN-US_TOPIC_0000001992165569__p198383566448">Select a reference example based on the Java client you use.</p>
<ul id="EN-US_TOPIC_0000001992165569__ul48397565220"><li id="EN-US_TOPIC_0000001992165569__li6771329142613">Scenario 1 (recommended): Use the OpenSearch Java client to access the OpenSearch cluster and introduce the Apache version using Maven.<p id="EN-US_TOPIC_0000001992165569__p5542162912611"><a name="EN-US_TOPIC_0000001992165569__li6771329142613"></a><a name="li6771329142613"></a>Replace 1.3.6 with the actual Java client version.</p>
<pre class="screen" id="EN-US_TOPIC_0000001992165569__screen1142325134514">&lt;dependency&gt;
&lt;groupId&gt;org.opensearch.client&lt;/groupId&gt;
&lt;artifactId&gt;opensearch-rest-high-level-client&lt;/artifactId&gt;
&lt;version&gt;1.3.6&lt;/version&gt;
&lt;/dependency&gt;</pre>
</li><li id="EN-US_TOPIC_0000001992165569__li159005485252">Scenario 2: Use the Elasticsearch 7.10.2 Java client to access the OpenSearch cluster and introduce the Apache version using Maven.<pre class="screen" id="EN-US_TOPIC_0000001992165569__screen572520662819">&lt;dependency&gt;
&lt;groupId&gt;org.elasticsearch.client&lt;/groupId&gt;
&lt;artifactId&gt;elasticsearch-rest-client&lt;/artifactId&gt;
&lt;version&gt;7.10.2&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
&lt;groupId&gt;org.elasticsearch&lt;/groupId&gt;
&lt;artifactId&gt;elasticsearch&lt;/artifactId&gt;
&lt;version&gt;7.10.2&lt;/version&gt;
&lt;/dependency&gt;</pre>
</li></ul>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section14782152316147"><h4 class="sectiontitle">Accessing a Cluster</h4><p id="EN-US_TOPIC_0000001992165569__p147091993211">The sample code varies depending on the Java client and the security mode settings of the target OpenSearch cluster. Select the right reference document based on your service scenario.</p>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="EN-US_TOPIC_0000001992165569__table8908141516224" frame="border" border="1" rules="all"><caption><b>Table 1 </b>Cluster access scenarios</caption><thead align="left"><tr id="EN-US_TOPIC_0000001992165569__row89091315182211"><th align="left" class="cellrowborder" valign="top" width="16%" id="mcps1.3.5.3.2.6.1.1"><p id="EN-US_TOPIC_0000001992165569__p55191237114110">Java Client</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="24%" id="mcps1.3.5.3.2.6.1.2"><p id="EN-US_TOPIC_0000001992165569__p7411823133218">How Low Level REST Client Is Created</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="16%" id="mcps1.3.5.3.2.6.1.3"><p id="EN-US_TOPIC_0000001992165569__p1190919153229">OpenSearch Cluster Security-Mode Settings</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="11%" id="mcps1.3.5.3.2.6.1.4"><p id="EN-US_TOPIC_0000001992165569__p20786153511243">Security Certificate</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="33%" id="mcps1.3.5.3.2.6.1.5"><p id="EN-US_TOPIC_0000001992165569__p17909151512211">Details</p>
</th>
</tr>
</thead>
<tbody><tr id="EN-US_TOPIC_0000001992165569__row14909915102214"><td class="cellrowborder" rowspan="6" valign="top" width="16%" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p218104254116">OpenSearch</p>
</td>
<td class="cellrowborder" rowspan="3" valign="top" width="24%" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p15412112318329">Directly create the Low Level REST Client</p>
</td>
<td class="cellrowborder" valign="top" width="16%" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p1190901518224">Non-security mode</p>
</td>
<td class="cellrowborder" valign="top" width="11%" headers="mcps1.3.5.3.2.6.1.4 "><p id="EN-US_TOPIC_0000001992165569__p5787235122416">-</p>
</td>
<td class="cellrowborder" valign="top" width="33%" headers="mcps1.3.5.3.2.6.1.5 "><p id="EN-US_TOPIC_0000001992165569__p22836483453"><a href="#EN-US_TOPIC_0000001992165569__section4687369363">Connecting to a Non-Security Mode Cluster Using the OpenSearch Low Level REST Client</a></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__row1290971532215"><td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p9478715303">Security mode + HTTP</p>
<p id="EN-US_TOPIC_0000001992165569__p847812110303">Security mode + HTTPS</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p5787103510246">No</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p5556217164817"><a href="#EN-US_TOPIC_0000001992165569__section2602143193915">Connecting to a Security-Mode Cluster Using the OpenSearch Low Level REST Client (Without a Certificate)</a></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__row20764174992411"><td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p106042320307">Security mode + HTTPS</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p1776574982414">Yes</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p7297164884820"><a href="#EN-US_TOPIC_0000001992165569__section1912544916395">Connecting to a Security-Mode Cluster Using the OpenSearch Low Level REST Client (With a Certificate)</a></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__row111731042153419"><td class="cellrowborder" rowspan="3" valign="top" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p210713316357">Create the High Level REST Client first and then call getLowLevelClient() to obtain the Low Level REST Client</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p114004545342">Non-security mode</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p1040015493420">-</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.4 "><p id="EN-US_TOPIC_0000001992165569__p817424243414"><a href="#EN-US_TOPIC_0000001992165569__section111701281216">Connecting to a Non-Security Mode Cluster Using the OpenSearch High Level REST Client</a></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__row14491154233420"><td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p12400115418345">Security mode + HTTP</p>
<p id="EN-US_TOPIC_0000001992165569__p104002054173419">Security mode + HTTPS</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p1340075410349">No</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p19342183825316"><a href="#EN-US_TOPIC_0000001992165569__section138179151553">Connecting to a Security-Mode Cluster Using the OpenSearch High Level REST Client (Without a Certificate)</a></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__row1281564263417"><td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p14400125423410">Security mode + HTTPS</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p8400454103416">Yes</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p12342038205317"><a href="#EN-US_TOPIC_0000001992165569__section14343162220160">Connecting to a Security-Mode Cluster Using the OpenSearch High Level REST Client (With a Certificate)</a></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__row9114143123615"><td class="cellrowborder" rowspan="6" valign="top" width="16%" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p65341249174119">Elasticsearch 7.10.2</p>
</td>
<td class="cellrowborder" rowspan="3" valign="top" width="24%" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p1479519019370">Directly create the Low Level REST Client</p>
</td>
<td class="cellrowborder" valign="top" width="16%" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p5595153893019">Non-security mode</p>
</td>
<td class="cellrowborder" valign="top" width="11%" headers="mcps1.3.5.3.2.6.1.4 "><p id="EN-US_TOPIC_0000001992165569__p775551002511">-</p>
</td>
<td class="cellrowborder" valign="top" width="33%" headers="mcps1.3.5.3.2.6.1.5 "><p id="EN-US_TOPIC_0000001992165569__p56911831194012"><a href="#EN-US_TOPIC_0000001992165569__section215365104713">Connecting to a Non-Security Mode Cluster Using the Elasticsearch Low Level REST Client</a></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__row54722383614"><td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p55953381301">Security mode + HTTP</p>
<p id="EN-US_TOPIC_0000001992165569__p959573814302">Security mode + HTTPS</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p1575591014256">No</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p18691203118404"><a href="#EN-US_TOPIC_0000001992165569__section361711128499">Connecting to a Security-Mode Cluster Using the Elasticsearch Low Level REST Client (Without a Certificate)</a></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__row396781117367"><td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p05951338173019">Security mode + HTTPS</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p16755161012251">Yes</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p1169253117401"><a href="#EN-US_TOPIC_0000001992165569__section16431305115">Connecting to a Security-Mode Cluster Using the Elasticsearch Low Level REST Client (With a Certificate)</a></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__row12156111273613"><td class="cellrowborder" rowspan="3" valign="top" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p76661157113610">Create the High Level REST Client first and then call getLowLevelClient() to obtain the Low Level REST Client</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p15400754193413">Non-security mode</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p1940018544347">-</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.4 "><p id="EN-US_TOPIC_0000001992165569__p96927312406"><a href="#EN-US_TOPIC_0000001992165569__section17497851185216">Connecting to a Non-Security Mode Cluster Using the Elasticsearch High Level REST Client</a></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__row6402151243617"><td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p3400125463416">Security mode + HTTP</p>
<p id="EN-US_TOPIC_0000001992165569__p1440016548344">Security mode + HTTPS</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p194001545341">No</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p869273184018"><a href="#EN-US_TOPIC_0000001992165569__section1988811319545">Connecting to a Security-Mode Cluster Using the Elasticsearch High Level REST Client (Without a Certificate)</a></p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__row469131217369"><td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.1 "><p id="EN-US_TOPIC_0000001992165569__p11400354193417">Security mode + HTTPS</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.2 "><p id="EN-US_TOPIC_0000001992165569__p440085433413">Yes</p>
</td>
<td class="cellrowborder" valign="top" headers="mcps1.3.5.3.2.6.1.3 "><p id="EN-US_TOPIC_0000001992165569__p269233118408"><a href="#EN-US_TOPIC_0000001992165569__section129618451566">Connecting to a Security-Mode Cluster Using the Elasticsearch High Level REST Client (With a Certificate)</a></p>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section4687369363"><a name="EN-US_TOPIC_0000001992165569__section4687369363"></a><a name="section4687369363"></a><h4 class="sectiontitle">Connecting to a Non-Security Mode Cluster Using the OpenSearch Low Level REST Client</h4><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001972375889_en-us_topic_0000001961178813_p7387545142616">Use the OpenSearch Low Level REST Client to connect to an OpenSearch cluster for which the security mode is disabled, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b775510290101123">test</strong> index exists. The sample code is as follows:</p>
<pre class="screen" id="EN-US_TOPIC_0000001992165569__screen572821595317">import org.apache.http.HttpHost;
import org.opensearch.client.Request;
import org.opensearch.client.Response;
import org.opensearch.client.RestClient;
import org.opensearch.client.RestClientBuilder;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class RestLowLevelClientExample {
public static void main(String[] args) throws IOException {
List&lt;String&gt; host = Arrays.asList("{Cluster access address}");
RestClientBuilder builder = RestClient.builder(constructHttpHosts(host, 9200, "http"));
/**
*Create the Low Level Rest Client.
*/
RestClient lowLevelClient = builder.build();
/**
* Check whether the <strong id="EN-US_TOPIC_0000001992165569__b1397751973101123">test</strong> index exists. If the index exists, 200 is returned. If the index does not exist, 404 is returned.
*/
Request request = new Request("HEAD", "/test");
Response response = lowLevelClient.performRequest(request);
System.out.println(response.getStatusLine().getStatusCode());
lowLevelClient.close();
}
/**
* Use the constructHttpHosts function to convert the node IP address list of the host cluster.
*/
public static HttpHost[] constructHttpHosts(List&lt;String&gt; host, int port, String protocol) {
return host.stream().map(p -&gt; new HttpHost(p, port, protocol)).toArray(HttpHost[]::new);
}
}</pre>
<p id="EN-US_TOPIC_0000001992165569__p151788213398">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b831418318519">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue23151931453"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue17315163550"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section2602143193915"><a name="EN-US_TOPIC_0000001992165569__section2602143193915"></a><a name="section2602143193915"></a><h4 class="sectiontitle">Connecting to a Security-Mode Cluster Using the OpenSearch Low Level REST Client (Without a Certificate)</h4><p id="EN-US_TOPIC_0000001992165569__p5937185717408">Use the OpenSearch Low Level REST Client to connect to a security-mode OpenSearch cluster (HTTP or HTTPS) without loading a security certificate, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b1928390444101123">test</strong> index exists. The sample code is as follows:</p>
<div class="codecoloring" codetype="Java" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001972416125_en-us_topic_0000001934179694_screen1701191918518"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
<span class="normal"> 19</span>
<span class="normal"> 20</span>
<span class="normal"> 21</span>
<span class="normal"> 22</span>
<span class="normal"> 23</span>
<span class="normal"> 24</span>
<span class="normal"> 25</span>
<span class="normal"> 26</span>
<span class="normal"> 27</span>
<span class="normal"> 28</span>
<span class="normal"> 29</span>
<span class="normal"> 30</span>
<span class="normal"> 31</span>
<span class="normal"> 32</span>
<span class="normal"> 33</span>
<span class="normal"> 34</span>
<span class="normal"> 35</span>
<span class="normal"> 36</span>
<span class="normal"> 37</span>
<span class="normal"> 38</span>
<span class="normal"> 39</span>
<span class="normal"> 40</span>
<span class="normal"> 41</span>
<span class="normal"> 42</span>
<span class="normal"> 43</span>
<span class="normal"> 44</span>
<span class="normal"> 45</span>
<span class="normal"> 46</span>
<span class="normal"> 47</span>
<span class="normal"> 48</span>
<span class="normal"> 49</span>
<span class="normal"> 50</span>
<span class="normal"> 51</span>
<span class="normal"> 52</span>
<span class="normal"> 53</span>
<span class="normal"> 54</span>
<span class="normal"> 55</span>
<span class="normal"> 56</span>
<span class="normal"> 57</span>
<span class="normal"> 58</span>
<span class="normal"> 59</span>
<span class="normal"> 60</span>
<span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span>
<span class="normal">161</span>
<span class="normal">162</span>
<span class="normal">163</span>
<span class="normal">164</span>
<span class="normal">165</span>
<span class="normal">166</span>
<span class="normal">167</span>
<span class="normal">168</span>
<span class="normal">169</span>
<span class="normal">170</span>
<span class="normal">171</span>
<span class="normal">172</span>
<span class="normal">173</span>
<span class="normal">174</span>
<span class="normal">175</span>
<span class="normal">176</span>
<span class="normal">177</span>
<span class="normal">178</span>
<span class="normal">179</span>
<span class="normal">180</span>
<span class="normal">181</span>
<span class="normal">182</span>
<span class="normal">183</span>
<span class="normal">184</span>
<span class="normal">185</span>
<span class="normal">186</span>
<span class="normal">187</span>
<span class="normal">188</span>
<span class="normal">189</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpHost</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpResponse</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.AuthScope</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.UsernamePasswordCredentials</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.client.CredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.BasicCredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.nio.client.HttpAsyncClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.nio.conn.ssl.SSLIOSessionStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.protocol.HttpContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.LogManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.Logger</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.Request</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.Response</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.RestClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.RestClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.common.Nullable</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.IOException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.KeyManagementException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.NoSuchAlgorithmException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.SecureRandom</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.CertificateException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.X509Certificate</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Arrays</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.List</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Objects</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.concurrent.TimeUnit</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.HostnameVerifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLSession</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManager</span><span class="p">;</span><span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.X509TrustManager</span><span class="p">;</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">RestLowLevelClientExample</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a class for the client. Define the create function.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="nf">create</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectionRequestTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">socketTimeout</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">password</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">BasicCredentialsProvider</span><span class="p">();</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">.</span><span class="na">setCredentials</span><span class="p">(</span><span class="n">AuthScope</span><span class="p">.</span><span class="na">ANY</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">UsernamePasswordCredentials</span><span class="p">(</span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">password</span><span class="p">));</span>
<span class="w"> </span><span class="n">SSLContext</span><span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SSLContext</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SSL&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">sc</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">trustAllCerts</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecureRandom</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">KeyManagementException</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">NoSuchAlgorithmException</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sessionStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="p">(</span><span class="n">sc</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NullHostNameVerifier</span><span class="p">());</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="n">httpClientConfigCallback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="n">sessionStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClientBuilder</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RestClient</span><span class="p">.</span><span class="na">builder</span><span class="p">(</span><span class="n">constructHttpHosts</span><span class="p">(</span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setRequestConfigCallback</span><span class="p">(</span><span class="n">requestConfig</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">requestConfig</span><span class="p">.</span><span class="na">setConnectTimeout</span><span class="p">(</span><span class="n">connectTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setConnectionRequestTimeout</span><span class="p">(</span><span class="n">connectionRequestTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setSocketTimeout</span><span class="p">(</span><span class="n">socketTimeout</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setHttpClientConfigCallback</span><span class="p">(</span><span class="n">httpClientConfigCallback</span><span class="p">);</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">build</span><span class="p">();</span>
<span class="w"> </span><span class="n">logger</span><span class="p">.</span><span class="na">info</span><span class="p">(</span><span class="s">&quot;opensearch rest client build success {} &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">client</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">client</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Use the constructHttpHosts function to convert the node IP address list of the host cluster.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">HttpHost</span><span class="o">[]</span><span class="w"> </span><span class="nf">constructHttpHosts</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">host</span><span class="p">.</span><span class="na">stream</span><span class="p">().</span><span class="na">map</span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HttpHost</span><span class="p">(</span><span class="n">p</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">)).</span><span class="na">toArray</span><span class="p">(</span><span class="n">HttpHost</span><span class="o">[]</span><span class="p">::</span><span class="k">new</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Configure trustAllCerts to ignore the certificate configuration.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">trustAllCerts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkClientTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkServerTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="nf">getAcceptedIssuers</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">};</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm">* The CustomConnectionKeepAliveStrategy function is used to set the connection keepalive during when there are a large number of short connections or when there are not many data requests.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">CustomConnectionKeepAliveStrategy</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">DefaultConnectionKeepAliveStrategy</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CustomConnectionKeepAliveStrategy</span><span class="w"> </span><span class="n">INSTANCE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">CustomConnectionKeepAliveStrategy</span><span class="p">();</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="nf">CustomConnectionKeepAliveStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">super</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Maximum keepalive time (in minutes)</span>
<span class="cm"> * The default value is 10 minutes. You can set it based on the number of TCP connections in TIME_WAIT state. If there are too many TCP connections, you can increase this value.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">MAX_KEEP_ALIVE_MINUTES</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="nf">getKeepAliveDuration</span><span class="p">(</span><span class="n">HttpResponse</span><span class="w"> </span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">HttpContext</span><span class="w"> </span><span class="n">context</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">keepAliveDuration</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">super</span><span class="p">.</span><span class="na">getKeepAliveDuration</span><span class="p">(</span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">context</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// &lt;0 indicates that the keepalive period is unlimited.</span>
<span class="w"> </span><span class="c1">// Change the period from unlimited to a default period.</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">keepAliveDuration</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">TimeUnit</span><span class="p">.</span><span class="na">MINUTES</span><span class="p">.</span><span class="na">toMillis</span><span class="p">(</span><span class="n">MAX_KEEP_ALIVE_MINUTES</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">keepAliveDuration</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Logger</span><span class="w"> </span><span class="n">logger</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LogManager</span><span class="p">.</span><span class="na">getLogger</span><span class="p">(</span><span class="n">RestLowLevelClientExample</span><span class="p">.</span><span class="na">class</span><span class="p">);</span>
<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">RestClientBuilder</span><span class="p">.</span><span class="na">HttpClientConfigCallback</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * The {@link SSLIOSessionStrategy} for all requests to enable SSL / TLS encryption.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a new {@link SecuredHttpClientConfigCallback}.</span>
<span class="cm"> *</span>
<span class="cm"> * @param credentialsProvider The credential provider, if a username/password have been supplied</span>
<span class="cm"> * @param sslStrategy The SSL strategy, if SSL / TLS have been supplied</span>
<span class="cm"> * @throws NullPointerException if {@code sslStrategy} is {@code null}</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="nd">@Nullable</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">sslStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Objects</span><span class="p">.</span><span class="na">requireNonNull</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Get the {@link CredentialsProvider} that will be added to the HTTP client.</span>
<span class="cm"> *</span>
<span class="cm"> * @return Can be {@code null}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="nf">getCredentialsProvider</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Get the {@link SSLIOSessionStrategy} that will be added to the HTTP client.</span>
<span class="cm"> *</span>
<span class="cm"> * @return Never {@code null}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="nf">getSSLStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Sets the {@linkplain HttpAsyncClientBuilder#setDefaultCredentialsProvider(CredentialsProvider) credential provider},</span>
<span class="cm"> *</span>
<span class="cm"> * @param httpClientBuilder The client to configure.</span>
<span class="cm"> * @return Always {@code httpClientBuilder}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="nf">customizeHttpClient</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// enable SSL / TLS</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setSSLStrategy</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// enable user authentication</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setDefaultCredentialsProvider</span><span class="p">(</span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">NullHostNameVerifier</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">HostnameVerifier</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">arg0</span><span class="p">,</span><span class="w"> </span><span class="n">SSLSession</span><span class="w"> </span><span class="n">arg1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * The following is an example of the main function. Call the create function to create a Low Level REST Client and check whether the test index exists.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">create</span><span class="p">(</span><span class="n">Arrays</span><span class="p">.</span><span class="na">asList</span><span class="p">(</span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">),</span><span class="w"> </span><span class="mi">9200</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;username&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;password&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Request</span><span class="w"> </span><span class="n">request</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Request</span><span class="p">(</span><span class="s">&quot;HEAD&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;/test&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Response</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">performRequest</span><span class="p">(</span><span class="n">request</span><span class="p">);</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="na">getStatusLine</span><span class="p">().</span><span class="na">getStatusCode</span><span class="p">());</span>
<span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="EN-US_TOPIC_0000001992165569__table97421032204318" frame="border" border="1" rules="all"><caption><b>Table 2 </b>Variables</caption><thead align="left"><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row15833437142513"><th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.7.4.2.3.1.1"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p198331837112510">Parameter</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.7.4.2.3.1.2"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1783383762518">Description</p>
</th>
</tr>
</thead>
<tbody><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row383320375257"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p15833153752514">host</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p18833143722511">IP address for accessing the cluster. If there are multiple IP addresses, separate them with commas (,).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row128330374257"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p783393711258">port</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p683383742515">Access port of the cluster. The default value is <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b130391213393754">9200</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row168338373258"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p20833103732519">protocol</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p3833173717256">Connection protocol, which can be <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_parmvalue181861130593754"><b>http</b></span> or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_parmvalue190485073093754"><b>https</b></span>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1783383719259"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1883393722511">connectTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p58331737132519">Socket connection timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row383303742519"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1983373711259">connectionRequestTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1283415379254">Socket connection request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row14834037102517"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p138341371258">socketTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p4834153732515">Socket request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row148340375259"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1834153762511">username</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1183412376255">Username for accessing the cluster.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row208346377257"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p12834183715254">password</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.7.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1083473782518">Password of the user.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p id="EN-US_TOPIC_0000001992165569__p189608235598">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b290017281512">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue39001281356"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue490072817519"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section1912544916395"><a name="EN-US_TOPIC_0000001992165569__section1912544916395"></a><a name="section1912544916395"></a><h4 class="sectiontitle">Connecting to a Security-Mode Cluster Using the OpenSearch Low Level REST Client (With a Certificate)</h4><p id="EN-US_TOPIC_0000001992165569__p1394012536434">Use the OpenSearch Low Level REST Client to connect to a security-mode OpenSearch cluster that uses HTTPS with a security certificate loaded, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b646021402101123">test</strong> index exists. The sample code is as follows:</p>
<div class="caution" id="EN-US_TOPIC_0000001992165569__note37534015313"><span class="cautiontitle"><img src="public_sys-resources/caution_3.0-en-us.png"> </span><div class="cautionbody"><p id="EN-US_TOPIC_0000001992165569__p157684045312">For how to obtain and upload a security certificate, see <a href="#EN-US_TOPIC_0000001992165569__section697213217486">Obtaining and Uploading a Security Certificate</a>.</p>
</div></div>
<div class="codecoloring" codetype="Java" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001972416125_en-us_topic_0000001934179694_screen528134082614"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
<span class="normal"> 19</span>
<span class="normal"> 20</span>
<span class="normal"> 21</span>
<span class="normal"> 22</span>
<span class="normal"> 23</span>
<span class="normal"> 24</span>
<span class="normal"> 25</span>
<span class="normal"> 26</span>
<span class="normal"> 27</span>
<span class="normal"> 28</span>
<span class="normal"> 29</span>
<span class="normal"> 30</span>
<span class="normal"> 31</span>
<span class="normal"> 32</span>
<span class="normal"> 33</span>
<span class="normal"> 34</span>
<span class="normal"> 35</span>
<span class="normal"> 36</span>
<span class="normal"> 37</span>
<span class="normal"> 38</span>
<span class="normal"> 39</span>
<span class="normal"> 40</span>
<span class="normal"> 41</span>
<span class="normal"> 42</span>
<span class="normal"> 43</span>
<span class="normal"> 44</span>
<span class="normal"> 45</span>
<span class="normal"> 46</span>
<span class="normal"> 47</span>
<span class="normal"> 48</span>
<span class="normal"> 49</span>
<span class="normal"> 50</span>
<span class="normal"> 51</span>
<span class="normal"> 52</span>
<span class="normal"> 53</span>
<span class="normal"> 54</span>
<span class="normal"> 55</span>
<span class="normal"> 56</span>
<span class="normal"> 57</span>
<span class="normal"> 58</span>
<span class="normal"> 59</span>
<span class="normal"> 60</span>
<span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpHost</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.AuthScope</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.UsernamePasswordCredentials</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.client.CredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.conn.ssl.NoopHostnameVerifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.BasicCredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.nio.client.HttpAsyncClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.nio.conn.ssl.SSLIOSessionStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.LogManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.Logger</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.Request</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.Response</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.RestClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.RestClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.common.Nullable</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.File</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.FileInputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.IOException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.InputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.KeyStore</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.SecureRandom</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.CertificateException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.X509Certificate</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Arrays</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.List</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Objects</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLContext</span><span class="p">;</span><span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManagerFactory</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.X509TrustManager</span><span class="p">;</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">RestLowLevelClientExample</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Logger</span><span class="w"> </span><span class="n">logger</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LogManager</span><span class="p">.</span><span class="na">getLogger</span><span class="p">(</span><span class="n">RestLowLevelClientExample</span><span class="p">.</span><span class="na">class</span><span class="p">);</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a class for the client. Define the create function.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="nf">create</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectionRequestTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">socketTimeout</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">password</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">BasicCredentialsProvider</span><span class="p">();</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">.</span><span class="na">setCredentials</span><span class="p">(</span><span class="n">AuthScope</span><span class="p">.</span><span class="na">ANY</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">UsernamePasswordCredentials</span><span class="p">(</span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">password</span><span class="p">));</span>
<span class="w"> </span><span class="n">SSLContext</span><span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">tm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="k">new</span><span class="w"> </span><span class="n">MyX509TrustManager</span><span class="p">(</span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)};</span>
<span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SSLContext</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SSL&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;SunJSSE&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="c1">//You can also use SSLContext sslContext = SSLContext.getInstance(&quot;TLSv1.2&quot;);</span>
<span class="w"> </span><span class="n">sc</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">tm</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecureRandom</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">Exception</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sessionStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="p">(</span><span class="n">sc</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NoopHostnameVerifier</span><span class="p">());</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="n">httpClientConfigCallback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="n">sessionStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClientBuilder</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RestClient</span><span class="p">.</span><span class="na">builder</span><span class="p">(</span><span class="n">constructHttpHosts</span><span class="p">(</span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setRequestConfigCallback</span><span class="p">(</span><span class="n">requestConfig</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">requestConfig</span><span class="p">.</span><span class="na">setConnectTimeout</span><span class="p">(</span><span class="n">connectTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setConnectionRequestTimeout</span><span class="p">(</span><span class="n">connectionRequestTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setSocketTimeout</span><span class="p">(</span><span class="n">socketTimeout</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setHttpClientConfigCallback</span><span class="p">(</span><span class="n">httpClientConfigCallback</span><span class="p">);</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">build</span><span class="p">();</span>
<span class="w"> </span><span class="n">logger</span><span class="p">.</span><span class="na">info</span><span class="p">(</span><span class="s">&quot;opensearch rest client build success {} &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">client</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">client</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Use the constructHttpHosts function to convert the node IP address list of the host cluster.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">HttpHost</span><span class="o">[]</span><span class="w"> </span><span class="nf">constructHttpHosts</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">host</span><span class="p">.</span><span class="na">stream</span><span class="p">().</span><span class="na">map</span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HttpHost</span><span class="p">(</span><span class="n">p</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">)).</span><span class="na">toArray</span><span class="p">(</span><span class="n">HttpHost</span><span class="o">[]</span><span class="p">::</span><span class="k">new</span><span class="p">);}</span>
<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">RestClientBuilder</span><span class="p">.</span><span class="na">HttpClientConfigCallback</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="nd">@Nullable</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">sslStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Objects</span><span class="p">.</span><span class="na">requireNonNull</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="nf">getCredentialsProvider</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="nf">getSSLStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="nf">customizeHttpClient</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setSSLStrategy</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setDefaultCredentialsProvider</span><span class="p">(</span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">;</span>
<span class="w"> </span><span class="p">}}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">MyX509TrustManager</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">X509TrustManager</span><span class="w"> </span><span class="n">sunJSSEX509TrustManager</span><span class="p">;</span>
<span class="w"> </span><span class="n">MyX509TrustManager</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">Exception</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">File</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">File</span><span class="p">(</span><span class="n">certFilePath</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">file</span><span class="p">.</span><span class="na">isFile</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Exception</span><span class="p">(</span><span class="s">&quot;Wrong Certification Path&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">&quot;Loading KeyStore &quot;</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">&quot;...&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">InputStream</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileInputStream</span><span class="p">(</span><span class="n">file</span><span class="p">);</span>
<span class="w"> </span><span class="n">KeyStore</span><span class="w"> </span><span class="n">ks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KeyStore</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;JKS&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">ks</span><span class="p">.</span><span class="na">load</span><span class="p">(</span><span class="n">in</span><span class="p">,</span><span class="w"> </span><span class="n">certPassword</span><span class="p">.</span><span class="na">toCharArray</span><span class="p">());</span>
<span class="w"> </span><span class="n">TrustManagerFactory</span><span class="w"> </span><span class="n">tmf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TrustManagerFactory</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SunX509&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;SunJSSE&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">tmf</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="n">ks</span><span class="p">);</span>
<span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">tms</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tmf</span><span class="p">.</span><span class="na">getTrustManagers</span><span class="p">();</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">TrustManager</span><span class="w"> </span><span class="n">tm</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">tms</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">tm</span><span class="w"> </span><span class="k">instanceof</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">sunJSSEX509TrustManager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">X509TrustManager</span><span class="p">)</span><span class="w"> </span><span class="n">tm</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Exception</span><span class="p">(</span><span class="s">&quot;Couldn't initialize&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkClientTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkServerTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="nf">getAcceptedIssuers</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * The following is an example of the main function. Call the create function to create a Low Level REST Client and check whether the test index exists.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">create</span><span class="p">(</span><span class="n">Arrays</span><span class="p">.</span><span class="na">asList</span><span class="p">(</span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">),</span><span class="w"> </span><span class="mi">9200</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;https&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;username&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;password&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;certFilePath&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;certPassword&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Request</span><span class="w"> </span><span class="n">request</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Request</span><span class="p">(</span><span class="s">&quot;HEAD&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;test&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Response</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">performRequest</span><span class="p">(</span><span class="n">request</span><span class="p">);</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="na">getStatusLine</span><span class="p">().</span><span class="na">getStatusCode</span><span class="p">());</span>
<span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="EN-US_TOPIC_0000001992165569__table147655327712" frame="border" border="1" rules="all"><caption><b>Table 3 </b>Function parameters</caption><thead align="left"><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row206481815102611"><th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.8.5.2.3.1.1"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p146481315122613">Parameter</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.8.5.2.3.1.2"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1664821532616">Description</p>
</th>
</tr>
</thead>
<tbody><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row164881519264"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1264812159264">host</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p126440284363">IP address for accessing the cluster. If there are multiple IP addresses, separate them with commas (,).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row86484154262"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p136481815152615">port</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p17648131512260">Access port of the cluster. The default value is <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b67871551528">9200</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row17648715122619"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p18648171510262">protocol</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p164819158263">Connection protocol. Set this parameter to <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b151301918522">https</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row13648201582613"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1464818153264">connectTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p10648181514261">Socket connection timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row10648151513262"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1064891532615">connectionRequestTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p3648141592614">Socket connection request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row9648161522617"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1164941582616">socketTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1649191532615">Socket request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1649141562617"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p764915150267">username</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p76491915122611">Username for accessing the cluster.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row664911156262"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p464916154264">password</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p064951512267">Password of the user.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1864910158268"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1964971512262">certFilePath</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p7649151514269">Path for storing the security certificate.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row264991542617"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p964921542615">certPassword</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.8.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1649151582619">Password of the security certificate.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p id="EN-US_TOPIC_0000001992165569__p19465151616596">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b123186225">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue1970973858"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue849645595"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section111701281216"><a name="EN-US_TOPIC_0000001992165569__section111701281216"></a><a name="section111701281216"></a><h4 class="sectiontitle">Connecting to a Non-Security Mode Cluster Using the OpenSearch High Level REST Client</h4><p id="EN-US_TOPIC_0000001992165569__p51527352211">Use the OpenSearch High Level REST Client to obtain the Low Level REST Client by calling <span class="parmname" id="EN-US_TOPIC_0000001992165569__parmname124719416518"><b>getLowLevelClient()</b></span>, use the low-level client to connect to an OpenSearch cluster for which the security mode is disabled, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b16471049514">test</strong> index exists. The sample code is as follows:</p>
<pre class="screen" id="EN-US_TOPIC_0000001992165569__screen10386183310313">import org.apache.http.HttpHost;
import org.opensearch.client.Request;
import org.opensearch.client.Response;
import org.opensearch.client.RestClient;
import org.opensearch.client.RestClientBuilder;
import org.opensearch.client.RestHighLevelClient;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class RestLowLevelClientExample {
public static void main(String[] args) throws IOException {
List&lt;String&gt; host = Arrays.asList("{Cluster access address}");
RestClientBuilder builder = RestClient.builder(constructHttpHosts(host, 9200, "http"));
final RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder);
/**
* Create a high-level client and then call getLowLevelClient() to obtain a low-level client. The code differs from the client creation code only in the following line:
*/
final RestClient lowLevelClient = restHighLevelClient.getLowLevelClient();
/**
* Check whether the <strong id="EN-US_TOPIC_0000001992165569__b139171611522">test</strong> index exists. If the index exists, 200 is returned. If the index does not exist, 404 is returned.
*/
Request request = new Request("HEAD", "/test");
Response response = lowLevelClient.performRequest(request);
System.out.println(response.getStatusLine().getStatusCode());
lowLevelClient.close();
}
/**
* Use the constructHttpHosts function to convert the node IP address list of the host cluster.
*/
public static HttpHost[] constructHttpHosts(List&lt;String&gt; host, int port, String protocol) {
return host.stream().map(p -&gt; new HttpHost(p, port, protocol)).toArray(HttpHost[]::new);
}
}</pre>
<p id="EN-US_TOPIC_0000001992165569__p191713814110">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b451632276">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue363889945"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue1987823274"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section138179151553"><a name="EN-US_TOPIC_0000001992165569__section138179151553"></a><a name="section138179151553"></a><h4 class="sectiontitle">Connecting to a Security-Mode Cluster Using the OpenSearch High Level REST Client (Without a Certificate)</h4><p id="EN-US_TOPIC_0000001992165569__p16817515655">Use the OpenSearch High Level REST Client to obtain the Low Level REST Client by calling <span class="parmname" id="EN-US_TOPIC_0000001992165569__parmname5860335185214"><b>getLowLevelClient()</b></span>, use the low-level client to connect to a security-mode OpenSearch cluster that uses HTTP or HTTPS without loading a security certificate, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b886163535211">test</strong> index exists. The sample code is as follows:</p>
<div class="codecoloring" codetype="Java" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001972416125_en-us_topic_0000001934179694_screen1754313547252"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
<span class="normal"> 19</span>
<span class="normal"> 20</span>
<span class="normal"> 21</span>
<span class="normal"> 22</span>
<span class="normal"> 23</span>
<span class="normal"> 24</span>
<span class="normal"> 25</span>
<span class="normal"> 26</span>
<span class="normal"> 27</span>
<span class="normal"> 28</span>
<span class="normal"> 29</span>
<span class="normal"> 30</span>
<span class="normal"> 31</span>
<span class="normal"> 32</span>
<span class="normal"> 33</span>
<span class="normal"> 34</span>
<span class="normal"> 35</span>
<span class="normal"> 36</span>
<span class="normal"> 37</span>
<span class="normal"> 38</span>
<span class="normal"> 39</span>
<span class="normal"> 40</span>
<span class="normal"> 41</span>
<span class="normal"> 42</span>
<span class="normal"> 43</span>
<span class="normal"> 44</span>
<span class="normal"> 45</span>
<span class="normal"> 46</span>
<span class="normal"> 47</span>
<span class="normal"> 48</span>
<span class="normal"> 49</span>
<span class="normal"> 50</span>
<span class="normal"> 51</span>
<span class="normal"> 52</span>
<span class="normal"> 53</span>
<span class="normal"> 54</span>
<span class="normal"> 55</span>
<span class="normal"> 56</span>
<span class="normal"> 57</span>
<span class="normal"> 58</span>
<span class="normal"> 59</span>
<span class="normal"> 60</span>
<span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span>
<span class="normal">161</span>
<span class="normal">162</span>
<span class="normal">163</span>
<span class="normal">164</span>
<span class="normal">165</span>
<span class="normal">166</span>
<span class="normal">167</span>
<span class="normal">168</span>
<span class="normal">169</span>
<span class="normal">170</span>
<span class="normal">171</span>
<span class="normal">172</span>
<span class="normal">173</span>
<span class="normal">174</span>
<span class="normal">175</span>
<span class="normal">176</span>
<span class="normal">177</span>
<span class="normal">178</span>
<span class="normal">179</span>
<span class="normal">180</span>
<span class="normal">181</span>
<span class="normal">182</span>
<span class="normal">183</span>
<span class="normal">184</span>
<span class="normal">185</span>
<span class="normal">186</span>
<span class="normal">187</span>
<span class="normal">188</span>
<span class="normal">189</span>
<span class="normal">190</span>
<span class="normal">191</span>
<span class="normal">192</span>
<span class="normal">193</span>
<span class="normal">194</span>
<span class="normal">195</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpHost</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpResponse</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.AuthScope</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.UsernamePasswordCredentials</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.client.CredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.BasicCredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.nio.client.HttpAsyncClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.nio.conn.ssl.SSLIOSessionStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.protocol.HttpContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.LogManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.Logger</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.Request</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.Response</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.RestClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.RestClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.RestHighLevelClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.common.Nullable</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.IOException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.KeyManagementException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.NoSuchAlgorithmException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.SecureRandom</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.CertificateException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.X509Certificate</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Arrays</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.List</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Objects</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.concurrent.TimeUnit</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.HostnameVerifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLSession</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManager</span><span class="p">;</span><span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.X509TrustManager</span><span class="p">;</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">RestLowLevelClientExample</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a class for the client. Define the create function.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="nf">create</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectionRequestTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">socketTimeout</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">password</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">BasicCredentialsProvider</span><span class="p">();</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">.</span><span class="na">setCredentials</span><span class="p">(</span><span class="n">AuthScope</span><span class="p">.</span><span class="na">ANY</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">UsernamePasswordCredentials</span><span class="p">(</span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">password</span><span class="p">));</span>
<span class="w"> </span><span class="n">SSLContext</span><span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SSLContext</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SSL&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">sc</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">trustAllCerts</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecureRandom</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">KeyManagementException</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">NoSuchAlgorithmException</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sessionStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="p">(</span><span class="n">sc</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NullHostNameVerifier</span><span class="p">());</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="n">httpClientConfigCallback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="n">sessionStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClientBuilder</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RestClient</span><span class="p">.</span><span class="na">builder</span><span class="p">(</span><span class="n">constructHttpHosts</span><span class="p">(</span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setRequestConfigCallback</span><span class="p">(</span><span class="n">requestConfig</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">requestConfig</span><span class="p">.</span><span class="na">setConnectTimeout</span><span class="p">(</span><span class="n">connectTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setConnectionRequestTimeout</span><span class="p">(</span><span class="n">connectionRequestTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setSocketTimeout</span><span class="p">(</span><span class="n">socketTimeout</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setHttpClientConfigCallback</span><span class="p">(</span><span class="n">httpClientConfigCallback</span><span class="p">);</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="p">(</span><span class="n">builder</span><span class="p">);</span>
<span class="w"> </span><span class="n">logger</span><span class="p">.</span><span class="na">info</span><span class="p">(</span><span class="s">&quot;opensearch rest client build success {} &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">client</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">client</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Use the constructHttpHosts function to convert the node IP address list of the host cluster.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">HttpHost</span><span class="o">[]</span><span class="w"> </span><span class="nf">constructHttpHosts</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">host</span><span class="p">.</span><span class="na">stream</span><span class="p">().</span><span class="na">map</span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HttpHost</span><span class="p">(</span><span class="n">p</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">)).</span><span class="na">toArray</span><span class="p">(</span><span class="n">HttpHost</span><span class="o">[]</span><span class="p">::</span><span class="k">new</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Configure trustAllCerts to ignore the certificate configuration.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">trustAllCerts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkClientTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkServerTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="nf">getAcceptedIssuers</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">};</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm">* The CustomConnectionKeepAliveStrategy function is used to set the connection keepalive during when there are a large number of short connections or when there are not many data requests.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">CustomConnectionKeepAliveStrategy</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">DefaultConnectionKeepAliveStrategy</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CustomConnectionKeepAliveStrategy</span><span class="w"> </span><span class="n">INSTANCE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">CustomConnectionKeepAliveStrategy</span><span class="p">();</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="nf">CustomConnectionKeepAliveStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">super</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Maximum keepalive time (in minutes)</span>
<span class="cm"> * The default value is 10 minutes. You can set it based on the number of TCP connections in TIME_WAIT state. If there are too many TCP connections, you can increase this value.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">MAX_KEEP_ALIVE_MINUTES</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="nf">getKeepAliveDuration</span><span class="p">(</span><span class="n">HttpResponse</span><span class="w"> </span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">HttpContext</span><span class="w"> </span><span class="n">context</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">keepAliveDuration</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">super</span><span class="p">.</span><span class="na">getKeepAliveDuration</span><span class="p">(</span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">context</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// &lt;0 indicates an unlimited keepalive period.</span>
<span class="w"> </span><span class="c1">// Change the period from unlimited to a default period.</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">keepAliveDuration</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">TimeUnit</span><span class="p">.</span><span class="na">MINUTES</span><span class="p">.</span><span class="na">toMillis</span><span class="p">(</span><span class="n">MAX_KEEP_ALIVE_MINUTES</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">keepAliveDuration</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Logger</span><span class="w"> </span><span class="n">logger</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LogManager</span><span class="p">.</span><span class="na">getLogger</span><span class="p">(</span><span class="n">RestLowLevelClientExample</span><span class="p">.</span><span class="na">class</span><span class="p">);</span>
<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">RestClientBuilder</span><span class="p">.</span><span class="na">HttpClientConfigCallback</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * The {@link SSLIOSessionStrategy} for all requests to enable SSL / TLS encryption.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a new {@link SecuredHttpClientConfigCallback}.</span>
<span class="cm"> *</span>
<span class="cm"> * @param credentialsProvider The credential provider, if a username/password have been supplied</span>
<span class="cm"> * @param sslStrategy The SSL strategy, if SSL / TLS have been supplied</span>
<span class="cm"> * @throws NullPointerException if {@code sslStrategy} is {@code null}</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="nd">@Nullable</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">sslStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Objects</span><span class="p">.</span><span class="na">requireNonNull</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Get the {@link CredentialsProvider} that will be added to the HTTP client.</span>
<span class="cm"> *</span>
<span class="cm"> * @return Can be {@code null}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="nf">getCredentialsProvider</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Get the {@link SSLIOSessionStrategy} that will be added to the HTTP client.</span>
<span class="cm"> *</span>
<span class="cm"> * @return Never {@code null}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="nf">getSSLStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Sets the {@linkplain HttpAsyncClientBuilder#setDefaultCredentialsProvider(CredentialsProvider) credential provider},</span>
<span class="cm"> *</span>
<span class="cm"> * @param httpClientBuilder The client to configure.</span>
<span class="cm"> * @return Always {@code httpClientBuilder}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="nf">customizeHttpClient</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// enable SSL / TLS</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setSSLStrategy</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// enable user authentication</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setDefaultCredentialsProvider</span><span class="p">(</span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">NullHostNameVerifier</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">HostnameVerifier</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">arg0</span><span class="p">,</span><span class="w"> </span><span class="n">SSLSession</span><span class="w"> </span><span class="n">arg1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm">* The following is an example of the main function. Call the create function to create the high-level client, then call the getLowLevelClient() function to obtain the low-level client, and query whether the test index exists.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">create</span><span class="p">(</span><span class="n">Arrays</span><span class="p">.</span><span class="na">asList</span><span class="p">(</span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">),</span><span class="w"> </span><span class="mi">9200</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;username&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;password&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="na">getLowLevelClient</span><span class="p">();</span>
<span class="w"> </span><span class="n">Request</span><span class="w"> </span><span class="n">request</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Request</span><span class="p">(</span><span class="s">&quot;HEAD&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;test&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Response</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">performRequest</span><span class="p">(</span><span class="n">request</span><span class="p">);</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="na">getStatusLine</span><span class="p">().</span><span class="na">getStatusCode</span><span class="p">());</span>
<span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="EN-US_TOPIC_0000001992165569__table8823201510513" frame="border" border="1" rules="all"><caption><b>Table 4 </b>Variables</caption><thead align="left"><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row15833437142513_1"><th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.10.4.2.3.1.1"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p198331837112510_1">Parameter</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.10.4.2.3.1.2"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1783383762518_1">Description</p>
</th>
</tr>
</thead>
<tbody><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row383320375257_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p15833153752514_1">host</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p18833143722511_1">IP address for accessing the cluster. If there are multiple IP addresses, separate them with commas (,).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row128330374257_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p783393711258_1">port</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p683383742515_1">Access port of the cluster. The default value is <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b130391213393754_1">9200</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row168338373258_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p20833103732519_1">protocol</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p3833173717256_1">Connection protocol, which can be <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_parmvalue181861130593754_1"><b>http</b></span> or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_parmvalue190485073093754_1"><b>https</b></span>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1783383719259_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1883393722511_1">connectTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p58331737132519_1">Socket connection timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row383303742519_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1983373711259_1">connectionRequestTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1283415379254_1">Socket connection request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row14834037102517_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p138341371258_1">socketTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p4834153732515_1">Socket request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row148340375259_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1834153762511_1">username</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1183412376255_1">Username for accessing the cluster.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row208346377257_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p12834183715254_1">password</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.10.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1083473782518_1">Password of the user.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p id="EN-US_TOPIC_0000001992165569__p5825161510519">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b1659866699">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue1379065210"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue647300009"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section14343162220160"><a name="EN-US_TOPIC_0000001992165569__section14343162220160"></a><a name="section14343162220160"></a><h4 class="sectiontitle">Connecting to a Security-Mode Cluster Using the OpenSearch High Level REST Client (With a Certificate)</h4><p id="EN-US_TOPIC_0000001992165569__p1734314226167">Use the OpenSearch High Level REST Client to connect to a security-mode OpenSearch cluster that uses HTTPS with a security certificate loaded, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b1008812859101123">test</strong> index exists. The sample code is as follows:</p>
<div class="caution" id="EN-US_TOPIC_0000001992165569__note123439229161"><span class="cautiontitle"><img src="public_sys-resources/caution_3.0-en-us.png"> </span><div class="cautionbody"><p id="EN-US_TOPIC_0000001992165569__p11343142211612">For how to obtain and upload a security certificate, see <a href="#EN-US_TOPIC_0000001992165569__section697213217486">Obtaining and Uploading a Security Certificate</a>.</p>
</div></div>
<div class="codecoloring" codetype="Java" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001972416125_en-us_topic_0000001934179694_screen92844042615"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
<span class="normal"> 19</span>
<span class="normal"> 20</span>
<span class="normal"> 21</span>
<span class="normal"> 22</span>
<span class="normal"> 23</span>
<span class="normal"> 24</span>
<span class="normal"> 25</span>
<span class="normal"> 26</span>
<span class="normal"> 27</span>
<span class="normal"> 28</span>
<span class="normal"> 29</span>
<span class="normal"> 30</span>
<span class="normal"> 31</span>
<span class="normal"> 32</span>
<span class="normal"> 33</span>
<span class="normal"> 34</span>
<span class="normal"> 35</span>
<span class="normal"> 36</span>
<span class="normal"> 37</span>
<span class="normal"> 38</span>
<span class="normal"> 39</span>
<span class="normal"> 40</span>
<span class="normal"> 41</span>
<span class="normal"> 42</span>
<span class="normal"> 43</span>
<span class="normal"> 44</span>
<span class="normal"> 45</span>
<span class="normal"> 46</span>
<span class="normal"> 47</span>
<span class="normal"> 48</span>
<span class="normal"> 49</span>
<span class="normal"> 50</span>
<span class="normal"> 51</span>
<span class="normal"> 52</span>
<span class="normal"> 53</span>
<span class="normal"> 54</span>
<span class="normal"> 55</span>
<span class="normal"> 56</span>
<span class="normal"> 57</span>
<span class="normal"> 58</span>
<span class="normal"> 59</span>
<span class="normal"> 60</span>
<span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpHost</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.AuthScope</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.UsernamePasswordCredentials</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.client.CredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.conn.ssl.NoopHostnameVerifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.BasicCredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.nio.client.HttpAsyncClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.nio.conn.ssl.SSLIOSessionStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.LogManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.Logger</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.action.admin.cluster.health.ClusterHealthRequest</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.action.admin.cluster.health.ClusterHealthResponse</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.Request</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.RequestOptions</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.Response</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.RestClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.RestClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.client.RestHighLevelClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.opensearch.common.Nullable</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.File</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.FileInputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.IOException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.InputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.KeyStore</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.SecureRandom</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.CertificateException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.X509Certificate</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Arrays</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.List</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Objects</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManagerFactory</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.X509TrustManager</span><span class="p">;</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">RestLowLevelClientExample</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Logger</span><span class="w"> </span><span class="n">logger</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LogManager</span><span class="p">.</span><span class="na">getLogger</span><span class="p">(</span><span class="n">RestLowLevelClientExample</span><span class="p">.</span><span class="na">class</span><span class="p">);</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a class for the client. Define the create function.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="nf">create</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectionRequestTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">socketTimeout</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">password</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">BasicCredentialsProvider</span><span class="p">();</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">.</span><span class="na">setCredentials</span><span class="p">(</span><span class="n">AuthScope</span><span class="p">.</span><span class="na">ANY</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">UsernamePasswordCredentials</span><span class="p">(</span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">password</span><span class="p">));</span>
<span class="w"> </span><span class="n">SSLContext</span><span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">tm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="k">new</span><span class="w"> </span><span class="n">MyX509TrustManager</span><span class="p">(</span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)};</span>
<span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SSLContext</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SSL&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;SunJSSE&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="c1">//You can also use SSLContext sslContext = SSLContext.getInstance(&quot;TLSv1.2&quot;);</span>
<span class="w"> </span><span class="n">sc</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">tm</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecureRandom</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">Exception</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sessionStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="p">(</span><span class="n">sc</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NoopHostnameVerifier</span><span class="p">());</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="n">httpClientConfigCallback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="n">sessionStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClientBuilder</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RestClient</span><span class="p">.</span><span class="na">builder</span><span class="p">(</span><span class="n">constructHttpHosts</span><span class="p">(</span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setRequestConfigCallback</span><span class="p">(</span><span class="n">requestConfig</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">requestConfig</span><span class="p">.</span><span class="na">setConnectTimeout</span><span class="p">(</span><span class="n">connectTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setConnectionRequestTimeout</span><span class="p">(</span><span class="n">connectionRequestTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setSocketTimeout</span><span class="p">(</span><span class="n">socketTimeout</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setHttpClientConfigCallback</span><span class="p">(</span><span class="n">httpClientConfigCallback</span><span class="p">);</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="p">(</span><span class="n">builder</span><span class="p">);</span>
<span class="w"> </span><span class="n">logger</span><span class="p">.</span><span class="na">info</span><span class="p">(</span><span class="s">&quot;opensearch rest client build success {} &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">client</span><span class="p">);</span>
<span class="w"> </span><span class="n">ClusterHealthRequest</span><span class="w"> </span><span class="n">request</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ClusterHealthRequest</span><span class="p">();</span>
<span class="w"> </span><span class="n">ClusterHealthResponse</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="na">cluster</span><span class="p">().</span><span class="na">health</span><span class="p">(</span><span class="n">request</span><span class="p">,</span><span class="w"> </span><span class="n">RequestOptions</span><span class="p">.</span><span class="na">DEFAULT</span><span class="p">);</span>
<span class="w"> </span><span class="n">logger</span><span class="p">.</span><span class="na">info</span><span class="p">(</span><span class="s">&quot;opensearch rest client health response {} &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">response</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">client</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Use the constructHttpHosts function to convert the node IP address list of the host cluster.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">HttpHost</span><span class="o">[]</span><span class="w"> </span><span class="nf">constructHttpHosts</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">host</span><span class="p">.</span><span class="na">stream</span><span class="p">().</span><span class="na">map</span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HttpHost</span><span class="p">(</span><span class="n">p</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">)).</span><span class="na">toArray</span><span class="p">(</span><span class="n">HttpHost</span><span class="o">[]</span><span class="p">::</span><span class="k">new</span><span class="p">);}</span>
<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">RestClientBuilder</span><span class="p">.</span><span class="na">HttpClientConfigCallback</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="nd">@Nullable</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">sslStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Objects</span><span class="p">.</span><span class="na">requireNonNull</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="nf">getCredentialsProvider</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="nf">getSSLStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="nf">customizeHttpClient</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setSSLStrategy</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setDefaultCredentialsProvider</span><span class="p">(</span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">;</span>
<span class="w"> </span><span class="p">}}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">MyX509TrustManager</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">X509TrustManager</span><span class="w"> </span><span class="n">sunJSSEX509TrustManager</span><span class="p">;</span>
<span class="w"> </span><span class="n">MyX509TrustManager</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">Exception</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">File</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">File</span><span class="p">(</span><span class="n">certFilePath</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">file</span><span class="p">.</span><span class="na">isFile</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Exception</span><span class="p">(</span><span class="s">&quot;Wrong Certification Path&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">&quot;Loading KeyStore &quot;</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">&quot;...&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">InputStream</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileInputStream</span><span class="p">(</span><span class="n">file</span><span class="p">);</span>
<span class="w"> </span><span class="n">KeyStore</span><span class="w"> </span><span class="n">ks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KeyStore</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;JKS&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">ks</span><span class="p">.</span><span class="na">load</span><span class="p">(</span><span class="n">in</span><span class="p">,</span><span class="w"> </span><span class="n">certPassword</span><span class="p">.</span><span class="na">toCharArray</span><span class="p">());</span>
<span class="w"> </span><span class="n">TrustManagerFactory</span><span class="w"> </span><span class="n">tmf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TrustManagerFactory</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SunX509&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;SunJSSE&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">tmf</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="n">ks</span><span class="p">);</span>
<span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">tms</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tmf</span><span class="p">.</span><span class="na">getTrustManagers</span><span class="p">();</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">TrustManager</span><span class="w"> </span><span class="n">tm</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">tms</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">tm</span><span class="w"> </span><span class="k">instanceof</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">sunJSSEX509TrustManager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">X509TrustManager</span><span class="p">)</span><span class="w"> </span><span class="n">tm</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Exception</span><span class="p">(</span><span class="s">&quot;Couldn't initialize&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkClientTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkServerTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="nf">getAcceptedIssuers</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm">* The following is an example of the main function. Call the create function to create the high-level client, then call the getLowLevelClient() function to obtain the low-level client, and query whether the test index exists.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">create</span><span class="p">(</span><span class="n">Arrays</span><span class="p">.</span><span class="na">asList</span><span class="p">(</span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">),</span><span class="w"> </span><span class="mi">9200</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;https&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;username&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;password&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;certFilePath&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;certPassword&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="na">getLowLevelClient</span><span class="p">();</span>
<span class="w"> </span><span class="n">Request</span><span class="w"> </span><span class="n">request</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Request</span><span class="p">(</span><span class="s">&quot;HEAD&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;test&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Response</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">performRequest</span><span class="p">(</span><span class="n">request</span><span class="p">);</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="na">getStatusLine</span><span class="p">().</span><span class="na">getStatusCode</span><span class="p">());</span>
<span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="EN-US_TOPIC_0000001992165569__table153479221165" frame="border" border="1" rules="all"><caption><b>Table 5 </b>Function parameters</caption><thead align="left"><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row206481815102611_1"><th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.11.5.2.3.1.1"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p146481315122613_1">Parameter</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.11.5.2.3.1.2"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1664821532616_1">Description</p>
</th>
</tr>
</thead>
<tbody><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row164881519264_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1264812159264_1">host</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p126440284363_1">IP address for accessing the cluster. If there are multiple IP addresses, separate them with commas (,).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row86484154262_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p136481815152615_1">port</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p17648131512260_1">Access port of the cluster. The default value is <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b67871551528_1">9200</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row17648715122619_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p18648171510262_1">protocol</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p164819158263_1">Connection protocol. Set this parameter to <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b151301918522_1">https</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row13648201582613_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1464818153264_1">connectTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p10648181514261_1">Socket connection timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row10648151513262_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1064891532615_1">connectionRequestTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p3648141592614_1">Socket connection request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row9648161522617_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1164941582616_1">socketTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1649191532615_1">Socket request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1649141562617_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p764915150267_1">username</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p76491915122611_1">Username for accessing the cluster.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row664911156262_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p464916154264_1">password</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p064951512267_1">Password of the user.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1864910158268_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1964971512262_1">certFilePath</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p7649151514269_1">Path for storing the security certificate.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row264991542617_1"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p964921542615_1">certPassword</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.11.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1649151582619_1">Password of the security certificate.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p id="EN-US_TOPIC_0000001992165569__p93492225164">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b317878943">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue1593685992"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue1399167318"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section215365104713"><a name="EN-US_TOPIC_0000001992165569__section215365104713"></a><a name="section215365104713"></a><h4 class="sectiontitle">Connecting to a Non-Security Mode Cluster Using the Elasticsearch Low Level REST Client</h4><p id="EN-US_TOPIC_0000001992165569__p115320544712">Use the Elasticsearch 7.10.2 Low Level REST Client to connect to an OpenSearch cluster for which the security mode is disabled, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b172147502335">test</strong> index exists. The sample code is as follows:</p>
<pre class="screen" id="EN-US_TOPIC_0000001992165569__screen315311510479">import org.apache.http.HttpHost;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class RestLowLevelClientExample {
public static void main(String[] args) throws IOException {
List&lt;String&gt; host = Arrays.asList("{Cluster access address}");
RestClientBuilder builder = RestClient.builder(constructHttpHosts(host, 9200, "http"));
/**
*Create the Low Level Rest Client.
*/
RestClient lowLevelClient = builder.build();
/**
* Check whether the <strong id="EN-US_TOPIC_0000001992165569__b20116345115413">test</strong> index exists. If the index exists, 200 is returned. If the index does not exist, 404 is returned.
*/
Request request = new Request("HEAD", "/test");
Response response = lowLevelClient.performRequest(request);
System.out.println(response.getStatusLine().getStatusCode());
lowLevelClient.close();
}
/**
* Use the constructHttpHosts function to convert the node IP address list of the host cluster.
*/
public static HttpHost[] constructHttpHosts(List&lt;String&gt; host, int port, String protocol) {
return host.stream().map(p -&gt; new HttpHost(p, port, protocol)).toArray(HttpHost[]::new);
}
}</pre>
<p id="EN-US_TOPIC_0000001992165569__p41540574713">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b973942450">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue521255832"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue1415468334"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section361711128499"><a name="EN-US_TOPIC_0000001992165569__section361711128499"></a><a name="section361711128499"></a><h4 class="sectiontitle">Connecting to a Security-Mode Cluster Using the Elasticsearch Low Level REST Client (Without a Certificate)</h4><p id="EN-US_TOPIC_0000001992165569__p18617112104912">Use the Elasticsearch 7.10.2 Low Level REST Client to connect to a security-mode OpenSearch cluster (HTTP or HTTPS) without loading a security certificate, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b46033379101123">test</strong> index exists. The sample code is as follows:</p>
<div class="codecoloring" codetype="Java" id="EN-US_TOPIC_0000001992165569__screen126177124495"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
<span class="normal"> 19</span>
<span class="normal"> 20</span>
<span class="normal"> 21</span>
<span class="normal"> 22</span>
<span class="normal"> 23</span>
<span class="normal"> 24</span>
<span class="normal"> 25</span>
<span class="normal"> 26</span>
<span class="normal"> 27</span>
<span class="normal"> 28</span>
<span class="normal"> 29</span>
<span class="normal"> 30</span>
<span class="normal"> 31</span>
<span class="normal"> 32</span>
<span class="normal"> 33</span>
<span class="normal"> 34</span>
<span class="normal"> 35</span>
<span class="normal"> 36</span>
<span class="normal"> 37</span>
<span class="normal"> 38</span>
<span class="normal"> 39</span>
<span class="normal"> 40</span>
<span class="normal"> 41</span>
<span class="normal"> 42</span>
<span class="normal"> 43</span>
<span class="normal"> 44</span>
<span class="normal"> 45</span>
<span class="normal"> 46</span>
<span class="normal"> 47</span>
<span class="normal"> 48</span>
<span class="normal"> 49</span>
<span class="normal"> 50</span>
<span class="normal"> 51</span>
<span class="normal"> 52</span>
<span class="normal"> 53</span>
<span class="normal"> 54</span>
<span class="normal"> 55</span>
<span class="normal"> 56</span>
<span class="normal"> 57</span>
<span class="normal"> 58</span>
<span class="normal"> 59</span>
<span class="normal"> 60</span>
<span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span>
<span class="normal">161</span>
<span class="normal">162</span>
<span class="normal">163</span>
<span class="normal">164</span>
<span class="normal">165</span>
<span class="normal">166</span>
<span class="normal">167</span>
<span class="normal">168</span>
<span class="normal">169</span>
<span class="normal">170</span>
<span class="normal">171</span>
<span class="normal">172</span>
<span class="normal">173</span>
<span class="normal">174</span>
<span class="normal">175</span>
<span class="normal">176</span>
<span class="normal">177</span>
<span class="normal">178</span>
<span class="normal">179</span>
<span class="normal">180</span>
<span class="normal">181</span>
<span class="normal">182</span>
<span class="normal">183</span>
<span class="normal">184</span>
<span class="normal">185</span>
<span class="normal">186</span>
<span class="normal">187</span>
<span class="normal">188</span>
<span class="normal">189</span>
<span class="normal">190</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpHost</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpResponse</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.AuthScope</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.UsernamePasswordCredentials</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.client.CredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.BasicCredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.nio.client.HttpAsyncClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.nio.conn.ssl.SSLIOSessionStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.protocol.HttpContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.LogManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.Logger</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.Request</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.Response</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.common.Nullable</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.IOException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.KeyManagementException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.NoSuchAlgorithmException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.SecureRandom</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.CertificateException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.X509Certificate</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Arrays</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.List</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Objects</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.concurrent.TimeUnit</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.HostnameVerifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLSession</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManager</span><span class="p">;</span><span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.X509TrustManager</span><span class="p">;</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">RestLowLevelClientExample</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a class for the client. Define the create function.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="nf">create</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectionRequestTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">socketTimeout</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">password</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">BasicCredentialsProvider</span><span class="p">();</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">.</span><span class="na">setCredentials</span><span class="p">(</span><span class="n">AuthScope</span><span class="p">.</span><span class="na">ANY</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">UsernamePasswordCredentials</span><span class="p">(</span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">password</span><span class="p">));</span>
<span class="w"> </span><span class="n">SSLContext</span><span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SSLContext</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SSL&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">sc</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">trustAllCerts</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecureRandom</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">KeyManagementException</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">NoSuchAlgorithmException</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sessionStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="p">(</span><span class="n">sc</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NullHostNameVerifier</span><span class="p">());</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="n">httpClientConfigCallback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="n">sessionStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClientBuilder</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RestClient</span><span class="p">.</span><span class="na">builder</span><span class="p">(</span><span class="n">constructHttpHosts</span><span class="p">(</span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setRequestConfigCallback</span><span class="p">(</span><span class="n">requestConfig</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">requestConfig</span><span class="p">.</span><span class="na">setConnectTimeout</span><span class="p">(</span><span class="n">connectTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setConnectionRequestTimeout</span><span class="p">(</span><span class="n">connectionRequestTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setSocketTimeout</span><span class="p">(</span><span class="n">socketTimeout</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setHttpClientConfigCallback</span><span class="p">(</span><span class="n">httpClientConfigCallback</span><span class="p">);</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">build</span><span class="p">();</span>
<span class="w"> </span><span class="n">logger</span><span class="p">.</span><span class="na">info</span><span class="p">(</span><span class="s">&quot;es rest client build success {} &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">client</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">client</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Use the constructHttpHosts function to convert the node IP address list of the host cluster.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">HttpHost</span><span class="o">[]</span><span class="w"> </span><span class="nf">constructHttpHosts</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">host</span><span class="p">.</span><span class="na">stream</span><span class="p">().</span><span class="na">map</span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HttpHost</span><span class="p">(</span><span class="n">p</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">)).</span><span class="na">toArray</span><span class="p">(</span><span class="n">HttpHost</span><span class="o">[]</span><span class="p">::</span><span class="k">new</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Configure trustAllCerts to ignore the certificate configuration.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">trustAllCerts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkClientTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkServerTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="nf">getAcceptedIssuers</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">};</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm">* The CustomConnectionKeepAliveStrategy function is used to set the connection keepalive during when there are a large number of short connections or when there are not many data requests.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">CustomConnectionKeepAliveStrategy</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">DefaultConnectionKeepAliveStrategy</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CustomConnectionKeepAliveStrategy</span><span class="w"> </span><span class="n">INSTANCE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">CustomConnectionKeepAliveStrategy</span><span class="p">();</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="nf">CustomConnectionKeepAliveStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">super</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Maximum keepalive time (in minutes)</span>
<span class="cm"> * The default value is 10 minutes. You can set it based on the number of TCP connections in TIME_WAIT state. If there are too many TCP connections, you can increase this value.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">MAX_KEEP_ALIVE_MINUTES</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="nf">getKeepAliveDuration</span><span class="p">(</span><span class="n">HttpResponse</span><span class="w"> </span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">HttpContext</span><span class="w"> </span><span class="n">context</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">keepAliveDuration</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">super</span><span class="p">.</span><span class="na">getKeepAliveDuration</span><span class="p">(</span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">context</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// &lt;0 indicates an unlimited keepalive period.</span>
<span class="w"> </span><span class="c1">// Change the period from unlimited to a default period.</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">keepAliveDuration</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">TimeUnit</span><span class="p">.</span><span class="na">MINUTES</span><span class="p">.</span><span class="na">toMillis</span><span class="p">(</span><span class="n">MAX_KEEP_ALIVE_MINUTES</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">keepAliveDuration</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Logger</span><span class="w"> </span><span class="n">logger</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LogManager</span><span class="p">.</span><span class="na">getLogger</span><span class="p">(</span><span class="n">RestLowLevelClientExample</span><span class="p">.</span><span class="na">class</span><span class="p">);</span>
<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">RestClientBuilder</span><span class="p">.</span><span class="na">HttpClientConfigCallback</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * The {@link SSLIOSessionStrategy} for all requests to enable SSL / TLS encryption.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a new {@link SecuredHttpClientConfigCallback}.</span>
<span class="cm"> *</span>
<span class="cm"> * @param credentialsProvider The credential provider, if a username/password have been supplied</span>
<span class="cm"> * @param sslStrategy The SSL strategy, if SSL / TLS have been supplied</span>
<span class="cm"> * @throws NullPointerException if {@code sslStrategy} is {@code null}</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="nd">@Nullable</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">sslStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Objects</span><span class="p">.</span><span class="na">requireNonNull</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Get the {@link CredentialsProvider} that will be added to the HTTP client.</span>
<span class="cm"> *</span>
<span class="cm"> * @return Can be {@code null}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="nf">getCredentialsProvider</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Get the {@link SSLIOSessionStrategy} that will be added to the HTTP client.</span>
<span class="cm"> *</span>
<span class="cm"> * @return Never {@code null}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="nf">getSSLStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Sets the {@linkplain HttpAsyncClientBuilder#setDefaultCredentialsProvider(CredentialsProvider) credential provider},</span>
<span class="cm"> *</span>
<span class="cm"> * @param httpClientBuilder The client to configure.</span>
<span class="cm"> * @return Always {@code httpClientBuilder}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="nf">customizeHttpClient</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// enable SSL / TLS</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setSSLStrategy</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// enable user authentication</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setDefaultCredentialsProvider</span><span class="p">(</span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">NullHostNameVerifier</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">HostnameVerifier</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">arg0</span><span class="p">,</span><span class="w"> </span><span class="n">SSLSession</span><span class="w"> </span><span class="n">arg1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * The following is an example of the main function. Call the create function to create a Low Level REST Client and check whether the test index exists.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">create</span><span class="p">(</span><span class="n">Arrays</span><span class="p">.</span><span class="na">asList</span><span class="p">(</span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">),</span><span class="w"> </span><span class="mi">9200</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;username&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;password&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Request</span><span class="w"> </span><span class="n">request</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Request</span><span class="p">(</span><span class="s">&quot;HEAD&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;/test&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Response</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">performRequest</span><span class="p">(</span><span class="n">request</span><span class="p">);</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="na">getStatusLine</span><span class="p">().</span><span class="na">getStatusCode</span><span class="p">());</span>
<span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="EN-US_TOPIC_0000001992165569__table14620412124912" frame="border" border="1" rules="all"><caption><b>Table 6 </b>Variables</caption><thead align="left"><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row15833437142513_2"><th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.13.4.2.3.1.1"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p198331837112510_2">Parameter</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.13.4.2.3.1.2"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1783383762518_2">Description</p>
</th>
</tr>
</thead>
<tbody><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row383320375257_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p15833153752514_2">host</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p18833143722511_2">IP address for accessing the cluster. If there are multiple IP addresses, separate them with commas (,).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row128330374257_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p783393711258_2">port</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p683383742515_2">Access port of the cluster. The default value is <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b130391213393754_2">9200</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row168338373258_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p20833103732519_2">protocol</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p3833173717256_2">Connection protocol, which can be <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_parmvalue181861130593754_2"><b>http</b></span> or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_parmvalue190485073093754_2"><b>https</b></span>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1783383719259_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1883393722511_2">connectTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p58331737132519_2">Socket connection timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row383303742519_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1983373711259_2">connectionRequestTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1283415379254_2">Socket connection request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row14834037102517_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p138341371258_2">socketTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p4834153732515_2">Socket request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row148340375259_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1834153762511_2">username</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1183412376255_2">Username for accessing the cluster.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row208346377257_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p12834183715254_2">password</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.13.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1083473782518_2">Password of the user.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p id="EN-US_TOPIC_0000001992165569__p116201212134911">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b486477744">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue2004646681"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue1979700239"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section16431305115"><a name="EN-US_TOPIC_0000001992165569__section16431305115"></a><a name="section16431305115"></a><h4 class="sectiontitle">Connecting to a Security-Mode Cluster Using the Elasticsearch Low Level REST Client (With a Certificate)</h4><p id="EN-US_TOPIC_0000001992165569__p064113105119">Use the Elasticsearch 7.10.2 Low Level REST Client to connect to a security-mode OpenSearch cluster that uses HTTPS with a security certificate loaded, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b1268530752101123">test</strong> index exists. The sample code is as follows:</p>
<div class="caution" id="EN-US_TOPIC_0000001992165569__note1364413165117"><span class="cautiontitle"><img src="public_sys-resources/caution_3.0-en-us.png"> </span><div class="cautionbody"><p id="EN-US_TOPIC_0000001992165569__p664141315112">For how to obtain and upload a security certificate, see <a href="#EN-US_TOPIC_0000001992165569__section697213217486">Obtaining and Uploading a Security Certificate</a>.</p>
</div></div>
<div class="codecoloring" codetype="Java" id="EN-US_TOPIC_0000001992165569__screen1964313185113"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
<span class="normal"> 19</span>
<span class="normal"> 20</span>
<span class="normal"> 21</span>
<span class="normal"> 22</span>
<span class="normal"> 23</span>
<span class="normal"> 24</span>
<span class="normal"> 25</span>
<span class="normal"> 26</span>
<span class="normal"> 27</span>
<span class="normal"> 28</span>
<span class="normal"> 29</span>
<span class="normal"> 30</span>
<span class="normal"> 31</span>
<span class="normal"> 32</span>
<span class="normal"> 33</span>
<span class="normal"> 34</span>
<span class="normal"> 35</span>
<span class="normal"> 36</span>
<span class="normal"> 37</span>
<span class="normal"> 38</span>
<span class="normal"> 39</span>
<span class="normal"> 40</span>
<span class="normal"> 41</span>
<span class="normal"> 42</span>
<span class="normal"> 43</span>
<span class="normal"> 44</span>
<span class="normal"> 45</span>
<span class="normal"> 46</span>
<span class="normal"> 47</span>
<span class="normal"> 48</span>
<span class="normal"> 49</span>
<span class="normal"> 50</span>
<span class="normal"> 51</span>
<span class="normal"> 52</span>
<span class="normal"> 53</span>
<span class="normal"> 54</span>
<span class="normal"> 55</span>
<span class="normal"> 56</span>
<span class="normal"> 57</span>
<span class="normal"> 58</span>
<span class="normal"> 59</span>
<span class="normal"> 60</span>
<span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpHost</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.AuthScope</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.UsernamePasswordCredentials</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.client.CredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.conn.ssl.NoopHostnameVerifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.BasicCredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.nio.client.HttpAsyncClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.nio.conn.ssl.SSLIOSessionStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.LogManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.Logger</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.Request</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.Response</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.common.Nullable</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.File</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.FileInputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.IOException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.InputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.KeyStore</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.SecureRandom</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.CertificateException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.X509Certificate</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Arrays</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.List</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Objects</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLContext</span><span class="p">;</span><span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManagerFactory</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.X509TrustManager</span><span class="p">;</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">RestLowLevelClientExample</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Logger</span><span class="w"> </span><span class="n">logger</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LogManager</span><span class="p">.</span><span class="na">getLogger</span><span class="p">(</span><span class="n">RestLowLevelClientExample</span><span class="p">.</span><span class="na">class</span><span class="p">);</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a class for the client. Define the create function.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="nf">create</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectionRequestTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">socketTimeout</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">password</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">BasicCredentialsProvider</span><span class="p">();</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">.</span><span class="na">setCredentials</span><span class="p">(</span><span class="n">AuthScope</span><span class="p">.</span><span class="na">ANY</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">UsernamePasswordCredentials</span><span class="p">(</span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">password</span><span class="p">));</span>
<span class="w"> </span><span class="n">SSLContext</span><span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">tm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="k">new</span><span class="w"> </span><span class="n">MyX509TrustManager</span><span class="p">(</span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)};</span>
<span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SSLContext</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SSL&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;SunJSSE&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="c1">//You can also use SSLContext sslContext = SSLContext.getInstance(&quot;TLSv1.2&quot;);</span>
<span class="w"> </span><span class="n">sc</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">tm</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecureRandom</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">Exception</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sessionStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="p">(</span><span class="n">sc</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NoopHostnameVerifier</span><span class="p">());</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="n">httpClientConfigCallback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="n">sessionStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClientBuilder</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RestClient</span><span class="p">.</span><span class="na">builder</span><span class="p">(</span><span class="n">constructHttpHosts</span><span class="p">(</span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setRequestConfigCallback</span><span class="p">(</span><span class="n">requestConfig</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">requestConfig</span><span class="p">.</span><span class="na">setConnectTimeout</span><span class="p">(</span><span class="n">connectTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setConnectionRequestTimeout</span><span class="p">(</span><span class="n">connectionRequestTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setSocketTimeout</span><span class="p">(</span><span class="n">socketTimeout</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setHttpClientConfigCallback</span><span class="p">(</span><span class="n">httpClientConfigCallback</span><span class="p">);</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">builder</span><span class="p">.</span><span class="na">build</span><span class="p">();</span>
<span class="w"> </span><span class="n">logger</span><span class="p">.</span><span class="na">info</span><span class="p">(</span><span class="s">&quot;es rest client build success {} &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">client</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">client</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Use the constructHttpHosts function to convert the node IP address list of the host cluster.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">HttpHost</span><span class="o">[]</span><span class="w"> </span><span class="nf">constructHttpHosts</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">host</span><span class="p">.</span><span class="na">stream</span><span class="p">().</span><span class="na">map</span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HttpHost</span><span class="p">(</span><span class="n">p</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">)).</span><span class="na">toArray</span><span class="p">(</span><span class="n">HttpHost</span><span class="o">[]</span><span class="p">::</span><span class="k">new</span><span class="p">);}</span>
<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">RestClientBuilder</span><span class="p">.</span><span class="na">HttpClientConfigCallback</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="nd">@Nullable</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">sslStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Objects</span><span class="p">.</span><span class="na">requireNonNull</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="nf">getCredentialsProvider</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="nf">getSSLStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="nf">customizeHttpClient</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setSSLStrategy</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setDefaultCredentialsProvider</span><span class="p">(</span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">;</span>
<span class="w"> </span><span class="p">}}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">MyX509TrustManager</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">X509TrustManager</span><span class="w"> </span><span class="n">sunJSSEX509TrustManager</span><span class="p">;</span>
<span class="w"> </span><span class="n">MyX509TrustManager</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">Exception</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">File</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">File</span><span class="p">(</span><span class="n">certFilePath</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">file</span><span class="p">.</span><span class="na">isFile</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Exception</span><span class="p">(</span><span class="s">&quot;Wrong Certification Path&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">&quot;Loading KeyStore &quot;</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">&quot;...&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">InputStream</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileInputStream</span><span class="p">(</span><span class="n">file</span><span class="p">);</span>
<span class="w"> </span><span class="n">KeyStore</span><span class="w"> </span><span class="n">ks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KeyStore</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;JKS&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">ks</span><span class="p">.</span><span class="na">load</span><span class="p">(</span><span class="n">in</span><span class="p">,</span><span class="w"> </span><span class="n">certPassword</span><span class="p">.</span><span class="na">toCharArray</span><span class="p">());</span>
<span class="w"> </span><span class="n">TrustManagerFactory</span><span class="w"> </span><span class="n">tmf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TrustManagerFactory</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SunX509&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;SunJSSE&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">tmf</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="n">ks</span><span class="p">);</span>
<span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">tms</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tmf</span><span class="p">.</span><span class="na">getTrustManagers</span><span class="p">();</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">TrustManager</span><span class="w"> </span><span class="n">tm</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">tms</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">tm</span><span class="w"> </span><span class="k">instanceof</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">sunJSSEX509TrustManager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">X509TrustManager</span><span class="p">)</span><span class="w"> </span><span class="n">tm</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Exception</span><span class="p">(</span><span class="s">&quot;Couldn't initialize&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkClientTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkServerTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="nf">getAcceptedIssuers</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * The following is an example of the main function. Call the create function to create a Low Level REST Client and check whether the test index exists.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">create</span><span class="p">(</span><span class="n">Arrays</span><span class="p">.</span><span class="na">asList</span><span class="p">(</span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">),</span><span class="w"> </span><span class="mi">9200</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;https&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;username&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;password&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;certFilePath&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;certPassword&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Request</span><span class="w"> </span><span class="n">request</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Request</span><span class="p">(</span><span class="s">&quot;HEAD&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;test&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Response</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">performRequest</span><span class="p">(</span><span class="n">request</span><span class="p">);</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="na">getStatusLine</span><span class="p">().</span><span class="na">getStatusCode</span><span class="p">());</span>
<span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="EN-US_TOPIC_0000001992165569__table569191315517" frame="border" border="1" rules="all"><caption><b>Table 7 </b>Function parameters</caption><thead align="left"><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row206481815102611_2"><th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.14.5.2.3.1.1"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p146481315122613_2">Parameter</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.14.5.2.3.1.2"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1664821532616_2">Description</p>
</th>
</tr>
</thead>
<tbody><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row164881519264_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1264812159264_2">host</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p126440284363_2">IP address for accessing the cluster. If there are multiple IP addresses, separate them with commas (,).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row86484154262_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p136481815152615_2">port</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p17648131512260_2">Access port of the cluster. The default value is <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b67871551528_2">9200</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row17648715122619_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p18648171510262_2">protocol</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p164819158263_2">Connection protocol. Set this parameter to <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b151301918522_2">https</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row13648201582613_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1464818153264_2">connectTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p10648181514261_2">Socket connection timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row10648151513262_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1064891532615_2">connectionRequestTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p3648141592614_2">Socket connection request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row9648161522617_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1164941582616_2">socketTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1649191532615_2">Socket request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1649141562617_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p764915150267_2">username</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p76491915122611_2">Username for accessing the cluster.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row664911156262_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p464916154264_2">password</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p064951512267_2">Password of the user.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1864910158268_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1964971512262_2">certFilePath</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p7649151514269_2">Path for storing the security certificate.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row264991542617_2"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p964921542615_2">certPassword</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.14.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1649151582619_2">Password of the security certificate.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p id="EN-US_TOPIC_0000001992165569__p1972213185113">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b817013792">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue1285528060"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue1675858015"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section17497851185216"><a name="EN-US_TOPIC_0000001992165569__section17497851185216"></a><a name="section17497851185216"></a><h4 class="sectiontitle">Connecting to a Non-Security Mode Cluster Using the Elasticsearch High Level REST Client</h4><p id="EN-US_TOPIC_0000001992165569__p5497151115217">Use the Elasticsearch 7.10.2 High Level REST Client obtain the Low Level REST Client by calling <span class="parmname" id="EN-US_TOPIC_0000001992165569__parmname19497115105211"><b>getLowLevelClient()</b></span>, use the low-level client to connect to an OpenSearch cluster for which the security mode is disabled, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b1294161711413">test</strong> index exists. The sample code is as follows:</p>
<pre class="screen" id="EN-US_TOPIC_0000001992165569__screen1649785120523">import org.apache.http.HttpHost;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class RestLowLevelClientExample {
public static void main(String[] args) throws IOException {
List&lt;String&gt; host = Arrays.asList("{Cluster access address}");
RestClientBuilder builder = RestClient.builder(constructHttpHosts(host, 9200, "http"));
final RestHighLevelClient restHighLevelClient = new RestHighLevelClient(builder);
/**
* Create a high-level client and then call getLowLevelClient() to obtain a low-level client. The code differs from the client creation code only in the following line:
*/
final RestClient lowLevelClient = restHighLevelClient.getLowLevelClient();
/**
* Check whether the <strong id="EN-US_TOPIC_0000001992165569__b9798111406">test</strong> index exists. If the index exists, 200 is returned. If the index does not exist, 404 is returned.
*/
Request request = new Request("HEAD", "/test");
Response response = lowLevelClient.performRequest(request);
System.out.println(response.getStatusLine().getStatusCode());
lowLevelClient.close();
}
/**
* Use the constructHttpHosts function to convert the node IP address list of the host cluster.
*/
public static HttpHost[] constructHttpHosts(List&lt;String&gt; host, int port, String protocol) {
return host.stream().map(p -&gt; new HttpHost(p, port, protocol)).toArray(HttpHost[]::new);
}
}</pre>
<p id="EN-US_TOPIC_0000001992165569__p18499951195214">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b2146122643">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue1262960631"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue484526300"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section1988811319545"><a name="EN-US_TOPIC_0000001992165569__section1988811319545"></a><a name="section1988811319545"></a><h4 class="sectiontitle">Connecting to a Security-Mode Cluster Using the Elasticsearch High Level REST Client (Without a Certificate)</h4><p id="EN-US_TOPIC_0000001992165569__p0888103115412">Use the Elasticsearch 7.10.2 High Level REST Client to obtain the Low Level REST Client by calling <span class="parmname" id="EN-US_TOPIC_0000001992165569__parmname1834642193919"><b>getLowLevelClient()</b></span>, use the low-level client to connect to a security-mode OpenSearch cluster that uses HTTP or HTTPS without loading a security certificate, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b83472263916">test</strong> index exists. The sample code is as follows:</p>
<div class="codecoloring" codetype="Java" id="EN-US_TOPIC_0000001992165569__screen2888231205411"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
<span class="normal"> 19</span>
<span class="normal"> 20</span>
<span class="normal"> 21</span>
<span class="normal"> 22</span>
<span class="normal"> 23</span>
<span class="normal"> 24</span>
<span class="normal"> 25</span>
<span class="normal"> 26</span>
<span class="normal"> 27</span>
<span class="normal"> 28</span>
<span class="normal"> 29</span>
<span class="normal"> 30</span>
<span class="normal"> 31</span>
<span class="normal"> 32</span>
<span class="normal"> 33</span>
<span class="normal"> 34</span>
<span class="normal"> 35</span>
<span class="normal"> 36</span>
<span class="normal"> 37</span>
<span class="normal"> 38</span>
<span class="normal"> 39</span>
<span class="normal"> 40</span>
<span class="normal"> 41</span>
<span class="normal"> 42</span>
<span class="normal"> 43</span>
<span class="normal"> 44</span>
<span class="normal"> 45</span>
<span class="normal"> 46</span>
<span class="normal"> 47</span>
<span class="normal"> 48</span>
<span class="normal"> 49</span>
<span class="normal"> 50</span>
<span class="normal"> 51</span>
<span class="normal"> 52</span>
<span class="normal"> 53</span>
<span class="normal"> 54</span>
<span class="normal"> 55</span>
<span class="normal"> 56</span>
<span class="normal"> 57</span>
<span class="normal"> 58</span>
<span class="normal"> 59</span>
<span class="normal"> 60</span>
<span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span>
<span class="normal">161</span>
<span class="normal">162</span>
<span class="normal">163</span>
<span class="normal">164</span>
<span class="normal">165</span>
<span class="normal">166</span>
<span class="normal">167</span>
<span class="normal">168</span>
<span class="normal">169</span>
<span class="normal">170</span>
<span class="normal">171</span>
<span class="normal">172</span>
<span class="normal">173</span>
<span class="normal">174</span>
<span class="normal">175</span>
<span class="normal">176</span>
<span class="normal">177</span>
<span class="normal">178</span>
<span class="normal">179</span>
<span class="normal">180</span>
<span class="normal">181</span>
<span class="normal">182</span>
<span class="normal">183</span>
<span class="normal">184</span>
<span class="normal">185</span>
<span class="normal">186</span>
<span class="normal">187</span>
<span class="normal">188</span>
<span class="normal">189</span>
<span class="normal">190</span>
<span class="normal">191</span>
<span class="normal">192</span>
<span class="normal">193</span>
<span class="normal">194</span>
<span class="normal">195</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpHost</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpResponse</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.AuthScope</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.UsernamePasswordCredentials</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.client.CredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.BasicCredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.nio.client.HttpAsyncClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.nio.conn.ssl.SSLIOSessionStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.protocol.HttpContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.LogManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.Logger</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.Request</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.Response</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestHighLevelClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.common.Nullable</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.IOException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.KeyManagementException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.NoSuchAlgorithmException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.SecureRandom</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.CertificateException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.X509Certificate</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Arrays</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.List</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Objects</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.concurrent.TimeUnit</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.HostnameVerifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLSession</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManager</span><span class="p">;</span><span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.X509TrustManager</span><span class="p">;</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">RestLowLevelClientExample</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a class for the client. Define the create function.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="nf">create</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectionRequestTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">socketTimeout</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">password</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">BasicCredentialsProvider</span><span class="p">();</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">.</span><span class="na">setCredentials</span><span class="p">(</span><span class="n">AuthScope</span><span class="p">.</span><span class="na">ANY</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">UsernamePasswordCredentials</span><span class="p">(</span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">password</span><span class="p">));</span>
<span class="w"> </span><span class="n">SSLContext</span><span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SSLContext</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SSL&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">sc</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">trustAllCerts</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecureRandom</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">KeyManagementException</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">NoSuchAlgorithmException</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sessionStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="p">(</span><span class="n">sc</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NullHostNameVerifier</span><span class="p">());</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="n">httpClientConfigCallback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="n">sessionStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClientBuilder</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RestClient</span><span class="p">.</span><span class="na">builder</span><span class="p">(</span><span class="n">constructHttpHosts</span><span class="p">(</span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setRequestConfigCallback</span><span class="p">(</span><span class="n">requestConfig</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">requestConfig</span><span class="p">.</span><span class="na">setConnectTimeout</span><span class="p">(</span><span class="n">connectTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setConnectionRequestTimeout</span><span class="p">(</span><span class="n">connectionRequestTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setSocketTimeout</span><span class="p">(</span><span class="n">socketTimeout</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setHttpClientConfigCallback</span><span class="p">(</span><span class="n">httpClientConfigCallback</span><span class="p">);</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="p">(</span><span class="n">builder</span><span class="p">);</span>
<span class="w"> </span><span class="n">logger</span><span class="p">.</span><span class="na">info</span><span class="p">(</span><span class="s">&quot;es rest client build success {} &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">client</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">client</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Use the constructHttpHosts function to convert the node IP address list of the host cluster.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">HttpHost</span><span class="o">[]</span><span class="w"> </span><span class="nf">constructHttpHosts</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">host</span><span class="p">.</span><span class="na">stream</span><span class="p">().</span><span class="na">map</span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HttpHost</span><span class="p">(</span><span class="n">p</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">)).</span><span class="na">toArray</span><span class="p">(</span><span class="n">HttpHost</span><span class="o">[]</span><span class="p">::</span><span class="k">new</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Configure trustAllCerts to ignore the certificate configuration.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">trustAllCerts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkClientTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkServerTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="nf">getAcceptedIssuers</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">};</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm">* The CustomConnectionKeepAliveStrategy function is used to set the connection keepalive during when there are a large number of short connections or when there are not many data requests.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">CustomConnectionKeepAliveStrategy</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">DefaultConnectionKeepAliveStrategy</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CustomConnectionKeepAliveStrategy</span><span class="w"> </span><span class="n">INSTANCE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">CustomConnectionKeepAliveStrategy</span><span class="p">();</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="nf">CustomConnectionKeepAliveStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">super</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Maximum keepalive time (in minutes)</span>
<span class="cm"> * The default value is 10 minutes. You can set it based on the number of TCP connections in TIME_WAIT state. If there are too many TCP connections, you can increase this value.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">MAX_KEEP_ALIVE_MINUTES</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="nf">getKeepAliveDuration</span><span class="p">(</span><span class="n">HttpResponse</span><span class="w"> </span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">HttpContext</span><span class="w"> </span><span class="n">context</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">keepAliveDuration</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">super</span><span class="p">.</span><span class="na">getKeepAliveDuration</span><span class="p">(</span><span class="n">response</span><span class="p">,</span><span class="w"> </span><span class="n">context</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// &lt;0 indicates an unlimited keepalive period.</span>
<span class="w"> </span><span class="c1">// Change the period from unlimited to a default period.</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">keepAliveDuration</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">TimeUnit</span><span class="p">.</span><span class="na">MINUTES</span><span class="p">.</span><span class="na">toMillis</span><span class="p">(</span><span class="n">MAX_KEEP_ALIVE_MINUTES</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">keepAliveDuration</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Logger</span><span class="w"> </span><span class="n">logger</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LogManager</span><span class="p">.</span><span class="na">getLogger</span><span class="p">(</span><span class="n">RestLowLevelClientExample</span><span class="p">.</span><span class="na">class</span><span class="p">);</span>
<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">RestClientBuilder</span><span class="p">.</span><span class="na">HttpClientConfigCallback</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * The {@link SSLIOSessionStrategy} for all requests to enable SSL / TLS encryption.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a new {@link SecuredHttpClientConfigCallback}.</span>
<span class="cm"> *</span>
<span class="cm"> * @param credentialsProvider The credential provider, if a username/password have been supplied</span>
<span class="cm"> * @param sslStrategy The SSL strategy, if SSL / TLS have been supplied</span>
<span class="cm"> * @throws NullPointerException if {@code sslStrategy} is {@code null}</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="nd">@Nullable</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">sslStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Objects</span><span class="p">.</span><span class="na">requireNonNull</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Get the {@link CredentialsProvider} that will be added to the HTTP client.</span>
<span class="cm"> *</span>
<span class="cm"> * @return Can be {@code null}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="nf">getCredentialsProvider</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Get the {@link SSLIOSessionStrategy} that will be added to the HTTP client.</span>
<span class="cm"> *</span>
<span class="cm"> * @return Never {@code null}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="nf">getSSLStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Sets the {@linkplain HttpAsyncClientBuilder#setDefaultCredentialsProvider(CredentialsProvider) credential provider},</span>
<span class="cm"> *</span>
<span class="cm"> * @param httpClientBuilder The client to configure.</span>
<span class="cm"> * @return Always {@code httpClientBuilder}.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="nf">customizeHttpClient</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// enable SSL / TLS</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setSSLStrategy</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// enable user authentication</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setDefaultCredentialsProvider</span><span class="p">(</span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">NullHostNameVerifier</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">HostnameVerifier</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">arg0</span><span class="p">,</span><span class="w"> </span><span class="n">SSLSession</span><span class="w"> </span><span class="n">arg1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm">* The following is an example of the main function. Call the create function to create the high-level client, then call the getLowLevelClient() function to obtain the low-level client, and query whether the test index exists.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">create</span><span class="p">(</span><span class="n">Arrays</span><span class="p">.</span><span class="na">asList</span><span class="p">(</span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">),</span><span class="w"> </span><span class="mi">9200</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;http&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;username&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;password&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="na">getLowLevelClient</span><span class="p">();</span>
<span class="w"> </span><span class="n">Request</span><span class="w"> </span><span class="n">request</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Request</span><span class="p">(</span><span class="s">&quot;HEAD&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;test&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Response</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">performRequest</span><span class="p">(</span><span class="n">request</span><span class="p">);</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="na">getStatusLine</span><span class="p">().</span><span class="na">getStatusCode</span><span class="p">());</span>
<span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="EN-US_TOPIC_0000001992165569__table208987318548" frame="border" border="1" rules="all"><caption><b>Table 8 </b>Variables</caption><thead align="left"><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row15833437142513_3"><th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.16.4.2.3.1.1"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p198331837112510_3">Parameter</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.16.4.2.3.1.2"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1783383762518_3">Description</p>
</th>
</tr>
</thead>
<tbody><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row383320375257_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p15833153752514_3">host</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p18833143722511_3">IP address for accessing the cluster. If there are multiple IP addresses, separate them with commas (,).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row128330374257_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p783393711258_3">port</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p683383742515_3">Access port of the cluster. The default value is <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b130391213393754_3">9200</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row168338373258_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p20833103732519_3">protocol</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p3833173717256_3">Connection protocol, which can be <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_parmvalue181861130593754_3"><b>http</b></span> or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_parmvalue190485073093754_3"><b>https</b></span>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1783383719259_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1883393722511_3">connectTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p58331737132519_3">Socket connection timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row383303742519_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1983373711259_3">connectionRequestTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1283415379254_3">Socket connection request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row14834037102517_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p138341371258_3">socketTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p4834153732515_3">Socket request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row148340375259_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1834153762511_3">username</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1183412376255_3">Username for accessing the cluster.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row208346377257_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p12834183715254_3">password</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.16.4.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1083473782518_3">Password of the user.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p id="EN-US_TOPIC_0000001992165569__p179000315549">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b293253054">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue878637360"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue507975967"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section129618451566"><a name="EN-US_TOPIC_0000001992165569__section129618451566"></a><a name="section129618451566"></a><h4 class="sectiontitle">Connecting to a Security-Mode Cluster Using the Elasticsearch High Level REST Client (With a Certificate)</h4><p id="EN-US_TOPIC_0000001992165569__p529664595616">Use the Elasticsearch 7.10.2 High Level REST Client to obtain the Low Level REST Client by calling <span class="parmname" id="EN-US_TOPIC_0000001992165569__parmname714517521498"><b>getLowLevelClient()</b></span>, use the low-level client to connect to a security-mode OpenSearch cluster that uses HTTPS with a security certificate loaded, and query whether the <strong id="EN-US_TOPIC_0000001992165569__b145980193513">test</strong> index exists. The sample code is as follows:</p>
<div class="caution" id="EN-US_TOPIC_0000001992165569__note15296114513567"><span class="cautiontitle"><img src="public_sys-resources/caution_3.0-en-us.png"> </span><div class="cautionbody"><p id="EN-US_TOPIC_0000001992165569__p62964451567">For how to obtain and upload a security certificate, see <a href="#EN-US_TOPIC_0000001992165569__section697213217486">Obtaining and Uploading a Security Certificate</a>.</p>
</div></div>
<div class="codecoloring" codetype="Java" id="EN-US_TOPIC_0000001992165569__screen10297645125618"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal"> 10</span>
<span class="normal"> 11</span>
<span class="normal"> 12</span>
<span class="normal"> 13</span>
<span class="normal"> 14</span>
<span class="normal"> 15</span>
<span class="normal"> 16</span>
<span class="normal"> 17</span>
<span class="normal"> 18</span>
<span class="normal"> 19</span>
<span class="normal"> 20</span>
<span class="normal"> 21</span>
<span class="normal"> 22</span>
<span class="normal"> 23</span>
<span class="normal"> 24</span>
<span class="normal"> 25</span>
<span class="normal"> 26</span>
<span class="normal"> 27</span>
<span class="normal"> 28</span>
<span class="normal"> 29</span>
<span class="normal"> 30</span>
<span class="normal"> 31</span>
<span class="normal"> 32</span>
<span class="normal"> 33</span>
<span class="normal"> 34</span>
<span class="normal"> 35</span>
<span class="normal"> 36</span>
<span class="normal"> 37</span>
<span class="normal"> 38</span>
<span class="normal"> 39</span>
<span class="normal"> 40</span>
<span class="normal"> 41</span>
<span class="normal"> 42</span>
<span class="normal"> 43</span>
<span class="normal"> 44</span>
<span class="normal"> 45</span>
<span class="normal"> 46</span>
<span class="normal"> 47</span>
<span class="normal"> 48</span>
<span class="normal"> 49</span>
<span class="normal"> 50</span>
<span class="normal"> 51</span>
<span class="normal"> 52</span>
<span class="normal"> 53</span>
<span class="normal"> 54</span>
<span class="normal"> 55</span>
<span class="normal"> 56</span>
<span class="normal"> 57</span>
<span class="normal"> 58</span>
<span class="normal"> 59</span>
<span class="normal"> 60</span>
<span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span>
<span class="normal">101</span>
<span class="normal">102</span>
<span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span>
<span class="normal">161</span></pre></div></td><td class="code"><div><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.HttpHost</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.AuthScope</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.auth.UsernamePasswordCredentials</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.client.CredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.conn.ssl.NoopHostnameVerifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.client.BasicCredentialsProvider</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.impl.nio.client.HttpAsyncClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.http.nio.conn.ssl.SSLIOSessionStrategy</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.LogManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.logging.log4j.Logger</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.Request</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RequestOptions</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.Response</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestClientBuilder</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.client.RestHighLevelClient</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.elasticsearch.common.Nullable</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.File</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.FileInputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.IOException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.InputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.KeyStore</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.SecureRandom</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.CertificateException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.security.cert.X509Certificate</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Arrays</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.List</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Objects</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.SSLContext</span><span class="p">;</span><span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManager</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.TrustManagerFactory</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">javax.net.ssl.X509TrustManager</span><span class="p">;</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">RestLowLevelClientExample</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Logger</span><span class="w"> </span><span class="n">logger</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">LogManager</span><span class="p">.</span><span class="na">getLogger</span><span class="p">(</span><span class="n">RestLowLevelClientExample</span><span class="p">.</span><span class="na">class</span><span class="p">);</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Create a class for the client. Define the create function.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="nf">create</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">connectionRequestTimeout</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">socketTimeout</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">password</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">BasicCredentialsProvider</span><span class="p">();</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">.</span><span class="na">setCredentials</span><span class="p">(</span><span class="n">AuthScope</span><span class="p">.</span><span class="na">ANY</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">UsernamePasswordCredentials</span><span class="p">(</span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">password</span><span class="p">));</span>
<span class="w"> </span><span class="n">SSLContext</span><span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">tm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="k">new</span><span class="w"> </span><span class="n">MyX509TrustManager</span><span class="p">(</span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)};</span>
<span class="w"> </span><span class="n">sc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SSLContext</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SSL&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;SunJSSE&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="c1">//You can also use SSLContext sslContext = SSLContext.getInstance(&quot;TLSv1.2&quot;);</span>
<span class="w"> </span><span class="n">sc</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="n">tm</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecureRandom</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">Exception</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sessionStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="p">(</span><span class="n">sc</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NoopHostnameVerifier</span><span class="p">());</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="n">httpClientConfigCallback</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="n">sessionStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClientBuilder</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">RestClient</span><span class="p">.</span><span class="na">builder</span><span class="p">(</span><span class="n">constructHttpHosts</span><span class="p">(</span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setRequestConfigCallback</span><span class="p">(</span><span class="n">requestConfig</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">requestConfig</span><span class="p">.</span><span class="na">setConnectTimeout</span><span class="p">(</span><span class="n">connectTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setConnectionRequestTimeout</span><span class="p">(</span><span class="n">connectionRequestTimeout</span><span class="p">)</span>
<span class="w"> </span><span class="p">.</span><span class="na">setSocketTimeout</span><span class="p">(</span><span class="n">socketTimeout</span><span class="p">))</span>
<span class="w"> </span><span class="p">.</span><span class="na">setHttpClientConfigCallback</span><span class="p">(</span><span class="n">httpClientConfigCallback</span><span class="p">);</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">RestHighLevelClient</span><span class="p">(</span><span class="n">builder</span><span class="p">);</span>
<span class="w"> </span><span class="n">logger</span><span class="p">.</span><span class="na">info</span><span class="p">(</span><span class="s">&quot;es rest client build success {} &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">client</span><span class="p">);</span>
<span class="w"> </span><span class="n">ClusterHealthRequest</span><span class="w"> </span><span class="n">request</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ClusterHealthRequest</span><span class="p">();</span>
<span class="w"> </span><span class="n">ClusterHealthResponse</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="na">cluster</span><span class="p">().</span><span class="na">health</span><span class="p">(</span><span class="n">request</span><span class="p">,</span><span class="w"> </span><span class="n">RequestOptions</span><span class="p">.</span><span class="na">DEFAULT</span><span class="p">);</span>
<span class="w"> </span><span class="n">logger</span><span class="p">.</span><span class="na">info</span><span class="p">(</span><span class="s">&quot;es rest client health response {} &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">response</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">client</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * Use the constructHttpHosts function to convert the node IP address list of the host cluster.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">HttpHost</span><span class="o">[]</span><span class="w"> </span><span class="nf">constructHttpHosts</span><span class="p">(</span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">host</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">protocol</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">host</span><span class="p">.</span><span class="na">stream</span><span class="p">().</span><span class="na">map</span><span class="p">(</span><span class="n">p</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">HttpHost</span><span class="p">(</span><span class="n">p</span><span class="p">,</span><span class="w"> </span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">protocol</span><span class="p">)).</span><span class="na">toArray</span><span class="p">(</span><span class="n">HttpHost</span><span class="o">[]</span><span class="p">::</span><span class="k">new</span><span class="p">);}</span>
<span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">SecuredHttpClientConfigCallback</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">RestClientBuilder</span><span class="p">.</span><span class="na">HttpClientConfigCallback</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="n">SecuredHttpClientConfigCallback</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">,</span>
<span class="w"> </span><span class="nd">@Nullable</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">sslStrategy</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Objects</span><span class="p">.</span><span class="na">requireNonNull</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">credentialsProvider</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Nullable</span>
<span class="w"> </span><span class="n">CredentialsProvider</span><span class="w"> </span><span class="nf">getCredentialsProvider</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">credentialsProvider</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">SSLIOSessionStrategy</span><span class="w"> </span><span class="nf">getSSLStrategy</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sslStrategy</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="nf">customizeHttpClient</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">HttpAsyncClientBuilder</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setSSLStrategy</span><span class="p">(</span><span class="n">sslStrategy</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">credentialsProvider</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">.</span><span class="na">setDefaultCredentialsProvider</span><span class="p">(</span><span class="n">credentialsProvider</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">httpClientBuilder</span><span class="p">;</span>
<span class="w"> </span><span class="p">}}</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">MyX509TrustManager</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">X509TrustManager</span><span class="w"> </span><span class="n">sunJSSEX509TrustManager</span><span class="p">;</span>
<span class="w"> </span><span class="n">MyX509TrustManager</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">certFilePath</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">certPassword</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">Exception</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">File</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">File</span><span class="p">(</span><span class="n">certFilePath</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">file</span><span class="p">.</span><span class="na">isFile</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Exception</span><span class="p">(</span><span class="s">&quot;Wrong Certification Path&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">&quot;Loading KeyStore &quot;</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">&quot;...&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">InputStream</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileInputStream</span><span class="p">(</span><span class="n">file</span><span class="p">);</span>
<span class="w"> </span><span class="n">KeyStore</span><span class="w"> </span><span class="n">ks</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">KeyStore</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;JKS&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">ks</span><span class="p">.</span><span class="na">load</span><span class="p">(</span><span class="n">in</span><span class="p">,</span><span class="w"> </span><span class="n">certPassword</span><span class="p">.</span><span class="na">toCharArray</span><span class="p">());</span>
<span class="w"> </span><span class="n">TrustManagerFactory</span><span class="w"> </span><span class="n">tmf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TrustManagerFactory</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">&quot;SunX509&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;SunJSSE&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">tmf</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="n">ks</span><span class="p">);</span>
<span class="w"> </span><span class="n">TrustManager</span><span class="o">[]</span><span class="w"> </span><span class="n">tms</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tmf</span><span class="p">.</span><span class="na">getTrustManagers</span><span class="p">();</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">TrustManager</span><span class="w"> </span><span class="n">tm</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">tms</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">tm</span><span class="w"> </span><span class="k">instanceof</span><span class="w"> </span><span class="n">X509TrustManager</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">sunJSSEX509TrustManager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">X509TrustManager</span><span class="p">)</span><span class="w"> </span><span class="n">tm</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Exception</span><span class="p">(</span><span class="s">&quot;Couldn't initialize&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkClientTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">checkServerTrusted</span><span class="p">(</span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="n">chain</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">authType</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">CertificateException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nd">@Override</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[]</span><span class="w"> </span><span class="nf">getAcceptedIssuers</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">X509Certificate</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="cm">/**</span>
<span class="cm">* The following is an example of the main function. Call the create function to create the high-level client, then call the getLowLevelClient() function to obtain the low-level client, and query whether the test index exists.</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">IOException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RestHighLevelClient</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">create</span><span class="p">(</span><span class="n">Arrays</span><span class="p">.</span><span class="na">asList</span><span class="p">(</span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;xxx.xxx.xxx.xxx&quot;</span><span class="p">),</span><span class="w"> </span><span class="mi">9200</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;https&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="mi">30000</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;username&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;password&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;certFilePath&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;certPassword&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">RestClient</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="na">getLowLevelClient</span><span class="p">();</span>
<span class="w"> </span><span class="n">Request</span><span class="w"> </span><span class="n">request</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Request</span><span class="p">(</span><span class="s">&quot;HEAD&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;test&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">Response</span><span class="w"> </span><span class="n">response</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">performRequest</span><span class="p">(</span><span class="n">request</span><span class="p">);</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="na">getStatusLine</span><span class="p">().</span><span class="na">getStatusCode</span><span class="p">());</span>
<span class="w"> </span><span class="n">lowLevelClient</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div></td></tr></table></div>
</div>
<div class="tablenoborder"><table cellpadding="4" cellspacing="0" summary="" id="EN-US_TOPIC_0000001992165569__table230424514566" frame="border" border="1" rules="all"><caption><b>Table 9 </b>Function parameters</caption><thead align="left"><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row206481815102611_3"><th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.17.5.2.3.1.1"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p146481315122613_3">Parameter</p>
</th>
<th align="left" class="cellrowborder" valign="top" width="50%" id="mcps1.3.17.5.2.3.1.2"><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1664821532616_3">Description</p>
</th>
</tr>
</thead>
<tbody><tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row164881519264_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1264812159264_3">host</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p126440284363_3">IP address for accessing the cluster. If there are multiple IP addresses, separate them with commas (,).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row86484154262_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p136481815152615_3">port</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p17648131512260_3">Access port of the cluster. The default value is <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b67871551528_3">9200</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row17648715122619_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p18648171510262_3">protocol</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p164819158263_3">Connection protocol. Set this parameter to <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b151301918522_3">https</strong>.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row13648201582613_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1464818153264_3">connectTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p10648181514261_3">Socket connection timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row10648151513262_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1064891532615_3">connectionRequestTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p3648141592614_3">Socket connection request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row9648161522617_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1164941582616_3">socketTimeout</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1649191532615_3">Socket request timeout (in ms).</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1649141562617_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p764915150267_3">username</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p76491915122611_3">Username for accessing the cluster.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row664911156262_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p464916154264_3">password</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p064951512267_3">Password of the user.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row1864910158268_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1964971512262_3">certFilePath</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p7649151514269_3">Path for storing the security certificate.</p>
</td>
</tr>
<tr id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_row264991542617_3"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.1 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p964921542615_3">certPassword</p>
</td>
<td class="cellrowborder" valign="top" width="50%" headers="mcps1.3.17.5.2.3.1.2 "><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000001972375889_en-us_topic_0000001961178813_p1649151582619_3">Password of the security certificate.</p>
</td>
</tr>
</tbody>
</table>
</div>
<p id="EN-US_TOPIC_0000001992165569__p163071645185615">This piece of code checks whether the <strong id="EN-US_TOPIC_0000001992165569__b2052891446">test</strong> index exists in the cluster. If <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue143054756"><b>200</b></span> (the index exists) or <span class="parmvalue" id="EN-US_TOPIC_0000001992165569__parmvalue1489668103"><b>404</b></span> (the index does not exist) is returned, it indicates that the cluster is connected.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001992165569__section697213217486"><a name="EN-US_TOPIC_0000001992165569__section697213217486"></a><a name="section697213217486"></a><h4 class="sectiontitle">Obtaining and Uploading a Security Certificate</h4><p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_p1421640114818">To access a security-mode OpenSearch cluster that uses HTTPS, a security certificate must be loaded. Perform the following steps to obtain the security certificate and upload it to the client:</p>
<ol id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_ol6848111364811"><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_li38483134480">Obtain the security certificate <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b195610437693754">CloudSearchService.cer</strong>.<ol type="a" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_ol11848213154814"><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000002338102386_li3588723204713"><span id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000002338102386_ph358812374717">Log in to the CSS management console.</span></li><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000002338102386_li1058815239474">In the navigation pane on the left, choose <span class="uicontrol" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000002338102386_uicontrol724454458"><b>Clusters &gt; OpenSearch</b></span>.</li><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000002338102386_li2588923184720">In the cluster list, click the name of the target cluster. The cluster information page is displayed.</li><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000002338102386_li15588142316479">Click the <span class="wintitle" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000002338102386_wintitle1205837049"><b>Overview</b></span> tab. In the <span class="wintitle" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000002338102386_wintitle684020822"><b>Configuration</b></span> area, click <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000002338102386_b1541397834">Download Certificate</strong> next to <span class="uicontrol" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_en-us_topic_0000002338102386_uicontrol1874704973"><b>HTTPS Access</b></span>.</li></ol>
</li><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_li38498132481">Convert the security certificate <strong id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_b46785258593754">CloudSearchService.cer</strong>. Upload the downloaded security certificate to the client and use keytool to convert the <span class="filepath" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_filepath161169413493754"><b>.cer</b></span> certificate into a <span class="filepath" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_filepath57172088493754"><b>.jks</b></span> certificate that can be read by Java.<ul id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_ul19849913144816"><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_li17849113174814">In Linux, run the following command to convert the certificate:<pre class="screen" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_screen13849111312487">keytool -import -alias <i><span class="varname" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_varname18498136480">newname</span></i> -keystore ./truststore.jks -file ./CloudSearchService.cer </pre>
</li><li id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_li108491913174811">In Windows, run the following command to convert the certificate:<pre class="screen" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_screen1384911310482">keytool -import -alias <i><span class="varname" id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_varname148491513194820">newname</span></i> -keystore .\truststore.jks -file .\CloudSearchService.cer</pre>
</li></ul>
<p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_p684901354812">In the preceding command, <em id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_i90790851693754">newname</em> indicates the user-defined certificate name.</p>
<p id="EN-US_TOPIC_0000001992165569__en-us_topic_0000001992205773_p108498131483">After this command is executed, you will be prompted to set the certificate password and confirm the password. Securely store the password. It will be used for accessing the cluster.</p>
</li></ol>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="css_01_0031.html">Accessing an OpenSearch Cluster Using Java</a></div>
</div>
</div>