简体   繁体   English

使用Spring Data ElasticSearch时出现Nullpointer异常

[英]Nullpointer Exception while using Spring Data ElasticSearch

i tried to use functionality (like in spring data jpa) of custom repository methods. 我试图使用自定义存储库方法的功能(例如在spring data jpa中)。

I had the repository interface in package which configured for spring data elastic search : 我在软件包中有一个存储库接口,该接口配置为用于spring数据弹性搜索:

public interface TestrunSetRepository extends ElasticsearchRepository<TestrunSetDocument, String>, TestrunSetRepositoryCustom {

}

I had implementation of TestrunSetRepositoryCustom 我已经实现了TestrunSetRepositoryCustom

public class TestrunSetRepositoryCustomImpl implements
        TestrunSetRepositoryCustom {

    private ElasticsearchTemplate elasticsearchTemplate;

    public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) {
        this.elasticsearchTemplate = elasticsearchTemplate;
    }

    @Override
    public List<String> getUniqueCategoriesDe() {
        return null;
    }
}

applicationContext.xml: applicationContext.xml:

<elasticsearch:repositories base-package="some.repositories.es" />
<elasticsearch:transport-client id="esClient" 
    cluster-nodes="#{@'some.elasticsearch.cluster.nodes'}"
    cluster-name="#{@'some.elasticsearch.cluster.name'}"/>
<bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
    <constructor-arg name="client" ref="esClient"/>
</bean>
<bean id="testrunSetRepositoryCustom" 
    class="some.repositories.es.impl.TestrunSetRepositoryCustomImpl">
    <property name="elasticsearchTemplate" ref="elasticsearchTemplate"/>
</bean>

but while initializing spring context I got this exception: 但是在初始化spring上下文时,我遇到了这个异常:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testrunSetRepository': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1454)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:249)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:270)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323)
    ... 63 more
Caused by: java.lang.NullPointerException
    at org.springframework.data.elasticsearch.repository.support.MappingElasticsearchEntityInformation.<init>(MappingElasticsearchEntityInformation.java:53)
    at org.springframework.data.elasticsearch.repository.support.MappingElasticsearchEntityInformation.<init>(MappingElasticsearchEntityInformation.java:49)
    at org.springframework.data.elasticsearch.repository.support.ElasticsearchEntityInformationCreatorImpl.getEntityInformation(ElasticsearchEntityInformationCreatorImpl.java:46)
    at org.springframework.data.elasticsearch.repository.query.ElasticsearchQueryMethod.<init>(ElasticsearchQueryMethod.java:42)
    at org.springframework.data.elasticsearch.repository.support.ElasticsearchRepositoryFactory$ElasticsearchQueryLookupStrategy.resolveQuery(ElasticsearchRepositoryFactory.java:108)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:290)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:158)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:162)
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.getObject(RepositoryFactoryBeanSupport.java:44)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)

The name of the custom class should be "repository interface name" + Impl and that class should implement your custom interface(the same custom interface should be extend by your repository interface) 自定义类的名称应为“存储库接口名称” + Impl,并且该类应实现您的自定义接口(相同的自定义接口应由您的存储库接口扩展)

Example: 例:

//repository interface
public interface ComplexElasticsearchRepository extends ElasticsearchRepository<SampleEntity, String>, ComplexElasticsearchRepositoryCustom {

}

//custom implementation 
public class ComplexElasticsearchRepositoryImpl implements ComplexElasticsearchRepositoryCustom {
    public String doSomethingSpecial() {
        return "2+2=4";
    }
}

//custome interface 
public interface ComplexElasticsearchRepositoryCustom {
    public String doSomethingSpecial();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM