Neo4j、RESTAPI、java-cypher查询

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

我用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.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"));
        } 
    }
}