当前位置: 首页 > 知识库问答 >
问题:

使用JanusGraph的ReferenceEdge序列化错误

宓诚
2023-03-14

在Java应用程序中使用Gremlin从远程JanusGraph服务器检索边缘列表时,我遇到了序列化错误(以下是错误消息和配置)。

这是引发错误的遍历:

List<Edge> eList = g.E().toList();

试图只获得一个边缘也会引发错误:

Edge edge= g.E().next();

然而,当检索顶点或顶点列表时,它可以完美地工作:

List<Vertex> vList = g.V().toList();

这是我的remote-objects.yaml文件:

hosts: [localhost]
port: 8182
serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0,
              config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}

这是获得远程遍历的代码:

PropertiesConfiguration conf = new PropertiesConfiguration(remote-objects.yaml);
cluster = Cluster.open(conf.getString("gremlin.remote.driver.clusterFile"));
client = cluster.connect();
g = AnonymousTraversalSource.traversal().withRemote(propFileName);

这是我的服务器配置中的序列化程序:

serializers:
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0, org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0, org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  # Older serialization versions for backwards compatibility:
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0, org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: {ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0, org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0, org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0, org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0, org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}

这是错误消息:

java.util.concurrent.CompletionException: io.netty.handler.codec.DecoderException: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: org.apache.tinkerpop.shaded.kryo.KryoException: java.lang.NegativeArraySizeException
Serialization trace:
id (org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge)
    at java.util.concurrent.CompletableFuture.reportJoin(CompletableFuture.java:375)
CompletableFuture.java:375
    at java.util.concurrent.CompletableFuture.join(CompletableFuture.java:1934)
CompletableFuture.java:1934
    at org.apache.tinkerpop.gremlin.driver.ResultSet.one(ResultSet.java:119)
ResultSet.java:119
    at org.apache.tinkerpop.gremlin.driver.ResultSet$1.hasNext(ResultSet.java:171)
ResultSet.java:171
    at org.apache.tinkerpop.gremlin.driver.ResultSet$1.next(ResultSet.java:178)
ResultSet.java:178
    at org.apache.tinkerpop.gremlin.driver.ResultSet$1.next(ResultSet.java:165)
ResultSet.java:165
    at org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal$TraverserIterator.next(DriverRemoteTraversal.java:140)
DriverRemoteTraversal.java:140
    at org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal$TraverserIterator.next(DriverRemoteTraversal.java:125)
DriverRemoteTraversal.java:125
    at org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversal.nextTraverser(DriverRemoteTraversal.java:106)
DriverRemoteTraversal.java:106
    at org.apache.tinkerpop.gremlin.process.remote.traversal.step.map.RemoteStep.processNextStart(RemoteStep.java:80)
RemoteStep.java:80
    at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:128)
AbstractStep.java:128
    at org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.next(AbstractStep.java:38)
AbstractStep.java:38
    at org.apache.tinkerpop.gremlin.process.traversal.Traversal.fill(Traversal.java:179)
Traversal.java:179
    at org.apache.tinkerpop.gremlin.process.traversal.Traversal.toList(Traversal.java:117)
Traversal.java:117
    at com.ibm.graph.App.main(App.java:25)
App.java:25
Caused by: io.netty.handler.codec.DecoderException: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: org.apache.tinkerpop.shaded.kryo.KryoException: java.lang.NegativeArraySizeException

共有1个答案

濮阳弘扬
2023-03-14

我相信您的问题在于驱动程序和服务器之间的序列化程序配置不匹配。对于驱动程序,您可以执行以下操作:

serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0,
              config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}

但对于您拥有的服务器:

- { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, 
    config: { ioRegistries [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0, 
                            org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}

您在驱动程序端省略了< code > tinkerioregistryv 3d 0 。使用< code>ioRegistries时,注册表的添加顺序很重要。因此,如果您首先在服务器上添加了< code > JanusGraphIoRegistry ,然后在驱动程序上不小心省略了< code > tinkerioregistryv 3d 0 ,那么您可能已经很幸运了,因为序列化程序注册标识符将与JansuGraph对齐。

无论如何,将< code > tinkerioregistryv 3d 0 添加到驱动程序配置中,或者将其从服务器配置中删除,一切都应该正常。顺便提一下,如果通过网络序列化TinkerGraph实例(例如,使用< code>subgraph()步骤),通常只需要< code > tinkerioregistryv 3d 0 。

 类似资料:
  • JanusGraph 是一个高度可扩展的分布式图数据库,专门用于存储和查询包含数千亿个分布在多机群集中的极点和边缘的图形。 JanusGraph 是一个事务处理型数据库,可以支持数千个并发用户实时执行复杂的图遍历。 JanusGraph 支持各种存储后端: Apache Cassandra® Apache HBase® Google Cloud Bigtable Oracle BerkeleyDB

  • 本文向大家介绍js序列化和反序列化的使用讲解,包括了js序列化和反序列化的使用讲解的使用技巧和注意事项,需要的朋友参考一下 (1)序列化 即js中的Object转化为字符串 1.使用obj.toJSONString() 2.使用JSON.stringify(obj) (2)反序列化 即js中JSON字符串转化为Object 1.使用eval('('+josnStr+')') 为什么要 eval这里

  • 问题内容: 我正在尝试使用protobuf序列化结构。经过许多小时试图弄清楚我在做什么错,我决定测试google的示例,但效果不佳 我从Google(https://developers.google.com/protocol- buffers/docs/javatutorial )获得以下协议: 我正在尝试将其序列化: byte []序列化= john.toByteArray(); 我得到“ j

  • 在任何人试图告诉我这是一个重复之前,我已经试过了关于这个的解决方案,以及几乎所有其他我能找到的答案。 我的项目在IntelliJ中构建得很好,通过了我设置的所有测试,它甚至在IntelliJ内部运行得也很好,当我试图运行maven构建的JAR时,除了几个例外,我就被打了个耳光。 代码所指向的类: 根据我看到的例外情况,当通过命令提示符运行时,问题出现在第31行,它将是: 命令提示符中的堆栈跟踪如下

  • 问题内容: 我是C ++的新手。使用序列化和反序列化类型数据的最简单方法是什么。我发现了一些使用示例,但它们对我来说是晦涩的。 问题答案: 请注意,将键解释为路径,例如,将对“ ab” =“ z”放置将创建{“ a”:{“ b”:“ z”}} JSON,而不是{“ ab”:“ z”} 。否则,使用是微不足道的。这是一个小例子。

  • ClassCastException:com.google.gson.internal.LinkedTreeMap不能强制转换为java.util.HashMap 提前谢了。

  • 我试图使用混合序列化集合,但Jackson不会保存类型信息。这是一个基本测试,说明会发生什么: 如何在第一个输出上实现输出?

  • 问题内容: 我试图反序列化以DateTime作为修饰符的类: 但是,当我尝试tro反序列化时,却遇到以下异常: 我用它来反序列化: 还有我的jsonData的示例: 问题答案: 期望使用无参数构造函数。的最新版本没有这样的构造函数。 如果您已固定格式,即。应该只是一个时间戳,那么你可以简单地注册与。它将在内部用于字段。您可以摆脱注释。 您需要添加库。