0

我正在尝试使用 neo4j 2.0 M06 在新安装的文件夹上运行“SPARQLPlugin”,数据库中没有数据,但我无法找到有关如何调用 REST 端点的示例。有没有一个例子展示了如何使用 rest 端点来玩 SPARQL?

我正在尝试使用 chrome Advanced rest 客户端,如下所示 使用示例数据进行 POST 调用

我收到如下错误响应:

{
  "message" : "java.lang.String cannot be cast to java.util.Map",
  "exception" : "BadInputException",
  "fullname" : "org.neo4j.server.rest.repr.BadInputException",
  "stacktrace" : [ "org.neo4j.server.rest.repr.formats.JsonFormat.readMap(JsonFormat.java:92)", "org.neo4j.server.rest.repr.RepresentationFormat.readParameterList(RepresentationFormat.java:97)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:134)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:132)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)", "java.lang.Thread.run(Unknown Source)" ],
  "cause" : {
    "message" : "java.lang.String cannot be cast to java.util.Map",
    "exception" : "ClassCastException",
    "stacktrace" : [ "org.neo4j.server.rest.domain.JsonHelper.jsonToMap(JsonHelper.java:53)", "org.neo4j.server.rest.repr.formats.JsonFormat.readMap(JsonFormat.java:88)", "org.neo4j.server.rest.repr.RepresentationFormat.readParameterList(RepresentationFormat.java:97)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:134)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:132)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)", "java.lang.Thread.run(Unknown Source)" ],
    "fullname" : "java.lang.ClassCastException"
  }
}

我检查了该插件是否已加载到 neo4j 中,并且当我做一些愚蠢的事情时它也会抛出错误,所以我认为它可以正常工作。所以真的很期待看到如何使用它。

编辑:

正如下面所建议的,当我在我的有效负载周围包含 { } 时,堆栈跟踪是我得到500状态的地方

    {
  "message" : "com/tinkerpop/blueprints/impls/neo4j/Neo4jGraph",
  "exception" : "NoClassDefFoundError",
  "fullname" : "java.lang.NoClassDefFoundError",
  "stacktrace" : [ "org.neo4j.server.plugin.sparql.SPARQLPlugin.initSail(SPARQLPlugin.java:90)", "org.neo4j.server.plugin.sparql.SPARQLPlugin.executeInsert(SPARQLPlugin.java:113)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.plugins.PluginMethod.invoke(PluginMethod.java:61)", "org.neo4j.server.plugins.PluginManager.invoke(PluginManager.java:168)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:312)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:134)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:132)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)", "java.lang.Thread.run(Unknown Source)" ],
  "cause" : {
    "message" : "com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph",
    "exception" : "ClassNotFoundException",
    "stacktrace" : [ "java.net.URLClassLoader$1.run(Unknown Source)", "java.net.URLClassLoader$1.run(Unknown Source)", "java.security.AccessController.doPrivileged(Native Method)", "java.net.URLClassLoader.findClass(Unknown Source)", "java.lang.ClassLoader.loadClass(Unknown Source)", "sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)", "java.lang.ClassLoader.loadClass(Unknown Source)", "org.neo4j.server.plugin.sparql.SPARQLPlugin.initSail(SPARQLPlugin.java:90)", "org.neo4j.server.plugin.sparql.SPARQLPlugin.executeInsert(SPARQLPlugin.java:113)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.plugins.PluginMethod.invoke(PluginMethod.java:61)", "org.neo4j.server.plugins.PluginManager.invoke(PluginManager.java:168)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:312)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:134)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:132)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)", "java.lang.Thread.run(Unknown Source)" ],
    "fullname" : "java.lang.ClassNotFoundException"
  }
}

我最初没有包括这个,假设这是我如何将数据发布到端点的错误。

编辑 3

我尝试再次构建插件(使用“mvn package -DskipTests”,因为测试失败)这次将其指向插件 pom.xml 中的 2.4.0 蓝图并下载了缺少 blueprints-neo4j-graph-2.4 的正确版本.0.jar 用于蓝图。之后我看到一个新错误,但这次看起来越来越近了,可能又是一些版本不匹配。知道这是什么吗?

{
  "message" : "org.neo4j.kernel.impl.core.NodeManager.getGraphProperties()Lorg/neo4j/kernel/impl/core/GraphProperties;",
  "exception" : "NoSuchMethodError",
  "fullname" : "java.lang.NoSuchMethodError",
  "stacktrace" : [ "com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.getInternalIndexKeys(Neo4jGraph.java:235)", "com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.loadKeyIndices(Neo4jGraph.java:175)", "com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.<init>(Neo4jGraph.java:140)", "com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.<init>(Neo4jGraph.java:144)", "org.neo4j.server.plugin.sparql.SPARQLPlugin.initSail(SPARQLPlugin.java:90)", "org.neo4j.server.plugin.sparql.SPARQLPlugin.executeInsert(SPARQLPlugin.java:113)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.plugins.PluginMethod.invoke(PluginMethod.java:61)", "org.neo4j.server.plugins.PluginManager.invoke(PluginManager.java:168)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:312)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:134)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:132)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)", "java.lang.Thread.run(Unknown Source)" ]
}

查询也返回类似的错误:

{
  "message" : "org.neo4j.kernel.impl.core.NodeManager.getGraphProperties()Lorg/neo4j/kernel/impl/core/GraphProperties;",
  "exception" : "NoSuchMethodError",
  "fullname" : "java.lang.NoSuchMethodError",
  "stacktrace" : [ "com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.getInternalIndexKeys(Neo4jGraph.java:235)", "com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.loadKeyIndices(Neo4jGraph.java:175)", "com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.<init>(Neo4jGraph.java:140)", "com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.<init>(Neo4jGraph.java:144)", "org.neo4j.server.plugin.sparql.SPARQLPlugin.initSail(SPARQLPlugin.java:90)", "org.neo4j.server.plugin.sparql.SPARQLPlugin.executeSPARQL(SPARQLPlugin.java:61)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.plugins.PluginMethod.invoke(PluginMethod.java:61)", "org.neo4j.server.plugins.PluginManager.invoke(PluginManager.java:168)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:312)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:134)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:132)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)", "java.lang.Thread.run(Unknown Source)" ]
}

谢谢,基兰

4

3 回答 3

0

http://neo4j-contrib.github.io/sparql-plugin/#_rest_api有一个经过全面测试的在线示例,它应该可以帮助您入门。

于 2013-11-04T12:36:15.413 回答
0

至于你的问题,如果有一个例子,我会说看看 Peter Neubauer 的这个最小的例子,但它看起来就像你正在尝试的那样或类似的东西。您是否在寻找其他类型的文档?

至于您的问题,异常表明当插件处理您发送的数据时,它希望其 json 解析器生成可以生成 a 的内容Map,但解析器生成的是String. 由于您不能将 a强制String转换为 a Map,因此它会抛出 a ClassCastException。json 解析器找到 aString而不是 aMap的原因可能是因为您省略了{}应该开始和结束 json 有效负载的大括号以表示它是 a JSONObject,而后者又可以反序列化为 a Map。尝试添加大括号,看看是否可以解决问题。

编辑:
您的第二个异常表明服务器插件缺少对蓝图的依赖。您可以通过获取兼容版本blueprints-neo4j-graph.jar并将其放在插件类路径上的目录中来解决此问题。我认为你需要一个 2.5 的快照版本才能与 Neo4j 2.0.x 一起使用,谷歌表示你可以在这里找到一个。

编辑:
测试如何失败?那是你应该开始寻找的地方。

您的第三个异常表明版本不匹配。如果还有另一个缺少的依赖项,您将更有可能得到另一个NoClassDefFoundError. 使用NoSuchMethodError类加载器正在查找类,但该类没有预期的方法,因此被调用的对象必须是与调用对象期望的不同版本的类的实例。你用 Maven 自己构建的?然后运行

mvn dependency:tree -Dverbose

并寻找冲突。

我从来没有使用过 SPARQL 插件,至少还有几周不会使用,所以我只能从一般情况到你的具体情况来回答——你可能想考虑发布一个新问题是否会引起更多关注,强调 Java类加载方面,而不是 Neo4j 和 SPARQL 插件,或者专门为 Neo4j 和 SPARQL 插件安装量身定制的插件。

于 2013-11-01T17:34:29.190 回答
-1

我不确定它是否真的是我问题的答案,但我尝试构建它以针对 1.9.2 并将 jar 文件放在“plugins\gremlin1.5”下,它可以工作!!!看起来这在 2.0.0 M06 上存在问题。

于 2013-11-12T07:29:18.177 回答