From ae90ad8b7a21180586f71da67fd4db7ba49873ae Mon Sep 17 00:00:00 2001 From: Anton Naydenov Date: Thu, 16 Dec 2021 12:25:49 +0300 Subject: [PATCH] Replaced the java.lang.reflect to the PersistenceEntity of Spring DATA --- .../MappingElasticsearchConverter.java | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java b/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java index fb8d7f7f1..312eee190 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java @@ -50,6 +50,7 @@ import org.springframework.data.mapping.MappingException; import org.springframework.data.mapping.PersistentPropertyAccessor; import org.springframework.data.mapping.PreferredConstructor; +import org.springframework.data.mapping.SimplePropertyHandler; import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.mapping.model.*; import org.springframework.data.util.ClassTypeInformation; @@ -354,7 +355,7 @@ private R readEntity(ElasticsearchPersistentEntity entity, Map void populateScriptFields(T result, SearchDocument searchDocument) { + private void populateScriptFields(ElasticsearchPersistentEntity entity, T result, SearchDocument searchDocument) { Map> fields = searchDocument.getFields(); - if (!fields.isEmpty()) { - for (java.lang.reflect.Field field : result.getClass().getDeclaredFields()) { - ScriptedField scriptedField = field.getAnnotation(ScriptedField.class); - if (scriptedField != null) { - String name = scriptedField.name().isEmpty() ? field.getName() : scriptedField.name(); - Object value = searchDocument.getFieldValue(name); - if (value != null) { - field.setAccessible(true); - try { - field.set(result, value); - } catch (IllegalArgumentException e) { - throw new MappingException("failed to set scripted field: " + name + " with value: " + value, e); - } catch (IllegalAccessException e) { - throw new MappingException("failed to access scripted field: " + name, e); - } - } - } + entity.doWithProperties((SimplePropertyHandler) property -> { + if (property.isAnnotationPresent(ScriptedField.class) && fields.containsKey(property.getName())) { + ScriptedField scriptedField = property.findAnnotation(ScriptedField.class); + String name = scriptedField.name().isEmpty() ? property.getName() : scriptedField.name(); + Object value = searchDocument.getFieldValue(name); + + entity.getPropertyAccessor(result).setProperty(property, value); } - } + }); } /**