如何解决找不到该类的类型标识符:class java.lang.Short
我在使用 Byte
序列化 Short
和 GraphSONMapper
类型时遇到问题
我使用的是 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
不能序列化 Byte
和 Short
数据类型?是否需要额外配置?
解决方法
我不知道为什么,也许这是一个疏忽,但 GraphSON 从未支持 short
或 byte
序列化。如果您需要此类支持,您应该切换到 GraphBinary。在旧版本上,如果您使用的是 JVM,您可能还考虑过 Gryo,但它现在已被弃用,取而代之的是 GraphBinary。
如果您必须使用 GraphSON,则意味着为这些类型编写您自己的自定义序列化程序(通常作为 IoRegistry
实现的一部分),然后将它们配置到服务器和您的客户端中。您可以通过检查 JanusGraphIoRegistry 或更简单的 TinkerIoRegistry 实现来大致了解如何执行此操作。
GraphSON 可以序列化 short 和 byte 类型。我在 discussion tab on GitHub 和 received 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。