简体   繁体   English

从Java代码执行Cypher查询时出现Null Exception错误。 (Neo4j的)

[英]Null Exception error when executing Cypher query from Java code. (Neo4J)

I have been digging into Neo4j 2.0 GA release and learning to work with it in a sample Java application. 我一直在研究Neo4j 2.0 GA版本,并学习如何在示例Java应用程序中使用它。 I am using a standalone Neo4j db and connecting to it via the java rest bindings from the neo4j-rest-graphdb:2.0.0 dependency jar. 我正在使用独立的Neo4j db,并通过neo4j-rest-graphdb:2.0.0依赖项jar中的java rest绑定连接到它。 Below in the code I am working with... 在下面我正在使用的代码中...

import org.apache.log4j.Logger;
import org.neo4j.cypher.javacompat.ExecutionEngine;
import org.neo4j.cypher.javacompat.ExecutionResult;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Transaction;
import org.neo4j.rest.graphdb.RestGraphDatabase;

public class NeoService {

Logger log = Logger.getLogger(this.getClass());
GraphDatabaseService gd; 
ExecutionEngine engine;

public NeoService(){
    gd = new RestGraphDatabase("http://neo4jbox:7474/db/data/");
    engine = new ExecutionEngine(gd);
}


public String createPerson() {
    ExecutionResult result;

    try(Transaction tx = gd.beginTx()){
        log.info("Returned person: " + gd.getNodeById(177L).getProperty("username").toString());
        String query = "match (p:Person{username:'someusername'}) return p";
        result = engine.execute(query);
        tx.success();
        log.info(query);
        log.info(result.dumpToString());
        return result.dumpToString();
    }
}
}

Just to be sure my db was up and running, I added a line to query for a known existing node and I do get a result back. 为了确保我的数据库正常运行,我添加了一行查询已知的现有节点,然后返回结果。 However, when I attempt to execute the query, I get the following error... 但是,当我尝试执行查询时,出现以下错误...

2014-01-15 09:51:20.477  INFO 18078 --- [nio-8080-exec-1] com.yookos.neostart.services.DbService   : Returned person: jomski2009
2014-01-15 09:51:20.752 ERROR 18078 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause

java.lang.NullPointerException: null
at org.neo4j.cypher.ExecutionEngine.prepare(ExecutionEngine.scala:75)
at org.neo4j.cypher.ExecutionEngine.profile(ExecutionEngine.scala:43)
at org.neo4j.cypher.ExecutionEngine.profile(ExecutionEngine.scala:51)
at org.neo4j.cypher.javacompat.ExecutionEngine.profile(ExecutionEngine.java:94)
at com.yookos.neostart.services.DbService.createPerson(DbService.java:35)
at com.yookos.neostart.controller.HomeController.createPerson(HomeController.java:25)
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.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:214)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:748)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
at org.sprinork.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilter(WebRequestTraceFilter.java:114)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.boot.actuate.autoconfigure.EndpointWebMvcAutoConfiguration$1.doFilterInternal(EndpointWebMvcAutoConfiguration.java:126)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration$MetricsFilter.doFilter(MetricFilterAutoConfiguration.java:97)
at org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration$MetricsFilter.doFilter(MetricFilterAutoConfiguration.java:82)
at org.apache.catalina.core.ApplicationFiln.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:680)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1721)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1679)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

As you can see from the first line in the logs, the db does return the user I requested for. 从日志的第一行可以看到,数据库确实返回了我请求的用户。 Is there anything I am missing out? 有什么我想念的吗?

EDIT: I can successfully run these queries on the db from the browser console. 编辑:我可以从浏览器控制台在数据库上成功运行这些查询。 I also did try this using an embedded database and it ran successfully from the code. 我也使用嵌入式数据库进行了尝试,并且可以从代码成功运行。 Is there some db configuration on the standalone instance that may be causing this? 独立实例上是否有一些数据库配置可能会导致这种情况?

Thanks for your help. 谢谢你的帮助。

You have to use new RestCypherQueryEngine(gd.getRestApi()) and 您必须使用new RestCypherQueryEngine(gd.getRestApi())

then use 然后使用

QueryResult<Map<String, Object>> engine.query(String statement, Map<String, Object> params)

You can also use RestAPI directly: 您也可以直接使用RestAPI:

QueryResult<Map<String, Object>> restApi.query(String statement, Map<String, Object> params, ResultConverter resultConverter);

NEVER DO, DOESN'T WORK: 永不做,不做:

gd = new RestGraphDatabase("http://neo4jbox:7474/db/data/");
engine = new ExecutionEngine(gd);

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

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