2014-01-15 64 views
2

我一直在深入研究Neo4j 2.0 GA版本并学习如何在示例Java应用程序中使用它。我正在使用一个独立的Neo4j数据库,并通过neo4j-rest-graphdb:2.0.0依赖jar的java rest绑定连接到它。下面的代码,我用...从Java代码执行Cypher查询时发生空异常错误。 (Neo4J)

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(); 
    } 
} 
} 

工作只是为了确保我的数据库运行起来,我添加了一行来查询已知现有节点和我得到的结果回来。然而,当我试图执行查询,我得到以下错误...

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) 

你可以从日志中的第一行看到,该数据库不会返回我要求的用户。有什么我错过了吗?

编辑:我可以成功地从浏览器控制台上运行这些查询数据库。我也尝试过使用嵌入式数据库,并从代码成功运行。在独立实例中是否有一些数据库配置可能导致此问题?

感谢您的帮助。

回答

1

你必须使用new RestCypherQueryEngine(gd.getRestApi())

然后用

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

您还可以使用RESTAPI直接:

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

永远不会做,不工作:

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

非常感谢Mic HAEL。但是,似乎gd对象没有可用的getRestApi()方法。我假设行gd = new RestGraphDatabase(url)是有效的? – Jome

+0

也许正确的问题是我如何定义RestAPI传递给RestGraphDatabase构造函数?谢谢你的时间。 – Jome

+0

我想我想通了。我仍然在使用GraphDatabaseService接口,而不是创建RestGraphDatabase的实例。它像一个魅力!谢谢! – Jome

相关问题