2014-01-15 43 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

相關問題