I am trying to index a document to my elasticsearch service aws but i am getting NoClassDeffounderror. I have given my code base below kindly help me to resolve this issue.
Elastic search version : 7.1 (In aws)
pom dependency :
<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.1.1</version>
</dependency>
Code base
package com.saas.elasticsearch;
import java.io.IOException;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequestInterceptor;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import com.amazonaws.auth.AWS4Signer;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
public class test {
private static String serviceName = "es";
private static String region = "us-west-1";
private static String aesEndpoint = "https://search-google-qrftppppppdfpy6qe57kzjha.us-west-1.es.amazonaws.com"; // e.g.
// https://search-mydomain.us-west-1.es.amazonaws.com
private static String Ecmindex = "ecmindex";
// private static String duckcreekindex = "ecmindex";
private static String type = "_doc";
final static AWSCredentialsProvider credentialsProvider = new DefaultAWSCredentialsProviderChain();
public static RestHighLevelClient esClient(String serviceName, String region) {
AWS4Signer signer = new AWS4Signer();
signer.setServiceName(serviceName);
signer.setRegionName(region);
HttpRequestInterceptor interceptor = new AWSRequestSigningApacheInterceptor(serviceName, signer,
credentialsProvider);
return new RestHighLevelClient(RestClient.builder(HttpHost.create(aesEndpoint))
.setHttpClientConfigCallback(hacb -> hacb.addInterceptorLast(interceptor)));
}
public static void main(String[] args) throws IOException {
RestHighLevelClient esClient = esClient(serviceName, region);
String JsonString = "{\r\n" + " \"Name\": \"Jai\",\r\n" + " \"Age\": \"31\",\r\n"
+ " \"Occupation\": \"architect\",\r\n" + " \"City\": \"xxxxcdf\"\r\n" + "}";
IndexRequest indexRequest = new IndexRequest("duke", "_doc", "34567");
indexRequest.source(JsonString, XContentType.JSON);
IndexResponse indexResponse = esClient.index(indexRequest, RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
}
}
i am getting below error when i run the main function :
Exception in thread "main" java.lang.NoClassDefFoundError: org/elasticsearch/action/admin/indices/analyze/AnalyzeRequest
at org.elasticsearch.client.RestHighLevelClient.<init>(RestHighLevelClient.java:244)
at org.elasticsearch.client.RestHighLevelClient.<init>(RestHighLevelClient.java:273)
at org.elasticsearch.client.RestHighLevelClient.<init>(RestHighLevelClient.java:265)
at com.saas.elasticsearch.test.esClient(test.java:36)
at com.saas.elasticsearch.test.main(test.java:43)
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.action.admin.indices.analyze.AnalyzeRequest
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 5 more
Could some one help me to resolve the issue because i have to make it as a java service but it's not even working in my main function if i execute it seperately.
I saw the same error
But I could solve it by switch runtime java version from 15 to 11.