I am trying to play Gremlin Server from Moqui. I added channelizer: org.apache.tinkerpop.gremlin.server.channel.WsAndHttpChannelizer to gremlin-server-modern.yaml, then started the server by gremlin-server.bat conf/gremlin-server-modern.yaml
Now by rest call:
<set field="requestMap" from="[gremlin:'g.V().has(p0,p1).out(p2).toList()', bindings:[p0:'name', p1:'marko', p2:'knows']]"/>
<script><![CDATA[
org.moqui.util.RestClient restClient = ec.service.rest().method(org.moqui.util.RestClient.POST)
.addHeader("Content-Type", "application/json").jsonObject(requestMap)
restClient.uri().protocol("http").host("localhost").port(8182).build()
org.moqui.util.RestClient.RestResponse restResponse = restClient.call()
if (restResponse.statusCode < 200 || restResponse.statusCode >= 300) {
String errMsg = restResponse.text()
ec.logger.error("Rest Call to Gremlin Server Error (${restResponse.statusCode}): ${errMsg}")
ec.message.addMessage("Rest Call to Gremlin Server Error:")
ec.message.addMessage(errMsg)
return
}
responseMap = restResponse.jsonObject()
]]>
</script>
<set field="list" from="responseMap"/>
I can get correct response.
Tinkerpop recommends WebSocket call rather than Rest, according to Groovy part of this: http://tinkerpop.apache.org/docs/current/reference/#connecting-via-drivers
def g = traversal().withRemote(DriverRemoteConnection.using("localhost",8182,"g"))
def list = g.V().has('person','name','marko').out('knows').toList()
I then coded in Moqui actions:
<script>
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource
import org.apache.tinkerpop.gremlin.process.traversal.IO
import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal
import static org.apache.tinkerpop.gremlin.process.traversal.Operator.*
import static org.apache.tinkerpop.gremlin.process.traversal.Order.*
import static org.apache.tinkerpop.gremlin.process.traversal.P.*
import static org.apache.tinkerpop.gremlin.process.traversal.Pop.*
import static org.apache.tinkerpop.gremlin.process.traversal.SackFunctions.*
import static org.apache.tinkerpop.gremlin.process.traversal.Scope.*
import static org.apache.tinkerpop.gremlin.process.traversal.TextP.*
import static org.apache.tinkerpop.gremlin.structure.Column.*
import static org.apache.tinkerpop.gremlin.structure.Direction.*
import static org.apache.tinkerpop.gremlin.structure.T.*
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*
def g = traversal().withRemote(DriverRemoteConnection.using("localhost",8182,"g"))
def responseMap = g.V().has('person','name','marko').out('knows').toList()
</script>
<set field="list" from="responseMap"/>
Just got error: "Cannot invoke method using() on null object\n"
I already have
dependencies {
compile project(':framework')
compile group: 'org.apache.tinkerpop', name: 'gremlin-core', version: '3.4.2'
compile group: 'org.apache.tinkerpop', name: 'gremlin-driver', version: '3.4.2'
}
in build.gradle.
Can anyone advise where is wrong in my code? Thanks.