Neo4j、RESTAPI、java-cypher查询
我用Java学习RESTAPI,并尝试运行这个简单的代码,但我遇到了错误。这部分代码有问题:RestAPI graphDb=new RestAPI。。。。我使用这个外部JAR()Neo4j、RESTAPI、java-cypher查询,java,api,rest,cypher,Java,Api,Rest,Cypher,我用Java学习RESTAPI,并尝试运行这个简单的代码,但我遇到了错误。这部分代码有问题:RestAPI graphDb=new RestAPI。。。。我使用这个外部JAR() import java.util.Collections; 导入java.util.Iterator; 导入java.util.Map; 导入org.neo4j.graphdb.GraphDatabaseService; 导入org.neo4j.rest.graphdb.RestAPI; 导入org.neo4j.res
import java.util.Collections;
导入java.util.Iterator;
导入java.util.Map;
导入org.neo4j.graphdb.GraphDatabaseService;
导入org.neo4j.rest.graphdb.RestAPI;
导入org.neo4j.rest.graphdb.RestAPIFacade;
导入org.neo4j.rest.graphdb.RestGraphDatabase;
导入org.neo4j.rest.graphdb.query.QueryEngine;
导入org.neo4j.rest.graphdb.query.RestCypherQueryEngine;
导入org.neo4j.rest.graphdb.util.QueryResult;
公共类密码查询{
公共静态void main(字符串[]args){
RestAPI graphDb=新的RestAPIFacade(“http://localhost:7474/db/data/");
查询引擎=新的RestCypherQueryEngine(graphDb);
QueryResult result result=engine.query(“开始n=node(*)返回计数(n)为总计”,Collections.EMPTY\u映射);
迭代器迭代器=result.Iterator();
if(iterator.hasNext()){
Map row=iterator.next();
System.out.println(“总节点数:”+row.get(“总”);
}
}
}
错误:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/ws/rs/core/Response$StatusType
at org.neo4j.rest.graphdb.RestAPIFacade.<init>(RestAPIFacade.java:295)
at cz.mendelu.bp.CypherQuery.main(CypherQuery.java:19)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.core.Response$StatusType
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more
线程“main”java.lang.NoClassDefFoundError中的异常:javax/ws/rs/core/Response$StatusType
位于org.neo4j.rest.graphdb.RestAPIFacade(RestAPIFacade.java:295)
位于cz.mendelu.bp.CypherQuery.main(CypherQuery.java:19)
原因:java.lang.ClassNotFoundException:javax.ws.rs.core.Response$StatusType
在java.net.URLClassLoader$1.run(URLClassLoader.java:366)
在java.net.URLClassLoader$1.run(URLClassLoader.java:355)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:354)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 还有两个
正如@chrylis指出的,您的错误似乎是您没有所需的jar,因此出现了错误。现在从您的评论中,我看到您在理解maven和依赖项方面有困难。这是我为你做的一个简单的指南 [请理解,本指南并非一站式指南,本程序可能会 不是从盒子里跑出来的。它现在正在为我跑,但是它 这取决于许多因素,包括您正在运行的neo4j的版本 和其他一些配置因素。尽管如此,这应该足以 你开始了 您需要在系统上安装maven。很少有关于maven的很酷的教程。一个在这里 但和我一样,如果你想要一种更快的方式,新的Eclipse Luna也安装了maven。因此,如果您愿意,请下载新的eclipse luna。即使使用较旧的eclipse版本,您也可以到市场上安装maven for eclipse 完成后,创建一个maven quickstart项目,并用下面的文件替换pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>rash.experiments</groupId>
<artifactId>neo4j</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>neo4j</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>neo4j-release-repository</id>
<name>Neo4j Maven 2 release repository</name>
<url>http://m2.neo4j.org/content/repositories/releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-rest-graphdb</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
</project>
这基本上允许您从java代码访问该服务器,您将从另一台机器上运行该代码。进行此更改后,请确保重新启动服务器,并且其他计算机可以访问该服务器。要进行测试,您可以运行neo4j,并且应该打开neo4j附带的web门户
注意:我假设您的数据库中有一些数据。这是
否则程序将失败。如果你需要一些样品
数据,转到并加载
安装附带的电影图形数据库
现在让我们来编写代码。在上面创建的项目中创建此类
package rash.experiments.neo4j;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import org.neo4j.rest.graphdb.RestAPI;
import org.neo4j.rest.graphdb.RestAPIFacade;
import org.neo4j.rest.graphdb.query.QueryEngine;
import org.neo4j.rest.graphdb.query.RestCypherQueryEngine;
import org.neo4j.rest.graphdb.util.QueryResult;
public class Neo4JRestTest
{
public static void main(String args[])
{
RestAPI graphDb = new RestAPIFacade("http://192.168.1.8:7474/db/data/");
QueryEngine engine = new RestCypherQueryEngine(graphDb);
QueryResult<Map<String, Object>> result = engine.query("start n=node(*) return count(n) as total", Collections.EMPTY_MAP);
Iterator<Map<String, Object>> iterator = result.iterator();
if (iterator.hasNext())
{
Map<String, Object> row = iterator.next();
System.out.print("Total nodes: " + row.get("total"));
}
}
}
package-rash.experiments.neo4j;
导入java.util.Collections;
导入java.util.Iterator;
导入java.util.Map;
导入org.neo4j.rest.graphdb.RestAPI;
导入org.neo4j.rest.graphdb.RestAPIFacade;
导入org.neo4j.rest.graphdb.query.QueryEngine;
导入org.neo4j.rest.graphdb.query.RestCypherQueryEngine;
导入org.neo4j.rest.graphdb.util.QueryResult;
公共类Neo4JRestTest
{
公共静态void main(字符串参数[])
{
RestAPI graphDb=新的RestAPIFacade(“http://192.168.1.8:7474/db/data/");
查询引擎=新的RestCypherQueryEngine(graphDb);
QueryResult result result=engine.query(“开始n=node(*)返回计数(n)为总计”,Collections.EMPTY\u映射);
迭代器迭代器=result.Iterator();
if(iterator.hasNext())
{
Map row=iterator.next();
System.out.print(“总节点数:”+row.get(“总”));
}
}
}
现在要运行,您需要首先构建项目,因为在运行之前,maven不会下载您在pom.xml中指定的任何JAR。因此,如果安装了maven,请转到pom.xml所在的目录,然后在命令行mvn clean包中进行编写。此命令将运行并安装所有依赖项,然后运行您的程序。由于没有要运行的测试用例,它将成功。但是我们的目标是不运行任何测试用例。这是下载所有的罐子。现在您已经拥有了一切,您可以运行java代码并看到最终结果
如果您使用的是来自eclispe的maven,那么右键单击您的项目,然后以->maven build的方式运行。这是第一次出现一个对话框。只需在其中写入包并按enter键。它将做与上述相同的事情,并带来所有的罐子。然后像上面那样执行程序
如果您遇到诸如“无端点”或“读取JSON时出错”之类的错误,那么请理解RESTAPI无法读取您的图形
检查neo4j-server.properties中的属性。它应该是您在URL中提到的任何内容
org.neo4j.server.webadmin.data.uri=/db/data/
您是如何构建和执行此程序的
ClassNotFoundException
是一个非常标准的Java问题。Spring->CypherQuery类作为Java应用程序运行,它是一个Maven存储库。你不应该下载和导入ra
org.neo4j.server.webserver.address = 0.0.0.0
package rash.experiments.neo4j;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import org.neo4j.rest.graphdb.RestAPI;
import org.neo4j.rest.graphdb.RestAPIFacade;
import org.neo4j.rest.graphdb.query.QueryEngine;
import org.neo4j.rest.graphdb.query.RestCypherQueryEngine;
import org.neo4j.rest.graphdb.util.QueryResult;
public class Neo4JRestTest
{
public static void main(String args[])
{
RestAPI graphDb = new RestAPIFacade("http://192.168.1.8:7474/db/data/");
QueryEngine engine = new RestCypherQueryEngine(graphDb);
QueryResult<Map<String, Object>> result = engine.query("start n=node(*) return count(n) as total", Collections.EMPTY_MAP);
Iterator<Map<String, Object>> iterator = result.iterator();
if (iterator.hasNext())
{
Map<String, Object> row = iterator.next();
System.out.print("Total nodes: " + row.get("total"));
}
}
}