Исключение при запуске с Neo4j 2.0 с Spring Data 3.0 Rest

Я пытаюсь перейти на Neo4j 2.0 и Spring Data 3.0. Я получаю нулевой указатель при запуске приложения до выполнения любого из моих кодов.

Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing statement MATCH (ref:ReferenceNode {name:{name}}) RETURN ref; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing statement MATCH (ref:ReferenceNode {name:{name}}) RETURN ref; nested exception is java.lang.NullPointerException
at org.springframework.data.neo4j.support.query.CypherQueryEngine.query(CypherQueryEngine.java:56)
at org.springframework.data.neo4j.support.ReferenceNodes.executeQuery(ReferenceNodes.java:77)
at org.springframework.data.neo4j.support.ReferenceNodes.getReferenceNode(ReferenceNodes.java:81)
at org.springframework.data.neo4j.support.typerepresentation.SubReferenceNodeTypeRepresentationStrategy.isStrategyAlreadyInUse(SubReferenceNodeTypeRepresentationStrategy.java:95)
at org.springframework.data.neo4j.support.typerepresentation.TypeRepresentationStrategyFactory.chooseStrategy(TypeRepresentationStrategyFactory.java:56)
at org.springframework.data.neo4j.support.typerepresentation.TypeRepresentationStrategyFactory.<init>(TypeRepresentationStrategyFactory.java:39)
at org.springframework.data.neo4j.config.Neo4jConfiguration.typeRepresentationStrategyFactory(Neo4jConfiguration.java:146)
at org.springframework.data.neo4j.config.Neo4jConfiguration$$EnhancerByCGLIB$$4b018b97.CGLIB$typeRepresentationStrategyFactory$6(<generated>)
at org.springframework.data.neo4j.config.Neo4jConfiguration$$EnhancerByCGLIB$$4b018b97$$FastClassByCGLIB$$5306fd26.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:286)
at org.springframework.data.neo4j.config.Neo4jConfiguration$$EnhancerByCGLIB$$4b018b97.typeRepresentationStrategyFactory(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:160)
... 112 more
Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing statement MATCH (ref:ReferenceNode {name:{name}}) RETURN ref; nested exception is java.lang.NullPointerException
at org.springframework.data.neo4j.support.query.CypherQueryEngine.parseAndExecuteQuery(CypherQueryEngine.java:67)
at org.springframework.data.neo4j.support.query.CypherQueryEngine.query(CypherQueryEngine.java:53)
... 128 more
Caused by: java.lang.NullPointerException
at org.neo4j.cypher.ExecutionEngine.prepare(ExecutionEngine.scala:75)
at org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:60)
at org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:65)
at org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:78)
at org.springframework.data.neo4j.support.query.CypherQueryEngine.parseAndExecuteQuery(CypherQueryEngine.java:65)
... 129 more

Зависимости Neo4j и spring-data от Pom.xml

<properties>
    <spring.version>3.2.6.RELEASE</spring.version>
    <springSecurity.version>3.2.0.RELEASE</springSecurity.version>
    <jackson.version>1.9.13</jackson.version>
    <neo4j.version>2.0.0</neo4j.version>
    <springDataNeo4j.version>3.0.0.RC1</springDataNeo4j.version>
    <neo4j-rest-graphdb.version>2.0.0</neo4j-rest-graphdb.version>
</properties>
<!--Neo4j-->
    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j</artifactId>
        <version>${neo4j.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-neo4j</artifactId>
        <version>${springDataNeo4j.version}</version>
    </dependency>


    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-rest-graphdb</artifactId>
        <version>${neo4j-rest-graphdb.version}</version>
    </dependency>

Контекстный файл

<neo4j:config graphDatabaseService="graphDatabaseService" />

<bean id="graphDatabaseService" class="org.neo4j.rest.graphdb.RestGraphDatabase">
    <constructor-arg value="http://localhost:7474/db/data"/>
</bean>

<context:annotation-config />

Neo4j запущен и работает.

При подключении через http://localhost:7474/browser/ все работает нормально, включая оскорбительный запрос MATCH (ref:ReferenceNode {name:{name}}) RETURN ref;


person rantunes    schedule 03.02.2014    source источник


Ответы (1)


Я считаю, что вам не нужны никакие org.neo4j.* зависимости. Возможно, это сработает только с <artifactId>spring-data-neo4j</artifactId> и <artifactId>spring-data-neo4j-rest</artifactId>. Это конфигурация, которую вы должны попробовать:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-neo4j</artifactId>
    <version>3.0.0.RC1</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-neo4j-rest</artifactId>
    <version>3.0.0.RC1</version>
</dependency>

Обновить

Что точно, так это то, что сообщение об ошибке генерируется org.springframework.data.neo4j.support.ReferenceNodes в getReferenceNode (http://bit.ly/1eDYlYS) .

Метод getReferenceNode вызывается только из одного места в SDN, по адресу org.springframework.data.neo4j.support.typerepresentation.SubReferenceNodeTypeRepresentationStrategy (http://bit.ly/LW5gly) .

Этот вызов ищет узел с меткой :ReferenceNode и атрибутом name, равным root.

Поэтому я бы предложил попробовать создать такой узел с помощью Cypher:

CREATE (n:ReferenceNode {name:"root"}) RETURN n;

и посмотреть, если ошибка все еще происходит.

person Grégoire C    schedule 03.02.2014
comment
Спасибо за совет. Вы правы в том, что вам не нужны зависимости org.neo4j.*. Я исключил их, и он отлично работает. Тем не менее, я все еще получаю точно такие же исключения после запуска сервера. - person rantunes; 05.02.2014
comment
Я нашел это обсуждение, которое, возможно, связано с вашей проблемой: groups.google.com/ forum/#!topic/neo4j/XIHxfqJVWgc Концепция эталонного узла была удалена в Neo4j между версиями M06 и RC1. SDN 3.0 M1 по-прежнему использует Neo4j 2.0 M06 и опирается на эталонный узел. Таким образом, к сожалению, SDN пока нельзя использовать с Neo4j 2.0 RC1. но вы используете 3.0.0.RC1, а не 3.0.0.M1, поэтому вам следует проверить, зависит ли это от более новой версии Neo4J. . - person Grégoire C; 05.02.2014
comment
Согласно этому коммиту, который, кажется, включен в 3.0.0.RC1, это зависит от Neo4j 2.0. - person rantunes; 07.02.2014
comment
К сожалению, не решил. Я думаю, что нулевой указатель выбрасывается из-за того, что параметры, передаваемые в запрос, равны нулю. - person rantunes; 08.02.2014
comment
параметры, передаваемые в запрос, равны нулю - есть новости? - person Markus Schulte; 30.10.2014