Search code examples
javatitangremlintinkerpop3

Unable to retrieve query result from gremlin client in JSON format


Case
I am using ResultSet's submit method in Java (provided by org.apache.tinkerpop:gremlin-driver:3.0.1-incubating dependency ) to query gremlin server. I need to know how to configure my client to receive response in JSON format .

What I have done
I have tried using both GraphSONMessageSerializerV1d0 and GraphSONMessageSerializerGremlinV1d0 serializers but the response is not a valid json.This is my gremlin-server.yaml file

authentication: {className: 
org.apache.tinkerpop.gremlin.server.auth.AllowAllAuthenticator,
config: null}
channelizer: 
org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
graphs: {graph: src/test/resources/titan-inmemory.properties}
gremlinPool: 8
host: localhost
maxAccumulationBufferComponents: 1024
maxChunkSize: 8192
maxContentLength: 65536
maxHeaderSize: 8192
maxInitialLineLength: 4096
metrics:
 consoleReporter: null
 csvReporter: null
 gangliaReporter: null
 graphiteReporter: null
 jmxReporter: null
 slf4jReporter: {enabled: true, interval: 180000, loggerName: 
org.apache.tinkerpop.gremlin.server.Settings$Slf4jReporterMetrics}
plugins: [aurelius.titan]
port: 8182
processors: []
resultIterationBatchSize: 64
scriptEngines:
gremlin-groovy:
config: null
imports: [java.lang.Math]
scripts: [src/test/resources/generate-asset-plus-locations.groovy]
staticImports: [java.lang.Math.PI]
scriptEvaluationTimeout: 30000
serializedResponseTimeout: 30000
serializers:
 - className: 
   org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0
   config: {useMapperFromGraph: graph}
 - className: 
  org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0
  config: {serializeResultToString: true}
 - className: 
   org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializer
   GremlinV1d0
   config: {useMapperFromGraph: graph}
 - className: 
  org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0
  config: {useMapperFromGraph: graph}
  ssl: {enabled: false, keyCertChainFile: null, keyFile: null, keyPassword: 
   null, trustCertChainFile: null}
  threadPoolBoss: 1
  threadPoolWorker: 1
  writeBufferHighWaterMark: 65536
  writeBufferLowWaterMark: 32768

So it would be great if some one could help me in configuring the client side to receive the result in JSON format!!


Solution

  • To use GraphSON as the serialization format you just need to specify it to the Cluster builder:

    Cluster cluster = Cluster.build().serializer(Serializers.GRAPHSON_V2D0).create();
    

    But it's worth nothing that this won't return you a string of JSON to work with. It tells the server to use JSON as the serialization format, but the driver deserializes the JSON into objects (Maps, Lists, etc.). If you want an actual JSON string then you should return one in your script that you send to the server. Your only other option is to write your own serializer which would always just preserve the string.