diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java
index e4237795a89ed..df674ea898ed1 100644
--- a/client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/RestHighLevelClient.java
@@ -66,8 +66,6 @@
import org.elasticsearch.index.rankeval.RankEvalRequest;
import org.elasticsearch.index.rankeval.RankEvalResponse;
import org.elasticsearch.plugins.spi.NamedXContentProvider;
-import org.elasticsearch.protocol.xpack.XPackInfoRequest;
-import org.elasticsearch.protocol.xpack.XPackInfoResponse;
import org.elasticsearch.rest.BytesRestResponse;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.script.mustache.MultiSearchTemplateRequest;
@@ -204,6 +202,7 @@ public class RestHighLevelClient implements Closeable {
private final IngestClient ingestClient = new IngestClient(this);
private final SnapshotClient snapshotClient = new SnapshotClient(this);
private final TasksClient tasksClient = new TasksClient(this);
+ private final XPackClient xPackClient = new XPackClient(this);
/**
* Creates a {@link RestHighLevelClient} given the low level {@link RestClientBuilder} that allows to build the
@@ -294,6 +293,19 @@ public final TasksClient tasks() {
return tasksClient;
}
+ /**
+ * A wrapper for the {@link RestHighLevelClient} that provides methods for
+ * accessing the Elastic Licensed X-Pack APIs that are shipped with the
+ * default distribution of Elasticsearch. All of these APIs will 404 if run
+ * against the OSS distribution of Elasticsearch.
+ *
+ * See the
+ * X-Pack APIs on elastic.co for more information.
+ */
+ public final XPackClient xpack() {
+ return xPackClient;
+ }
+
/**
* Executes a bulk request using the Bulk API.
* See Bulk API on elastic.co
@@ -794,34 +806,6 @@ public final void fieldCapsAsync(FieldCapabilitiesRequest fieldCapabilitiesReque
FieldCapabilitiesResponse::fromXContent, listener, emptySet());
}
- /**
- * Fetch information about X-Pack from the cluster if it is installed.
- * See
- * the docs for more.
- * @param request the request
- * @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
- * @return the response
- * @throws IOException in case there is a problem sending the request or parsing back the response
- */
- public XPackInfoResponse xPackInfo(XPackInfoRequest request, RequestOptions options) throws IOException {
- return performRequestAndParseEntity(request, RequestConverters::xPackInfo, options,
- XPackInfoResponse::fromXContent, emptySet());
- }
-
- /**
- * Fetch information about X-Pack from the cluster if it is installed.
- * See
- * the docs for more.
- * @param request the request
- * @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
- * @param listener the listener to be notified upon request completion
- */
- public void xPackInfoAsync(XPackInfoRequest request, RequestOptions options,
- ActionListener listener) {
- performRequestAsyncAndParseEntity(request, RequestConverters::xPackInfo, options,
- XPackInfoResponse::fromXContent, listener, emptySet());
- }
-
protected final Resp performRequestAndParseEntity(Req request,
CheckedFunction requestConverter,
RequestOptions options,
diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/XPackClient.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/XPackClient.java
new file mode 100644
index 0000000000000..5942bfa35a477
--- /dev/null
+++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/XPackClient.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.elasticsearch.client;
+
+import org.elasticsearch.action.ActionListener;
+import org.elasticsearch.protocol.xpack.XPackInfoRequest;
+import org.elasticsearch.protocol.xpack.XPackInfoResponse;
+
+import java.io.IOException;
+
+import static java.util.Collections.emptySet;
+
+/**
+ * A wrapper for the {@link RestHighLevelClient} that provides methods for
+ * accessing the Elastic Licensed X-Pack APIs that are shipped with the
+ * default distribution of Elasticsearch. All of these APIs will 404 if run
+ * against the OSS distribution of Elasticsearch.
+ *
+ * See the
+ * X-Pack APIs on elastic.co for more information.
+ */
+public final class XPackClient {
+ private final RestHighLevelClient restHighLevelClient;
+
+ XPackClient(RestHighLevelClient restHighLevelClient) {
+ this.restHighLevelClient = restHighLevelClient;
+ }
+
+ /**
+ * Fetch information about X-Pack from the cluster.
+ * See
+ * the docs for more.
+ * @param request the request
+ * @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
+ * @return the response
+ * @throws IOException in case there is a problem sending the request or parsing back the response
+ */
+ public XPackInfoResponse info(XPackInfoRequest request, RequestOptions options) throws IOException {
+ return restHighLevelClient.performRequestAndParseEntity(request, RequestConverters::xPackInfo, options,
+ XPackInfoResponse::fromXContent, emptySet());
+ }
+
+ /**
+ * Asynchronously fetch information about X-Pack from the cluster.
+ * See
+ * the docs for more.
+ * @param request the request
+ * @param options the request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
+ * @param listener the listener to be notified upon request completion
+ */
+ public void infoAsync(XPackInfoRequest request, RequestOptions options,
+ ActionListener listener) {
+ restHighLevelClient.performRequestAsyncAndParseEntity(request, RequestConverters::xPackInfo, options,
+ XPackInfoResponse::fromXContent, listener, emptySet());
+ }
+}
diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/PingAndInfoIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/PingAndInfoIT.java
index 04bac628f4930..1a50187f5df5d 100644
--- a/client/rest-high-level/src/test/java/org/elasticsearch/client/PingAndInfoIT.java
+++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/PingAndInfoIT.java
@@ -21,10 +21,10 @@
import org.apache.http.client.methods.HttpGet;
import org.elasticsearch.action.main.MainResponse;
-import org.elasticsearch.protocol.license.LicenseStatus;
import org.elasticsearch.protocol.xpack.XPackInfoRequest;
import org.elasticsearch.protocol.xpack.XPackInfoResponse;
import org.elasticsearch.protocol.xpack.XPackInfoResponse.FeatureSetsInfo.FeatureSet;
+import org.elasticsearch.protocol.xpack.license.LicenseStatus;
import java.io.IOException;
import java.util.EnumSet;
@@ -60,7 +60,7 @@ public void testXPackInfo() throws IOException {
XPackInfoRequest request = new XPackInfoRequest();
request.setCategories(EnumSet.allOf(XPackInfoRequest.Category.class));
request.setVerbose(true);
- XPackInfoResponse info = highLevelClient().xPackInfo(request, RequestOptions.DEFAULT);
+ XPackInfoResponse info = highLevelClient().xpack().info(request, RequestOptions.DEFAULT);
MainResponse mainResponse = highLevelClient().info(RequestOptions.DEFAULT);
@@ -89,7 +89,7 @@ public void testXPackInfo() throws IOException {
}
public void testXPackInfoEmptyRequest() throws IOException {
- XPackInfoResponse info = highLevelClient().xPackInfo(new XPackInfoRequest(), RequestOptions.DEFAULT);
+ XPackInfoResponse info = highLevelClient().xpack().info(new XPackInfoRequest(), RequestOptions.DEFAULT);
/*
* The default in the transport client is non-verbose and returning
diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/MiscellaneousDocumentationIT.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/MiscellaneousDocumentationIT.java
index f760426c514f4..75c14097c4581 100644
--- a/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/MiscellaneousDocumentationIT.java
+++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/documentation/MiscellaneousDocumentationIT.java
@@ -86,7 +86,7 @@ public void testXPackInfo() throws Exception {
XPackInfoRequest.Category.BUILD,
XPackInfoRequest.Category.LICENSE,
XPackInfoRequest.Category.FEATURES));
- XPackInfoResponse response = client.xPackInfo(request, RequestOptions.DEFAULT);
+ XPackInfoResponse response = client.xpack().info(request, RequestOptions.DEFAULT);
//end::x-pack-info-execute
//tag::x-pack-info-response
@@ -122,7 +122,7 @@ public void onFailure(Exception e) {
listener = new LatchedActionListener<>(listener, latch);
// tag::x-pack-info-execute-async
- client.xPackInfoAsync(request, RequestOptions.DEFAULT, listener); // <1>
+ client.xpack().infoAsync(request, RequestOptions.DEFAULT, listener); // <1>
// end::x-pack-info-execute-async
assertTrue(latch.await(30L, TimeUnit.SECONDS));
diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/license/License.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/license/License.java
index fba5f06ba90e0..b2130ac9f4b81 100644
--- a/x-pack/plugin/core/src/main/java/org/elasticsearch/license/License.java
+++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/license/License.java
@@ -29,7 +29,7 @@
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentParser;
import org.elasticsearch.common.xcontent.XContentType;
-import org.elasticsearch.protocol.license.LicenseStatus;
+import org.elasticsearch.protocol.xpack.license.LicenseStatus;
/**
* Data structure for license. Use {@link Builder} to build a license.
diff --git a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/action/TransportXPackInfoActionTests.java b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/action/TransportXPackInfoActionTests.java
index 45d1d7cc74924..60050bd93114a 100644
--- a/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/action/TransportXPackInfoActionTests.java
+++ b/x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/action/TransportXPackInfoActionTests.java
@@ -10,10 +10,10 @@
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.license.License;
import org.elasticsearch.license.LicenseService;
-import org.elasticsearch.protocol.license.LicenseStatus;
import org.elasticsearch.protocol.xpack.XPackInfoRequest;
import org.elasticsearch.protocol.xpack.XPackInfoResponse;
import org.elasticsearch.protocol.xpack.XPackInfoResponse.FeatureSetsInfo.FeatureSet;
+import org.elasticsearch.protocol.xpack.license.LicenseStatus;
import org.elasticsearch.tasks.Task;
import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.transport.Transport;
diff --git a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/MlRemoteLicenseChecker.java b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/MlRemoteLicenseChecker.java
index 791be9b7cb430..b0eeed2c800ec 100644
--- a/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/MlRemoteLicenseChecker.java
+++ b/x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/datafeed/MlRemoteLicenseChecker.java
@@ -13,9 +13,9 @@
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.util.concurrent.ThreadContext;
import org.elasticsearch.license.License;
-import org.elasticsearch.protocol.license.LicenseStatus;
import org.elasticsearch.protocol.xpack.XPackInfoRequest;
import org.elasticsearch.protocol.xpack.XPackInfoResponse;
+import org.elasticsearch.protocol.xpack.license.LicenseStatus;
import org.elasticsearch.transport.ActionNotFoundTransportException;
import org.elasticsearch.transport.RemoteClusterAware;
import org.elasticsearch.xpack.core.action.XPackInfoAction;
diff --git a/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/datafeed/MlRemoteLicenseCheckerTests.java b/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/datafeed/MlRemoteLicenseCheckerTests.java
index c10bf1081dd80..81e4c75cfad7c 100644
--- a/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/datafeed/MlRemoteLicenseCheckerTests.java
+++ b/x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/datafeed/MlRemoteLicenseCheckerTests.java
@@ -11,8 +11,8 @@
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.util.concurrent.ThreadContext;
-import org.elasticsearch.protocol.license.LicenseStatus;
import org.elasticsearch.protocol.xpack.XPackInfoResponse;
+import org.elasticsearch.protocol.xpack.license.LicenseStatus;
import org.elasticsearch.test.ESTestCase;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.xpack.core.action.XPackInfoAction;
diff --git a/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/XPackInfoResponse.java b/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/XPackInfoResponse.java
index d38174e03f3a4..3b9032f092185 100644
--- a/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/XPackInfoResponse.java
+++ b/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/XPackInfoResponse.java
@@ -31,7 +31,7 @@
import org.elasticsearch.common.xcontent.ToXContentObject;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentParser;
-import org.elasticsearch.protocol.license.LicenseStatus;
+import org.elasticsearch.protocol.xpack.license.LicenseStatus;
import java.io.IOException;
import java.util.ArrayList;
diff --git a/x-pack/protocol/src/main/java/org/elasticsearch/protocol/license/LicenseStatus.java b/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/license/LicenseStatus.java
similarity index 97%
rename from x-pack/protocol/src/main/java/org/elasticsearch/protocol/license/LicenseStatus.java
rename to x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/license/LicenseStatus.java
index f0f49351ab1d8..ea3e4f8a8965b 100644
--- a/x-pack/protocol/src/main/java/org/elasticsearch/protocol/license/LicenseStatus.java
+++ b/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/license/LicenseStatus.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.elasticsearch.protocol.license;
+package org.elasticsearch.protocol.xpack.license;
import java.io.IOException;
diff --git a/x-pack/protocol/src/main/java/org/elasticsearch/protocol/license/package-info.java b/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/license/package-info.java
similarity index 94%
rename from x-pack/protocol/src/main/java/org/elasticsearch/protocol/license/package-info.java
rename to x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/license/package-info.java
index f671b280d8495..ca859f29e440b 100644
--- a/x-pack/protocol/src/main/java/org/elasticsearch/protocol/license/package-info.java
+++ b/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/license/package-info.java
@@ -21,4 +21,4 @@
* Request and Response objects for the default distribution's License
* APIs.
*/
-package org.elasticsearch.protocol.license;
+package org.elasticsearch.protocol.xpack.license;
diff --git a/x-pack/protocol/src/main/java/org/elasticsearch/protocol/security/package-info.java b/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/security/package-info.java
similarity index 94%
rename from x-pack/protocol/src/main/java/org/elasticsearch/protocol/security/package-info.java
rename to x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/security/package-info.java
index 2a0ed5bc52b15..216990d9f0ec0 100644
--- a/x-pack/protocol/src/main/java/org/elasticsearch/protocol/security/package-info.java
+++ b/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/security/package-info.java
@@ -21,4 +21,4 @@
* Request and Response objects for the default distribution's Security
* APIs.
*/
-package org.elasticsearch.protocol.security;
+package org.elasticsearch.protocol.xpack.security;
diff --git a/x-pack/protocol/src/main/java/org/elasticsearch/protocol/watcher/package-info.java b/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/watcher/package-info.java
similarity index 94%
rename from x-pack/protocol/src/main/java/org/elasticsearch/protocol/watcher/package-info.java
rename to x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/watcher/package-info.java
index 43d7dd29ec9e5..d34fd598ab170 100644
--- a/x-pack/protocol/src/main/java/org/elasticsearch/protocol/watcher/package-info.java
+++ b/x-pack/protocol/src/main/java/org/elasticsearch/protocol/xpack/watcher/package-info.java
@@ -21,4 +21,4 @@
* Request and Response objects for the default distribution's Watcher
* APIs.
*/
-package org.elasticsearch.protocol.watcher;
+package org.elasticsearch.protocol.xpack.watcher;
diff --git a/x-pack/protocol/src/test/java/org/elasticsearch/protocol/xpack/XPackInfoResponseTests.java b/x-pack/protocol/src/test/java/org/elasticsearch/protocol/xpack/XPackInfoResponseTests.java
index 61a936b0df880..820b8200ed940 100644
--- a/x-pack/protocol/src/test/java/org/elasticsearch/protocol/xpack/XPackInfoResponseTests.java
+++ b/x-pack/protocol/src/test/java/org/elasticsearch/protocol/xpack/XPackInfoResponseTests.java
@@ -21,11 +21,11 @@
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentParser;
-import org.elasticsearch.protocol.license.LicenseStatus;
import org.elasticsearch.protocol.xpack.XPackInfoResponse.BuildInfo;
import org.elasticsearch.protocol.xpack.XPackInfoResponse.LicenseInfo;
import org.elasticsearch.protocol.xpack.XPackInfoResponse.FeatureSetsInfo;
import org.elasticsearch.protocol.xpack.XPackInfoResponse.FeatureSetsInfo.FeatureSet;
+import org.elasticsearch.protocol.xpack.license.LicenseStatus;
import org.elasticsearch.test.AbstractStreamableXContentTestCase;
import java.util.HashMap;
diff --git a/x-pack/protocol/src/test/java/org/elasticsearch/protocol/license/LicenseStatusTests.java b/x-pack/protocol/src/test/java/org/elasticsearch/protocol/xpack/license/LicenseStatusTests.java
similarity index 95%
rename from x-pack/protocol/src/test/java/org/elasticsearch/protocol/license/LicenseStatusTests.java
rename to x-pack/protocol/src/test/java/org/elasticsearch/protocol/xpack/license/LicenseStatusTests.java
index 2c87645157c78..c256e7562f7f8 100644
--- a/x-pack/protocol/src/test/java/org/elasticsearch/protocol/license/LicenseStatusTests.java
+++ b/x-pack/protocol/src/test/java/org/elasticsearch/protocol/xpack/license/LicenseStatusTests.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.elasticsearch.protocol.license;
+package org.elasticsearch.protocol.xpack.license;
import java.io.IOException;