JanusGraph / janusgraph

JanusGraph: an open-source, distributed graph database
https://janusgraph.org
Other
5.23k stars 1.16k forks source link

Error when serializing Geoshape circle #2482

Closed benjamincoven closed 3 years ago

benjamincoven commented 3 years ago

I am trying to know how Janusgraph serialize circle in graphson and when trying to do this in Gremlin console I am getting the following error:

gremlin> mapper = GraphSONMapper.build().version(GraphSONVersion.V3_0).create().createMapper()
==>org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper@485ddade
gremlin> mapper.writeValueAsString(Geoshape.circle(37.97, 23.72, 50))
Direct self-reference leading to cycle (through reference chain: org.janusgraph.core.attribute.Geoshape["shape"]->org.locationtech.spatial4j.shape.impl.GeoCircle["center"]->org.locationtech.spatial4j.shape.impl.PointImpl["center"])

Please include configurations and logs if available.

For confirmed bugs, please report:

Stack Trace (if you have one)

org.apache.tinkerpop.shaded.jackson.databind.exc.InvalidDefinitionException: Direct self-reference leading to cycle (through reference chain: org.janusgraph.core.attribute.Geoshape["shape"]->org.locationtech.spatial4j.shape.impl.GeoCircle["center"]->org.locationtech.spatial4j.shape.impl.PointImpl["center"])
        at org.apache.tinkerpop.shaded.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
        at org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.BeanPropertyWriter._handleSelfReference(BeanPropertyWriter.java:944)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:721)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.std.BeanSerializerBase.serializeWithType(BeanSerializerBase.java:604)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:729)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.std.BeanSerializerBase.serializeWithType(BeanSerializerBase.java:604)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:729)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719)
        at org.apache.tinkerpop.shaded.jackson.databind.ser.std.BeanSerializerBase.serializeWithType(BeanSerializerBase.java:604)
        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 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:115)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:127)
        at Script18.run(Script18.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)
benjamincoven commented 3 years ago

I forget to add the Janusgraph mapper:

gremlin> mapper = GraphSONMapper.build().version(GraphSONVersion.V3_0).addRegistry(JanusGraphIoRegistry.instance()).crea
te().createMapper()
==>org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper@5d1e0fbb
gremlin> mapper.writeValueAsString(Geoshape.circle(37.97, 23.72, 50))
==>{"@type":"janusgraph:Geoshape","@value":{"geometry":{"@type":"g:Map","@value":["type","Circle","coordinates",{"@type":"g:List","@value":[{"@type":"g:Double","@value":23.72},{"@type":"g:Double","@value":37.97}]},"radius",{"@type":"g:Int32","@value":50},"properties",{"@type":"g:Map","@value":["radius_units","km"]}]}}}