【问题标题】:Could not find a type identifier for the class : class java.lang.Short找不到类的类型标识符:class java.lang.Short
【发布时间】:2021-04-22 13:47:12
【问题描述】:

我在使用GraphSONMapperByteShort 类型进行序列化时遇到问题

我正在使用由 JanusGraph 启动的默认配置

docker run -it -p 8182:8182 janusgraph/janusgraph

和示例数据库The Graph of the Gods


这是Short 的示例:

query = g.V().hasLabel('vertex_data_types').limit(1000).valueMap(true).toList();

mapper = GraphSONMapper.build().version(GraphSONVersion.V3_0).addRegistry(JanusGraphIoRegistry.instance()).create().createMapper();

mapper.writeValueAsString(query)

完整回复:

gremlin> query = g.V().hasLabel('vertex_data_types').limit(1000).valueMap(true).toList();
==>{id=12520, label=vertex_data_types, test_short=[2], test_int=[5]}
gremlin> mapper = GraphSONMapper.build().version(GraphSONVersion.V3_0).addRegistry(JanusGraphIoRegistry.instance()).create().createMapper();
==>org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper@789b15a4
gremlin> mapper.writeValueAsString(query)
Could not find a type identifier for the class : class java.lang.Short. Make sure the value to serialize has a type identifier registered for its class.
Type ':help' or ':h' for help.
Display stack trace? [yN]Y
java.lang.IllegalArgumentException: Could not find a type identifier for the class : class java.lang.Short. Make sure the value to serialize has a type identifier registered for its class.
        at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTypeIdResolver.idFromValueAndType(GraphSONTypeIdResolver.java:82)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTypeSerializerV3d0.writeTypePrefix(GraphSONTypeSerializerV3d0.java:83)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdScalarSerializer.serializeWithType(StdScalarSerializer.java:44)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.impl.TypeWrappedSerializer.serialize(TypeWrappedSerializer.java:32)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
        at org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2656)
        at org.apache.tinkerpop.shaded.jackson.core.base.GeneratorBase.writeObject(GeneratorBase.java:381)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.JavaUtilSerializersV3d0$ListJacksonSerializer.serialize(JavaUtilSerializersV3d0.java:127)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.JavaUtilSerializersV3d0$ListJacksonSerializer.serializeWithType(JavaUtilSerializersV3d0.java:135)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.JavaUtilSerializersV3d0$ListJacksonSerializer.serializeWithType(JavaUtilSerializersV3d0.java:118)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.impl.TypeWrappedSerializer.serialize(TypeWrappedSerializer.java:32)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
        at org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2656)
        at org.apache.tinkerpop.shaded.jackson.core.base.GeneratorBase.writeObject(GeneratorBase.java:381)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.JavaUtilSerializersV3d0$MapJacksonSerializer.serialize(JavaUtilSerializersV3d0.java:59)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.JavaUtilSerializersV3d0$MapJacksonSerializer.serializeWithType(JavaUtilSerializersV3d0.java:67)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.JavaUtilSerializersV3d0$MapJacksonSerializer.serializeWithType(JavaUtilSerializersV3d0.java:49)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.impl.TypeWrappedSerializer.serialize(TypeWrappedSerializer.java:32)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
        at org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:2656)
        at org.apache.tinkerpop.shaded.jackson.core.base.GeneratorBase.writeObject(GeneratorBase.java:381)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.JavaUtilSerializersV3d0$ListJacksonSerializer.serialize(JavaUtilSerializersV3d0.java:127)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.JavaUtilSerializersV3d0$ListJacksonSerializer.serializeWithType(JavaUtilSerializersV3d0.java:135)
        at org.apache.tinkerpop.gremlin.structure.io.graphson.JavaUtilSerializersV3d0$ListJacksonSerializer.serializeWithType(JavaUtilSerializersV3d0.java:118)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.impl.TypeWrappedSerializer.serialize(TypeWrappedSerializer.java:32)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
        at org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3906)
        at org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3220)
        at org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper$writeValueAsString.call(Unknown Source)
        at Script64.run(Script64.groovy:1)
        at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:674)
        at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:376)
        at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
        at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$0(GremlinExecutor.java:267)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
gremlin> 
gremlin> g.getGraph().openManagement().printPropertyKeys()
==>------------------------------------------------------------------------------------------------
Property Key Name              | Cardinality | Data Type                                          |
---------------------------------------------------------------------------------------------------
test_short                     | SINGLE      | class java.lang.Short                              |
test_int                       | SINGLE      | class java.lang.Integer                            |
name                           | SINGLE      | class java.lang.String                             |
age                            | SINGLE      | class java.lang.Integer                            |
time                           | SINGLE      | class java.lang.Integer                            |
reason                         | SINGLE      | class java.lang.String                             |
place                          | SINGLE      | class org.janusgraph.core.attribute.Geoshape       |
---------------------------------------------------------------------------------------------------

为什么GraphSONMapper 不能序列化ByteShort 数据类型?是否需要其他配置?

【问题讨论】:

    标签: gremlin janusgraph gremlin-server


    【解决方案1】:

    我不知道为什么,也许这是一个疏忽,但GraphSON 从来没有支持shortbyte 序列化。如果你需要这样的支持,你应该切换到GraphBinary。在旧版本上,如果您使用的是 JVM,您可能还考虑过 Gryo,但现在它已被弃用,取而代之的是 GraphBinary。

    如果您必须使用 GraphSON,则意味着为这些类型编写您自己的自定义序列化程序(通常作为 IoRegistry 实现的一部分),然后将它们配置到服务器和客户端中。您可以通过检查JanusGraphIoRegistry 或者更简单的TinkerIoRegistry 实现来大致了解如何执行此操作。

    【讨论】:

      【解决方案2】:

      GraphSON 可以序列化短类型和字节类型。我在discussion tab on GitHubreceived this link 中问过这个问题

      这是我的代码现在的样子:

      GraphSONMapper.
                  build().
                  typeInfo(org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo.PARTIAL_TYPES).
                  addCustomModule(org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONXModuleV2d0.build().create(false)).
                  version(GraphSONVersion.V3_0).
                  addRegistry(JanusGraphIoRegistry.instance()).
                  create().
                  createMapper().
                  writeValueAsString(query)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-28
        • 1970-01-01
        • 2011-04-23
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        相关资源
        最近更新 更多