From 988736dd41bf5cf2e21f3dcad3fd4539595ff9dc Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Sat, 3 Sep 2022 07:50:01 +0200 Subject: [PATCH] Fix NPE in RequestFactory when language in UpdateQuery is not set (4.4.x). Original Pull Request #2288 Closes #2287 --- .../data/elasticsearch/core/RequestFactory.java | 11 +++++++++-- .../data/elasticsearch/core/RequestFactoryTests.java | 12 ++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java b/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java index 8daa0192b..6eb921933 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java @@ -613,7 +613,7 @@ class RequestFactory { Object queryObject = query.getObject(); if (queryObject != null) { - String id = StringUtils.isEmpty(query.getId()) ? getPersistentEntityId(queryObject) : query.getId(); + String id = StringUtils.hasText(query.getId()) ? query.getId() : getPersistentEntityId(queryObject); // If we have a query id and a document id, do not ask ES to generate one. if (id != null) { indexRequest = new IndexRequest(indexName).id(id); @@ -1027,7 +1027,14 @@ class RequestFactory { if (params == null) { params = new HashMap<>(); } - Script script = new Script(getScriptType(query.getScriptType()), query.getLang(), query.getScript(), params); + org.elasticsearch.script.ScriptType scriptType = getScriptType(query.getScriptType()); + String lang = query.getLang(); + + if (scriptType == org.elasticsearch.script.ScriptType.INLINE && lang == null) { + lang = "painless"; + } + + Script script = new Script(scriptType, lang, query.getScript(), params); updateRequest.script(script); } diff --git a/src/test/java/org/springframework/data/elasticsearch/core/RequestFactoryTests.java b/src/test/java/org/springframework/data/elasticsearch/core/RequestFactoryTests.java index 9fca88cc1..865f2b3b3 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/RequestFactoryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/RequestFactoryTests.java @@ -140,6 +140,18 @@ class RequestFactoryTests { assertThat(request.upsertRequest()).isNotNull(); } + @Test // #2287 + @DisplayName("should create update query when script language is not set") + void shouldCreateUpdateQueryWhenScriptTypeIsSetToNull() { + + UpdateQuery updateQuery = UpdateQuery.builder("1") // + .withScript("script").build(); + + UpdateRequest request = requestFactory.updateRequest(updateQuery, IndexCoordinates.of("index")); + + assertThat(request).isNotNull(); + } + @Test // DATAES-693 public void shouldReturnSourceWhenRequested() { // given