Подключение JanusGraph с использованием Gremlin и Java дает исключение сериализации (Обнаружен незарегистрированный идентификатор класса: 65536) - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь подключиться к Janus Graph, используя следующую Java программу. Я пытаюсь получить запись из существующего Графика.

Я использую Janusgraph (0.4.0) с Cassandra (3.11.5).

Graph graph = EmptyGraph.instance();
GraphTraversalSource g = graph.traversal().withRemote(DriverRemoteConnection.using("localhost", 8182, "g"));
GryoMessageSerializerV3d0 serializer = new org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0();
Object id = g.V().has("name", "Cisco").outE().hasLabel("Configuration").inV().has("name", "Day0").outE().next();

Я получаю следующее исключение, когда я запустите программу

    Caused by: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: org.apache.tinkerpop.shaded.kryo.KryoException: Encountered unregistered class ID: 65536
Serialization trace:
id (org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge)
        at org.apache.tinkerpop.gremlin.driver.ser.AbstractGryoMessageSerializerV3d0.deserializeResponse(AbstractGryoMessageSerializerV3d0.java:161)
        at org.apache.tinkerpop.gremlin.driver.handler.WebSocketGremlinResponseDecoder.decode(WebSocketGremlinResponseDecoder.java:50)
        at org.apache.tinkerpop.gremlin.driver.handler.WebSocketGremlinResponseDecoder.decode(WebSocketGremlinResponseDecoder.java:37)
        at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)
        ... 24 more
Caused by: org.apache.tinkerpop.shaded.kryo.KryoException: Encountered unregistered class ID: 65536
Serialization trace:
id (org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge)
        at org.apache.tinkerpop.gremlin.structure.io.gryo.AbstractGryoClassResolver.readClass(AbstractGryoClassResolver.java:148)
        at org.apache.tinkerpop.shaded.kryo.Kryo.readClass(Kryo.java:670)
        at org.apache.tinkerpop.shaded.kryo.serializers.ObjectField.read(ObjectField.java:118)
        at org.apache.tinkerpop.shaded.kryo.serializers.FieldSerializer.read(FieldSerializer.java:551)
        at org.apache.tinkerpop.shaded.kryo.Kryo.readClassAndObject(Kryo.java:790)
        at org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.shaded.ShadedKryoAdapter.readClassAndObject(ShadedKryoAdapter.java:39)
        at org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.shaded.ShadedKryoAdapter.readClassAndObject(ShadedKryoAdapter.java:24)
        at org.apache.tinkerpop.gremlin.structure.io.gryo.GryoSerializersV3d0$DefaultRemoteTraverserSerializer.read(GryoSerializersV3d0.java:417)

Вот моя конфигурация gremlin-server.yaml

**serializers:
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [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.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}

Вот моя конфигурация remote-objects.yaml

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

Я попытался найти решение, и большинство порталов указывали на несоответствие между удаленной и клиентской конфигурацией сериализации.

В моем случае оба совпадают, и я не вижу никаких расхождений.

1 Ответ

1 голос
/ 13 марта 2020

Ну, ваш remote-objects.yaml выглядит правильно, но ваш код не показывает, что вы используете этот файл. Вместо этого вы инициализируете свой g как:

GraphTraversalSource g = graph.traversal().
                               withRemote(DriverRemoteConnection.using("localhost", 8182, "g"));

Если вы собираетесь использовать файл yaml для подключения, он должен быть:

GraphTraversalSource g = graph.traversal().
                               withRemote(DriverRemoteConnection.using("remote-objects.yaml"));
...