如何使用REST端点与neo4j SPARQLPlugin一起使用

时间:2013-10-31 18:22:17

标签: neo4j

我正在尝试使用neo4j 2.0 M06运行“SPARQLPlugin”,在新安装的文件夹中没有数据库中的数据,但是我无法找到关于如何调用REST端点的示例。是否有一个示例显示了如何使用其余端点与SPARQL一起使用?

我正在尝试使用chrome Advanced rest客户端,如下所示 POST Call with the example data

我收到如下错误回复:

{
  "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蓝图并下载了正确版本的缺失蓝图-neo4j- graph-2.4.0.jar for blueprint。之后,我看到一个新的错误,但看起来这次越来越接近,可能是某些版本不匹配了。知道这是什么吗?

{
  "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)" ]
}

Query也返回了类似的错误:

{
  "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)" ]
}

谢谢,Kiran

3 个答案:

答案 0 :(得分:0)

关于你的问题,如果有一个例子,我会说看看Peter Neubauer的这个minimal example,但它看起来就像你正在尝试的那样。您在寻找其他类型的文档吗?

关于你的问题,异常表明当插件处理你发送的数据时,它希望它的json解析器生成一些可以生成Map的东西,而解析器生成一个String。由于您无法将String投射到Map,因此会抛出ClassCastException。 json解析器找到String而不是Map的原因可能是因为您省略了应该开始和结束json有效内容的大括号{}以表示它是{{1} },反过来可以反序列化为JSONObject。尝试添加大括号,看看是否能解决问题。

修改
您的第二个异常表明服务器插件缺少对Blueprints的依赖性。您可以通过获取兼容版本的Map并将其放在插件类路径上的目录中来解决此问题。我认为您需要2.5快照版本才能与Neo4j 2.0.x一起使用,Google表示您可能会找到一个here

修改
测试如何失败?这就是你应该开始寻找的地方。

您的第三个例外表示版本不匹配。如果还有另一个缺失的依赖项,那么你很可能会得到另一个blueprints-neo4j-graph.jar。使用NoClassDefFoundError类加载器正在查找类,但是类没有预期的方法,因此被调用对象必须是类的不同版本的实例,而不是调用对象所期望的。你是用Maven自己建造的吗?然后运行

NoSuchMethodError

并寻找冲突。

我从未使用过SPARQL插件,至少在未来几周内也没有使用过,所以我只能回复一般情况下你的细节 - 你可能想要考虑是否会更多关注发布一个新问题,强调Java类加载方面而不是Neo4j&amp; SPARQL插件,或专为Neo4j&amp; SPARQL插件安装。

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

我不确定它是否真的是我的问题的答案,但我试图构建它以1.9.2为目标,并将jar文件放在“plugins \ gremlin1.5”下,它的工作原理!看起来这样有问题可以在2.0.0 M06上运行。