diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchExceptionTranslator.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchExceptionTranslator.java index 98a344827..8c8f9ac86 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchExceptionTranslator.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchExceptionTranslator.java @@ -74,13 +74,15 @@ public DataAccessException translateExceptionIfPossible(RuntimeException ex) { if (ex instanceof ElasticsearchException elasticsearchException) { ErrorResponse response = elasticsearchException.response(); + var errorType = response.error().type(); + var errorReason = response.error().reason() != null ? response.error().reason() : "undefined reason"; - if (response.status() == 404 && "index_not_found_exception".equals(response.error().type())) { + if (response.status() == 404 && "index_not_found_exception".equals(errorType)) { // noinspection RegExpRedundantEscape Pattern pattern = Pattern.compile(".*no such index \\[(.*)\\]"); String index = ""; - Matcher matcher = pattern.matcher(response.error().reason()); + Matcher matcher = pattern.matcher(errorReason); if (matcher.matches()) { index = matcher.group(1); } @@ -88,8 +90,8 @@ public DataAccessException translateExceptionIfPossible(RuntimeException ex) { } String body = JsonUtils.toJson(response, jsonpMapper); - if (response.error().type().contains("validation_exception")) { - return new DataIntegrityViolationException(response.error().reason()); + if (errorType != null && errorType.contains("validation_exception")) { + return new DataIntegrityViolationException(errorReason); } return new UncategorizedElasticsearchException(ex.getMessage(), response.status(), body, ex);