使用Java查询ArangoDB中的边引发Gson异常

使用Java查询ArangoDB中的边引发Gson异常,java,gson,arangodb,Java,Gson,Arangodb,我是ArangoDB的新手,尝试做一些非常基本的查询。我成功地添加了顶点和边,但是检索边的查询总是抛出一个异常。我从(非常简单的)文档中尝试了几个不同的查询,它总是抛出相同的结果。以下是其中一个查询: CursorEntity<BaseDocument> r = arangoDriver.graphGetEdges("MyGraph", BaseDocument.class, "Person/1"); while (r.iterator().hasNext()){ BaseD

我是ArangoDB的新手,尝试做一些非常基本的查询。我成功地添加了顶点和边,但是检索边的查询总是抛出一个异常。我从(非常简单的)文档中尝试了几个不同的查询,它总是抛出相同的结果。以下是其中一个查询:

CursorEntity<BaseDocument> r = arangoDriver.graphGetEdges("MyGraph", BaseDocument.class, "Person/1");
while (r.iterator().hasNext()){
    BaseDocument d = r.iterator().next();
    System.out.println(d.getDocumentHandle());
}
我几乎认为这是一个错误?最新版本可能有问题?还是我错过了什么

使用最新版本。。2.6.8和驾驶员2.5.7


更新:如果我使用不存在的ID,它将返回零结果,没有异常;如果我使用现有ID,则会引发相同的异常。这说明我使用了正确的参数,问题很可能是一个bug。

正如stj所指出的,有一个驱动程序版本修复了最初的问题:

对于以下代码,这应该可以正常工作:

CursorEntity<BaseDocument> r = driver.graphGetEdges("myGraph",
                               BaseDocument.class, "Person/1"); 
Iterator<BaseDocument> it = r.iterator();
while {
 it.hasNext()) {
   BaseDocument d = it.next();
   System.out.println(d.getDocumentHandle());
 }
}
CursorEntity r=driver.graphGetEdges(“myGraph”,
BaseDocument.class,“个人/1”);
迭代器it=r.Iterator();
当{
it.hasNext()){
BaseDocument d=it.next();
System.out.println(d.getDocumentHandle());
}
}
示例代码
while(r.iterator().hasNext()){…}
不起作用,因为它将在每次迭代中创建一个新的迭代器对象,因此永远不会完成


我们在

中添加了更多示例,说明如何使用java中的ArangoDB图形。您可以查看ArangoDB Web界面,看看集合和图形是否存在吗?您确定在查询失败时驱动程序使用的数据库中,您正在查询的数据库中确实存在名为MyGraph的图形吗?我这样问是因为我尝试了上面的代码(第一个示例),它对我很有效。我使用了Arangodb2.6.8和Java驱动程序的最新版本(git commit d73f91f8226182584a6e0eb6f881caeabd38072b)。我使用ArangoDB的web界面在默认的
\u系统
数据库中手动创建一个名为
MyGraph
的图形。运行第一个示例中的代码会为我返回一个空数组,但没有异常。看起来还可以。您使用哪个驱动程序版本?@dothebart是的,它存在。我可以通过编程添加它们,并可以通过控制台查询它们。@stj是的,它全部存在。有趣的是,如果我输入一个不存在的id,它也会返回一个空数组,并且没有异常。只有当我查询实际存在的东西时,它才会抛出异常。我通过maven获得了驱动程序,昨天刚下载,上面说驱动程序版本2.4可能是maven repo中的旧版本?不幸的是,他们没有一个简单的jar文件可以在他们的网站上下载最新的驱动程序。我将驱动程序更新为最新版本2.5.7,但仍然是一样的。。我从文档中得到的一些函数现在已经被弃用了,但其他所有函数都是一样的。如果我键入一个不存在的ID,它将返回零结果,如果我使用一个现有ID,则会引发相同的异常。。
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:868)
at com.google.gson.Gson$1.deserialize(Gson.java:126)
at com.arangodb.entity.EntityDeserializers$CursorEntityDeserializer.deserialize(EntityDeserializers.java:519)
at com.arangodb.entity.EntityDeserializers$CursorEntityDeserializer.deserialize(EntityDeserializers.java:488)
at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.arangodb.entity.EntityFactory.createEntity(EntityFactory.java:109)
at com.arangodb.BaseArangoDriver.createEntityImpl(BaseArangoDriver.java:270)
at com.arangodb.BaseArangoDriver.createEntity(BaseArangoDriver.java:181)
at com.arangodb.BaseArangoDriver.createEntity(BaseArangoDriver.java:219)
at com.arangodb.impl.InternalCursorDriverImpl.executeQuery(InternalCursorDriverImpl.java:78)
at com.arangodb.ArangoDriver.executeQuery(ArangoDriver.java:1877)
at com.arangodb.ArangoDriver.graphGetEdges(ArangoDriver.java:4135)
at x.y.z.database.arangodb.Arango.main(Arango.java:34)
CursorEntity<BaseDocument> r = driver.graphGetEdges("myGraph",
                               BaseDocument.class, "Person/1"); 
Iterator<BaseDocument> it = r.iterator();
while {
 it.hasNext()) {
   BaseDocument d = it.next();
   System.out.println(d.getDocumentHandle());
 }
}