我学会了与Java REST API,并试图运行这个简单的代码,但我得到的错误。 蹊跷的这部分代码:RESTAPI graphDb =新RESTAPI ....我用这个外部JAR( http://m2.neo4j.org/content/repositories/releases/org/neo4j/neo4j-rest-graphdb/2.0 0.0 / Neo4j的静止-graphdb-2.0.0.jar )
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.rest.graphdb.RestAPI;
import org.neo4j.rest.graphdb.RestAPIFacade;
import org.neo4j.rest.graphdb.RestGraphDatabase;
import org.neo4j.rest.graphdb.query.QueryEngine;
import org.neo4j.rest.graphdb.query.RestCypherQueryEngine;
import org.neo4j.rest.graphdb.util.QueryResult;
public class CypherQuery {
public static void main(String[] args) {
RestAPI graphDb = new RestAPIFacade("http://localhost: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.println("Total nodes: " + row.get("total"));
}
}
}
错误:
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
像@chrylis指出,你的错误似乎是你没有必要的罐子,因此错误的问题。 现在,从您的意见,我看到您有了解Maven和依赖的困难。 所以这里有一个简单的指南,我为你做。
[请注意,这不是一个一站式指南,并将该软件可能无法运行开箱。 它的运行我的时刻,但它取决于许多因素,包括你正在运行的版本的Neo4j和其他几个配置因素。 不过,这应该足以让你开始。 ]
你需要在你的系统上安装行家。 有Maven的几个很酷的教程。 一个是在这里。 https://www.youtube.com/watch?v=al7bRZzz4oU&list=PL92E89440B7BFD0F6
但是,像我这样的,如果你想更快的方法,新的Eclipse月神预装有它的Maven。 所以,如果你想下载新的Eclipse月神。 即使与旧的Eclipse版本,你可以去市场和安装的Maven的Eclipse插件。
一旦这样做,使Maven快速启动项目,并与下面的一个替换您的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>
我假设你有Neo4j的设置。 我不会去到主要的细节,但在Neo4j的目录,conf下,在neo4j-server.properties文件,你需要取消对该行
org.neo4j.server.webserver.address = 0.0.0.0
这基本上可以让你从你的Java代码,你会从另一台机器上运行访问该服务器。 进行此更改后,请确保您重新启动服务器,它的其他机器访问。 为了测试你可以运行HTTP://ip.address.of.this.machine:7474和随之而来的Neo4j应开放门户网站。
注:我假设你在你的数据库中有一些数据。 这是必需的,否则程序将失败。 如果你需要一些样本数据,去HTTP:// ip_address_of_your_neo4j_web_server:7474 /并加载附带的安装电影图形数据库。
现在,让我们的代码。 产生这个类在上面创建的项目。
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"));
}
}
}
现在运行,你需要首先建立自己的项目,因为直到你运行它的Maven不会下载任何你在pom.xml中指定的罐子。 所以,如果你安装的Maven,走到哪里你有你的pom.xml,然后在命令行MVN清洁包写的目录。 此命令将运行并安装所有的依赖关系,然后将运行程序。 由于没有测试的情况下运行,它会成功。 但是,我们的目标是不运行任何测试用例。 这是下载所有的罐子。 现在,你拥有了一切,你可以运行Java代码,你会看到你的最终结果。
如果你正在使用maven从Eclispe的,然后你右键点击你的项目,然后就作为运行 - > Maven构建。 这是第一次,将出现一个对话框。 只要写包并按Enter键。 它会做同样的事情上面,并把所有的罐子。 再执行该程序像你上面会。
如果你得到错误,如“没有终点”或“错误读取JSON”,然后明白,莫名其妙的REST API是不能读取您的图表。
检查里面neo4j-server.properties财产。 它应该是无论你是在你的URL提。
org.neo4j.server.webadmin.data.uri = /分贝/数据/