2

I want to connect to my gremlin server where i have given the gremlin-server.yaml and remote.yaml with the same host. My gremlin is on the linux server. While giving the :remote command i get,

gremlin> :remote connect tinkerpop.server conf/remote-objects.yaml
05:20:38 WARN  org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler  - Exception caught during WebSocket processing - closing connection
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 400 Bad Request
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13.verify(WebSocketClientHandshaker13.java:182)
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.finishHandshake(WebSocketClientHandshaker.java:202)
    at org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:73)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:241)
    at io.netty.handler.codec.http.HttpClientCodec$Decoder.channelInactive(HttpClientCodec.java:212)
    at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:132)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:208)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:194)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:828)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$5.run(AbstractChannel.java:576)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
    at java.lang.Thread.run(Thread.java:745)
05:20:38 ERROR org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler  - Could not process the response - correct the problem and restart the driver.
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 400 Bad Request
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13.verify(WebSocketClientHandshaker13.java:182)
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.finishHandshake(WebSocketClientHandshaker.java:202)
    at org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:73)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:241)
    at io.netty.handler.codec.http.HttpClientCodec$Decoder.channelInactive(HttpClientCodec.java:212)
    at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:132)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:208)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:194)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:828)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$5.run(AbstractChannel.java:576)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
    at java.lang.Thread.run(Thread.java:745)
==>Connected - ip-10-253-12-127.eu-west-1.compute.internal/10.253.12.127:8182
gremlin> 05:20:39 WARN  org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler  - Exception caught during WebSocket processing - closing connection
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 400 Bad Request
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13.verify(WebSocketClientHandshaker13.java:182)
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.finishHandshake(WebSocketClientHandshaker.java:202)
    at org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:73)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:241)
    at io.netty.handler.codec.http.HttpClientCodec$Decoder.channelInactive(HttpClientCodec.java:212)
    at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:132)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:208)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:194)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:828)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$5.run(AbstractChannel.java:576)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
    at java.lang.Thread.run(Thread.java:745)
05:20:39 ERROR org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler  - Could not process the response - correct the problem and restart the driver.
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 400 Bad Request
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13.verify(WebSocketClientHandshaker13.java:182)
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.finishHandshake(WebSocketClientHandshaker.java:202)
    at org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:73)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:241)
    at io.netty.handler.codec.http.HttpClientCodec$Decoder.channelInactive(HttpClientCodec.java:212)
    at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:132)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:208)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:194)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:828)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$5.run(AbstractChannel.java:576)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
    at java.lang.Thread.run(Thread.java:745)

This keeps going on... But only the 1st time i get

 ==>Connected - ip-10-253-12-127.eu-west-1.compute.internal/10.253.12.127:8182

I have no clue what to do.. It is connected to gremlin-server where in the webconsole i get,

{"message":"no gremlin script supplied"}

which is the expected message. But the ERROR and WARN keeps running indefinitely. Please help me

Sanjana Senthil
  • 119
  • 2
  • 7
  • What's in your gremlin server yaml file? – stephen mallette Jun 06 '16 at 10:10
  • `host: 10.253.12.127 port: 8182 threadPoolWorker: 1 gremlinPool: 8 scriptEvaluationTimeout: 30000 serializedResponseTimeout: 30000 channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer channelizer: org.apache.tinkerpop.gremlin.server.channel.HttpChannelizer graphs: { graph: conf/titan-cassandra-es.properties}` I couldn't upload my entire file content here. I have made changes only in the 1st half of the file and so i have displayed that. – Sanjana Senthil Jun 06 '16 at 10:21
  • you could have just edited your question to include the full contents, but i think i see what's wrong. i will reply with an answer – stephen mallette Jun 06 '16 at 10:26
  • Please post your `gremlin-server.yaml` and `remote.yaml`. Either edit your original post or paste links to a Gist or Pastebin. Also, are you using the recommended `titan-1.0.0-hadoop1.zip` from [Titan Downloads](https://github.com/thinkaurelius/titan/wiki/Downloads)? – Jason Plurad Jun 07 '16 at 14:14
  • Yes I'm using titan-1.0.0-hadoop1.zip. And i have started the fresh installation. I'll upload them once its done – Sanjana Senthil Jun 08 '16 at 05:08

3 Answers3

4

You can't have two "channelizer" keys in your yaml. I'm somewhat surprised that Gremlin Server actually starts without error (I guess snakeyaml parser doesn't consider that invalid). You can run Gremlin Server with websockets or REST but not both at the same time. To connect with the Gremlin Console and :remote you need to use the WebSocketChannelizer and I suspect that Gremlin Server is happening to select the HttpChannelizer at startup since you have two.

By the way, this message:

==>Connected - ip-10-253-12-127.eu-west-1.compute.internal/10.253.12.127:8182

does not actually mean "connected". It just means the :remote is configured. The actual "connection" doesn't happen until you send your first message. That message has been changed in more recent versions of Gremlin console to be less confusing. Sorry about that.

Note that I've tested this on localhost with the default Titan 1.0.0 distribution. Started titan.sh:

$ bin/titan.sh start
Forking Cassandra...
Running `nodetool statusthrift`.. OK (returned exit status 0 and printed string "running").
Forking Elasticsearch...
Connecting to Elasticsearch (127.0.0.1:9300)... OK (connected to 127.0.0.1:9300).
Forking Gremlin-Server...
Connecting to Gremlin-Server (127.0.0.1:8182)... OK (connected to 127.0.0.1:8182).
Run gremlin.sh to connect.

then started gremlin.sh:

$ bin/gremlin.sh

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
plugin activated: aurelius.titan
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.hadoop
plugin activated: tinkerpop.tinkergraph
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Connected - localhost/127.0.0.1:8182
gremlin> :> 1+1
==>2
gremlin> 
stephen mallette
  • 45,298
  • 5
  • 67
  • 135
  • Thank you!! I got connected.But when i use`:> g`i get this error`WARN org.apache.tinkerpop.gremlin.driver.MessageSerializer-Response [PooledUnsafeDirectByteBuf(ridx:136,widx:136,cap:136)]could not be deserialized by org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0. ERROR org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler - Could not process the response - correct the problem and restart the driver.io.netty.handler.codec.DecoderException:org.apache.tinkerpop.gremlin.driver.ser.SerializationException:java.lang.IndexOutOfBoundsException: Index: 121, Size: 0` – Sanjana Senthil Jun 06 '16 at 10:40
  • And also in the webconsole i get `not a WebSocket handshake request: missing upgrade` – Sanjana Senthil Jun 06 '16 at 10:43
  • I don't know what "webconsole" is but if it's using REST that won't work anymore. sending "g" really shouldn't return an error, but depending on the version you are using it could. I have this sense that you are using 3.0.x on Titan 1.0.x and if so, "g" might not serialize. Try sending something like `g.V().next()` to return a single vertex or if you don't have data in your graph, do "g.addV()` and see what comes back. By the way, sending "g" really isn't all that useful a script for remoting as you can't really "get back" a `TraversalSource` on the client side. – stephen mallette Jun 06 '16 at 10:51
  • webconsole is the `10.253.12.127:8182` here. So, i want the graph g's vertices and edges properties to be displayed there. But i get `not a WebSocket handshake request: missing upgrade`. `g.V()` works.. But `:> g.V()` doesn't work. I get that error – Sanjana Senthil Jun 06 '16 at 11:02
  • I still don't know what the "webconsole" is. Gremlin Server does not have a UI - so what is the "webconsole"? – stephen mallette Jun 06 '16 at 11:09
  • It is the URL `10.253.12.127:8182` i meant. When i give this URL in my chrome after i start my gremlin server, i get this`not a WebSocket handshake request: missing upgrade`. earlier i was getting `{"message":"no gremlin script supplied"}` – Sanjana Senthil Jun 06 '16 at 11:12
  • 1
    The browser won't respond anymore because you are configured for websockets and chrome is not attempting to make a websocket connection. That is expected. In websocket mode you can only connect with a websocket and Gremlin Console uses websockets to connect. – stephen mallette Jun 06 '16 at 11:21
  • But why do i get the `WARN org.apache.tinkerpop.gremlin.driver.MessageSerializer-Response [PooledUnsafeDirectByteBuf(ridx:136,widx:136,cap:136)]could not be deserialized by org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0. ERROR org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler - Could not process the response - correct the problem and restart the driver.io.netty.handler.codec.DecoderException:org.apache.tinkerpop.gremlin.driv‌​er.ser.SerializationException:java.lang.IndexOutOfBoundsException: Index: 121, Size: 0` How do i get, `:> g.V()`successfully executed? – Sanjana Senthil Jun 06 '16 at 11:28
  • Will you please try what I asked earlier and send: `g.V().next()` or `g.addV()` to see if that resolves the problem. It would also help if you clarified what version of things you are using. – stephen mallette Jun 06 '16 at 11:33
  • Sure!! And i tried. I got these as my result `gremlin>` **g.V().next()** `==>v[1] gremlin>` **:> g.V().next()** `org.apache.tinkerpop.gremlin.groovy.plugin.RemoteException Display stack trace? [yN] y org.apache.tinkerpop.gremlin.groovy.plugin.RemoteException at org.apache.tinkerpop.gremlin.console.groovy.plugin.DriverRemoteAcceptor.submit(DriverRemoteAcceptor.java:122) at org.apache.tinkerpop.gremlin.console.commands.SubmitCommand.execute(SubmitCommand.groovy:41) at org.codehaus.groovy.tools.shell.Shell.execute(Shell.groovy:101)` – Sanjana Senthil Jun 06 '16 at 11:37
  • how about ":> 1+1"? and, again, what version of Titan are you using? – stephen mallette Jun 06 '16 at 11:46
  • `gremlin> :> 1+1 13:00:12 WARN org.apache.tinkerpop.gremlin.driver.MessageSerializer - Response [PooledUnsafeDirectByteBuf(ridx: 136, widx: 136, cap: 136)] could not be deserialized by org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0. ERROR org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler - Could not process the response - correct the problem and restart the driver. io.netty.handler.codec.DecoderException: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: java.lang.IndexOutOfBoundsException: Index: 121, Size: 0` and i'm using Titan 1.0.0 – Sanjana Senthil Jun 06 '16 at 13:03
  • the only way something like that can happen with "1+1" is if there is some mixed version of Gremlin Console and Gremlin Server. For example, if you're using 3.2.x of console with 3.0.0 of server you might see that. If you are using the version of the console that is packaged with the titan distribution everything should work together. I don't know how else you can get that error. – stephen mallette Jun 06 '16 at 14:24
  • I'm using the version which is packaged with titan:( – Sanjana Senthil Jun 07 '16 at 04:26
  • I think you need to simplify your setup and get a simple 1+1 working. Go back to the original distribution and configuration and test localhost with 1+1 to success, then change the host and go from there. I would also consider using: conf/remote,yaml instead of conf/remote-objects.yaml to start. – stephen mallette Jun 07 '16 at 10:25
  • We have already tried it. And also i have changed all the gremlin jars in lib to 3.0.2 as per[https://groups.google.com/forum/#!topic/aureliusgraphs/ewkqQzZxVU0] And also added buffersize to 8192..But no luck, still the same issue. – Sanjana Senthil Jun 07 '16 at 10:33
  • No!!:( Is there anything to be changed? I have changed all my config files to localhost and tried.. – Sanjana Senthil Jun 07 '16 at 10:50
  • updated my answer to include demonstration of the titan 1.0.0 distribution working on localhost. i again suggest you figure out how to get that much working with a fresh install. – stephen mallette Jun 07 '16 at 11:51
  • I have done the fresh installation. I'm able to get **:> 1+1** successfully. But when i give `:> g` i get `Server could not serialize the result requested. Server error - Error during serialization: Class is not registered: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource Note: To register this class use: kryo.register(org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource.class);. Note that the class must be serializable by the client and server for proper operation.` – Sanjana Senthil Jun 08 '16 at 05:13
  • "g" is not really a valid script. that's saying, evaluate "g" and send the TraversalSource back to the client. What would you do with "g" on the client? execute an actual request like: `g.addV()` or `g.V().next()` While "g" really isn't something you would normally send, in TinkerPop 3.1.x, i think "g" will at least return a `toString()` representation of that object. – stephen mallette Jun 08 '16 at 11:12
  • It worked!!! After i did the fresh installation. And i had to add `gremlin.graph=com.thinkaurelius.titan.core.TitanFactory` in titan-cassandra-es.properties... Thank you:) – Sanjana Senthil Jun 08 '16 at 15:46
  • FYI this is probably because `graph` wasn't configured as the mapper graph for the Gryo serializer in the configuration. – Pomme.Verte Jun 09 '16 at 16:21
1

If you are using Signature Version 4 authentication, you should not follow the steps described on the https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-console.html. Instead, you should follow this other link https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-connecting-gremlin-console.html. Basically, you have to build the last version of the netty-all jar and replace the version that comes with the gremlin client.

Some advice that may save you a few hours:

You must compile the project using maven and java 8;

@see How to set specific java version to Maven

alias mvn_java8="JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin/java && mvn"

Errors during the compiling

If you, like me, have some problems building the project, try to update the Lombok version. In my case this was the best version:

@see Caused by: java.lang.ClassNotFoundException: com.sun.tools.javac.code.TypeTags when using lombok

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.22</version>
            <scope>provided</scope>
        </dependency>

Keep a special look to the environment settings. SERVICE_REGION, for instance is not the same of AWS_REGION or AWS_DEFAULT_REGION. You must set them all.

export AWS_DEFAULT_REGION=...
export AWS_REGION=...
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...
export AWS_SECURITY_TOKEN=...
export SERVICE_REGION=...

Check your Neptune Remote

The Amazon tutorial assume that many things are in the default settings in your Neptune. This may not be not the case. Look into your Neptune settings and check.

Thiago Mata
  • 2,825
  • 33
  • 32
0

In regards to the AWS example : https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-connecting-gremlin-console.html

I fought with this for a week and could never make a connection to our Neptune server, I thought I screwed up the Java part (I'm not a Java expert, so I spent an inordinate amount of time recompiling, checking dependencies etc.).

However, the analogous example in Python (bypassing Gremlin but using Signature v4 Signing as well) worked right out of the box, no problems :

https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-connecting-python.html

So on a hunch I fired up Wireshark, and sure enough I found the Python method actually makes an TLS connection to exchange keys :

wireshark-screenshot

... but the Java example did not. So I did some poking around and found a remote.yaml attribute named enableSsl, adding this to the yaml file did the trick (see step 10 in AWS example):

hosts: [your-neptune-endpoint]
port: 8182
connectionPool: {
  enableSsl: true,
  channelizer: org.apache.tinkerpop.gremlin.driver.SigV4WebSocketChannelizer}
serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }}

Success :)

El Jeffe
  • 21
  • 3