首页 > 解决方案 > 带有 spring-data-gremlin 的 Janusgraph

问题描述

我正在使用以 Cassandra 作为后端的 JanusGraph 0.5.3。使用spring-data-gremlin版本 2.3.0 以及 spring-boot:2.5.0, tinkerpop:3.4.6,我正在尝试连接到 Janusgraph。可以成功创建顶点并使用 gremlin 控制台,我可以查询和查看顶点。但是使用 spring-data-gremlin 和 tinkerpop,反序列化步骤失败了。在其他帖子和讨论之后,我使用了不同的帖子,包括GraphSONMessageSerializerV3d0。错误信息是

 at [Source: (byte[])"{"requestId":"2c9fc2cc-de02-4f19-b2d3-64d20c96530a","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":["host","/172.19.0.1:35744"]}},"result":{"data":{"@type"
:"g:List","@value":[{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int64","@value":1000},"label":"Product","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"janusgraph:RelationId
entifier","@value":{"relationId":"215s0t-rs-35x"}},"value":"Product-11","label":"name"}}],"_classname":[{"@type":"g:"[truncated 235 bytes]; line: 1, column: 404] (through reference chain: java.util.Linke
dHashMap["result"]->java.util.LinkedHashMap["data"])                                  
        at org.apache.tinkerpop.shaded.jackson.databind.JsonMappingException.from(JsonMappingException.java:271)
        at org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:1718)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTypeDeserializer.deserialize(GraphSONTypeDeserializer.java:194)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTypeDeserializer.deserializeTypedFromAny(GraphSONTypeDeserializer.java:101)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.std.UntypedObjectDeserializer.deserializeWithType(UntypedObjectDeserializer.java:312)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.std.MapDeserializer._readAndBindStringKeyMap(MapDeserializer.java:529)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:364)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:29)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTypeDeserializer.deserialize(GraphSONTypeDeserializer.java:219)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTypeDeserializer.deserializeTypedFromAny(GraphSONTypeDeserializer.java:101)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.std.UntypedObjectDeserializer.deserializeWithType(UntypedObjectDeserializer.java:312)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.std.MapDeserializer._readAndBindStringKeyMap(MapDeserializer.java:529)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:364)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:29)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTypeDeserializer.deserialize(GraphSONTypeDeserializer.java:212)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTypeDeserializer.deserializeTypedFromObject(GraphSONTypeDeserializer.java:86)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.std.MapDeserializer.deserializeWithType(MapDeserializer.java:400)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize(TypeWrappedDeserializer.java:68)
        at org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext.readValue(DeserializationContext.java:760)
        at org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext.readValue(DeserializationContext.java:747)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.AbstractObjectDeserializer.deserialize(AbstractObjectDeserializer.java:48)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTypeDeserializer.deserialize(GraphSONTypeDeserializer.java:212)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTypeDeserializer.deserializeTypedFromAny(GraphSONTypeDeserializer.java:101)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer.deserializeWithType(StdDeserializer.java:136)
        at org.apache.tinkerpop.shaded.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize(TypeWrappedDeserializer.java:68)

和json,它试图序列化它是

[Source: (byte[])"{"requestId":"2c9fc2cc-de02-4f19-b2d3-64d20c96530a","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":["host","/172.19.0.1:35744"]}},"result":{"data":{"@type"
:"g:List","@value":[{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int64","@value":1000},"label":"Product","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"janusgraph:RelationId
entifier","@value":{"relationId":"215s0t-rs-35x"}},"value":"Product-11","label":"name"}}],"_classname":[{"@type":"g:"[truncated 235 bytes]; line: 1, column: 404] (through reference chain: java.util.Linke
dHashMap["result"]->java.util.LinkedHashMap["data"])

使用gremlin控制台,我序列化了顶点,顶点的json是

{
  "id": {
    "@type": "g:Int64",
    "@value": 1000
  },
  "label": "Product",
  "outE": {
    "also_bought": [
      {
        "id": {
          "@type": "janusgraph:RelationIdentifier",
          "@value": {
            "relationId": "215st9-rs-8sut-8hk"
          }
        },
        "inV": {
          "@type": "g:Int64",
          "@value": 11000
        }
      },
      {
        "id": {
          "@type": "janusgraph:RelationIdentifier",
          "@value": {
            "relationId": "215t7h-rs-8sut-99c"
          }
        },
        "inV": {
          "@type": "g:Int64",
          "@value": 12000
        }
      }
    ]
  },
  "properties": {
    "name": [
      {
        "id": {
          "@type": "janusgraph:RelationIdentifier",
          "@value": {
            "relationId": "215s0t-rs-35x"
          }
        },
        "value": "Product-11"
      }
    ],
    "_classname": [
      {
        "id": {
          "@type": "janusgraph:RelationIdentifier",
          "@value": {
            "relationId": "215sf1-rs-3yd"
          }
        },
        "value": "com.divvet.store.productgraph.domain.Product"
      }
    ]
  }
}

这与将顶点嵌套两层的 spring-data-gremlin 序列化不匹配

[Source: (byte[])"{"requestId":"2c9fc2cc-de02-4f19-b2d3-64d20c96530a","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":["host","/172.19.0.1:35744"]}},"result":{"data":{"@type"
:"g:List","@value":[{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int64","@value":1000},"label":"Product","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"janusgraph:RelationId
entifier","@value":{"relationId":"215s0t-rs-35x"}},"value":"Product-11","label":"name"}}],"_classname":[{"@type":"g:"[truncated 235 bytes]; line: 1, column: 404] (through reference chain: java.util.LinkedHashMap["result"]>java.util.LinkedHashMap["data"])

remote-graph.properties 中的属性是

gremlin.remote.remoteConnectionClass=org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection
gremlin.remote.driver.clusterFile=conf/remote-objects.yaml
gremlin.remote.driver.sourceName=g

和 remote-objects.yaml 是

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

对于序列化程序,我尝试了此处列出的所有序列化程序 如果您需要更多详细信息以及如何解决此问题,请告诉我。

标签: tinkerpopjanusgraphtinkerpop3

解决方案


推荐阅读