无法从RestTraverser访问iterator(),它提供异常java.lang.IllegalAccessError

时间:2014-03-31 12:29:20

标签: neo4j graph-databases graph-traversal

我正在使用neo4j java-rest-binding项目实现遍历框架。 代码如下:

RestAPI db = new RestAPIFacade("http://localhost:7474/db/data");
RestNode n21 = db.getNodeById(21);
Map<String,Object> traversalDesc = new HashMap<String, Object>();
traversalDesc.put("order", "breadth_first");
traversalDesc.put("uniqueness", "node_global");
traversalDesc.put("uniqueness", "relationship_global");
traversalDesc.put("returnType", "fullpath");
traversalDesc.put("max_depth", 2);
RestTraverser traverser = db.traverse(n21, traversalDesc);
Iterable<Node> nodes = traverser.nodes();
System.out.println("All Nodes:");      // First Task
for(Node n:nodes){
System.out.println(n.getId());
}
Iterable<Relationship> rels = traverser.relationships();
System.out.println("All Relations:");  // Second Task
for(Relationship r:rels){
System.out.println(r.getId());
}
Iterator<Path> paths = traverser.iterator();  // Third Task
while(paths.hasNext()){
    System.out.println(paths.next());
}

我需要在代码中注释3个任务:

  1. 打印与节点号相关的所有节点ID。 21
  2. 打印与节点号相关的所有关系ID。 21
  3. 遍历与节点号相关的所有路径。 21
  4. 任务1&amp; 2工作正常。 但是当我尝试在第3个任务中执行traverser.iterator()时,它会抛出一个例外:

    java.lang.IllegalAccessError: tried to access class org.neo4j.helpers.collection.WrappingResourceIterator from class org.neo4j.rest.graphdb.traversal.RestTraverser
    

    任何人都可以请检查为什么会发生这种情况或者如果我做错了那么什么是正确的方法。 在此先感谢。

1 个答案:

答案 0 :(得分:0)

我不相信通过REST DB绑定使用Neo4j Traversal Framework得到了适当的支持,也不建议。如果您通过REST遍历,则随着遍历的进行,将通过网络检索每个节点和每个关系,从而为遍历带来巨大的开销。

编辑:以上情况并非如此,REST遍历器比我想象的要聪明。

通常,使用Cypher并使用JDBC访问Neo4j服务器会更快。在此处阅读有关JDBC的更多信息:https://github.com/neo4j-contrib/neo4j-jdbc

如果您确实想使用Traversal Framework,则应使用Server Extensions,它允许您设计在服务器本身上运行的遍历,然后仅通过网络移动遍历的结果。在此处阅读有关服务器扩展的更多信息:http://docs.neo4j.org/chunked/stable/server-unmanaged-extensions.html