diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java index 365761a67..82f421646 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -71,6 +71,9 @@ import org.elasticsearch.search.sort.SortBuilder; import org.elasticsearch.search.sort.SortOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; import org.springframework.core.io.ClassPathResource; import org.springframework.data.domain.Page; import org.springframework.data.domain.Sort; @@ -95,7 +98,7 @@ import org.springframework.util.Assert; * @author Artur Konczak */ -public class ElasticsearchTemplate implements ElasticsearchOperations { +public class ElasticsearchTemplate implements ElasticsearchOperations, ApplicationContextAware { private static final Logger logger = LoggerFactory.getLogger(ElasticsearchTemplate.class); private Client client; @@ -120,8 +123,8 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { public ElasticsearchTemplate(Client client, ElasticsearchConverter elasticsearchConverter, ResultsMapper resultsMapper) { this.client = client; - this.elasticsearchConverter = (elasticsearchConverter == null) ? new MappingElasticsearchConverter( - new SimpleElasticsearchMappingContext()) : elasticsearchConverter; + this.elasticsearchConverter = (elasticsearchConverter == null) ? new MappingElasticsearchConverter( + new SimpleElasticsearchMappingContext()) : elasticsearchConverter; this.resultsMapper = (resultsMapper == null) ? new DefaultResultMapper(this.elasticsearchConverter.getMappingContext()) : resultsMapper; } @@ -873,7 +876,14 @@ public class ElasticsearchTemplate implements ElasticsearchOperations { return ids; } - private static String[] toArray(List values) { + @Override + public void setApplicationContext(ApplicationContext context) throws BeansException { + if(elasticsearchConverter instanceof ApplicationContextAware){ + ((ApplicationContextAware)elasticsearchConverter).setApplicationContext(context); + } + } + + private static String[] toArray(List values) { String[] valuesAsArray = new String[values.size()]; return values.toArray(valuesAsArray); } 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 c3579e35e..c08e0ce56 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 @@ -61,5 +61,8 @@ public class MappingElasticsearchConverter implements ElasticsearchConverter, Ap @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; + if(mappingContext instanceof ApplicationContextAware){ + ((ApplicationContextAware)mappingContext).setApplicationContext(applicationContext); + } } } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchMappingContext.java b/src/main/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchMappingContext.java index b4c788a89..01d87c56e 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchMappingContext.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/mapping/SimpleElasticsearchMappingContext.java @@ -18,6 +18,9 @@ package org.springframework.data.elasticsearch.core.mapping; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; import org.springframework.data.mapping.context.AbstractMappingContext; import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.util.TypeInformation; @@ -30,11 +33,19 @@ import org.springframework.data.util.TypeInformation; */ public class SimpleElasticsearchMappingContext extends - AbstractMappingContext, ElasticsearchPersistentProperty> { + AbstractMappingContext, ElasticsearchPersistentProperty> implements ApplicationContextAware{ - @Override + private ApplicationContext context; + + @Override protected SimpleElasticsearchPersistentEntity createPersistentEntity(TypeInformation typeInformation) { - return new SimpleElasticsearchPersistentEntity(typeInformation); + final SimpleElasticsearchPersistentEntity persistentEntity = + new SimpleElasticsearchPersistentEntity(typeInformation); + if(context != null) + { + persistentEntity.setApplicationContext(context); + } + return persistentEntity; } @Override @@ -42,4 +53,9 @@ public class SimpleElasticsearchMappingContext extends SimpleElasticsearchPersistentEntity owner, SimpleTypeHolder simpleTypeHolder) { return new SimpleElasticsearchPersistentProperty(field, descriptor, owner, simpleTypeHolder); } + + @Override + public void setApplicationContext(ApplicationContext context) throws BeansException { + this.context = context; + } }