找不到 class 的类型标识符:class java.lang.Short
Could not find a type identifier for the class : class java.lang.Short
我在使用 GraphSONMapper
序列化 Byte
和 Short
类型时遇到问题
我正在使用由
启动的 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[=15=](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 has never supported short
or byte
serialization. If you need such support you should switch to GraphBinary. On older versions, if you were using the JVM, you might have also considered Gryo,但现在不赞成使用 GraphBinary。
如果您必须使用 GraphSON,则意味着为这些类型编写您自己的自定义序列化程序(通常作为 IoRegistry
实现的一部分),然后将它们配置到服务器和客户端中。您可以通过检查 JanusGraphIoRegistry or perhaps a more simple implementation of the TinkerIoRegistry.
大致了解如何执行此操作
GraphSON 可以序列化短类型和字节类型。我在 discussion tab on GitHub and 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)
我在使用 GraphSONMapper
Byte
和 Short
类型时遇到问题
我正在使用由
启动的 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[=15=](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 has never supported short
or byte
serialization. If you need such support you should switch to GraphBinary. On older versions, if you were using the JVM, you might have also considered Gryo,但现在不赞成使用 GraphBinary。
如果您必须使用 GraphSON,则意味着为这些类型编写您自己的自定义序列化程序(通常作为 IoRegistry
实现的一部分),然后将它们配置到服务器和客户端中。您可以通过检查 JanusGraphIoRegistry or perhaps a more simple implementation of the TinkerIoRegistry.
GraphSON 可以序列化短类型和字节类型。我在 discussion tab on GitHub and 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)