Skip to content

ClassNotFoundException: org.elasticsearch.client.ResponseException because ElasticsearchExceptionTranslator requires old low-level Elasticsearch but it's now optional #3144

@wilkinsona

Description

@wilkinsona

The old low-level client is optional, but ElasticsearchExceptionTranslator still has a hard dependency on its org.elasticsearch.client.ResponseException. This results in a failure at runtime:

Caused by: java.lang.NoClassDefFoundError: org/elasticsearch/client/ResponseException
	at org.springframework.data.elasticsearch.client.elc.ElasticsearchExceptionTranslator.checkForConflictException(ElasticsearchExceptionTranslator.java:121)
	at org.springframework.data.elasticsearch.client.elc.ElasticsearchExceptionTranslator.translateExceptionIfPossible(ElasticsearchExceptionTranslator.java:73)
	at org.springframework.data.elasticsearch.client.elc.ElasticsearchExceptionTranslator.translateException(ElasticsearchExceptionTranslator.java:65)
	at org.springframework.data.elasticsearch.client.elc.ChildTemplate.execute(ChildTemplate.java:73)
	at org.springframework.data.elasticsearch.client.elc.IndicesTemplate.doExists(IndicesTemplate.java:179)
	at org.springframework.data.elasticsearch.client.elc.IndicesTemplate.exists(IndicesTemplate.java:171)
	at org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository.createIndexAndMappingIfNeeded(SimpleElasticsearchRepository.java:93)
	at org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository.<init>(SimpleElasticsearchRepository.java:87)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:209)
	... 113 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.client.ResponseException
	... 127 common frames omitted

I should be able to work around this by temporarily reinstating a dependency on the old client. Longer term, could you please update ElasticsearchExceptionTranslator to only consider translation of org.elasticsearch.client.ResponseException when it's on the classpath.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions