Neo4j的,REST API,JAVA - 暗号查询(Neo4j, REST API, java

2019-10-19 10:07发布

我学会了与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

Answer 1:

像@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 = /分贝/数据/



文章来源: Neo4j, REST API, java - cypher queries