public class GremlinLangScriptEngine extends AbstractScriptEngine implements GremlinScriptEngine
GremlinScriptEngine implementation that evaluates Gremlin scripts using gremlin-language. As it
uses gremlin-language and thus the ANTLR parser, it is not capable of process arbitrary scripts as the
GremlinGroovyScriptEngine can and is therefore a more secure Gremlin evaluator. It is obviously restricted
to the capabilities of the ANTLR grammar so therefore syntax that includes things like lambdas are not supported.
For bytecode evaluation it simply uses the JavaTranslator.
As an internal note, technically, this is an incomplete implementation of the GremlinScriptEngine in the
traditional sense as a drop-in replacement for something like the GremlinGroovyScriptEngine. As a result,
this GremlinScriptEngine cannot pass the GremlinScriptEngineSuite tests in full. On the other hand,
this limitation is precisely what makes this implementation better from a security perspective. Ultimately, this
implementation represents the first step to changes in what it means to have a GremlinScriptEngine. In some
sense, there is question why a GremlinScriptEngine approach is necessary at all except for easily plugging
into the existing internals of Gremlin Server or more specifically the GremlinExecutor.contextHIDDEN_GARGV, ENGINE, ENGINE_VERSION, FILENAME, LANGUAGE, LANGUAGE_VERSION, NAME| Constructor and Description |
|---|
GremlinLangScriptEngine()
Creates a new instance using no
Customizer. |
GremlinLangScriptEngine(Customizer... customizers) |
| Modifier and Type | Method and Description |
|---|---|
Bindings |
createBindings() |
Traversal.Admin |
eval(Bytecode bytecode,
Bindings bindings,
String traversalSource)
Bytecode is evaluated by the
JavaTranslator. |
Object |
eval(Reader reader,
ScriptContext context) |
Object |
eval(String script,
ScriptContext context)
Gremlin scripts evaluated by the grammar must be bound to "g" and should evaluate to a "g" in the
ScriptContext that is of type TraversalSource |
GremlinScriptEngineFactory |
getFactory() |
protected ScriptContext |
getScriptContext(Bindings nn)
Creates the
ScriptContext using a GremlinScriptContext which avoids a significant amount of
additional object creation on script evaluation. |
eval, eval, eval, eval, get, getBindings, getContext, put, setBindings, setContextclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitevaleval, eval, eval, eval, get, getBindings, getContext, put, setBindings, setContextpublic GremlinLangScriptEngine()
Customizer.public GremlinLangScriptEngine(Customizer... customizers)
public GremlinScriptEngineFactory getFactory()
getFactory in interface ScriptEnginegetFactory in interface GremlinScriptEnginepublic Traversal.Admin eval(Bytecode bytecode, Bindings bindings, String traversalSource) throws ScriptException
JavaTranslator.eval in interface GremlinScriptEngineScriptExceptionpublic Object eval(String script, ScriptContext context) throws ScriptException
ScriptContext that is of type TraversalSourceeval in interface ScriptEngineScriptExceptionpublic Object eval(Reader reader, ScriptContext context) throws ScriptException
eval in interface ScriptEngineScriptExceptionpublic Bindings createBindings()
createBindings in interface ScriptEngineprotected ScriptContext getScriptContext(Bindings nn)
ScriptContext using a GremlinScriptContext which avoids a significant amount of
additional object creation on script evaluation.getScriptContext in class AbstractScriptEngineCopyright © 2013–2022 Apache Software Foundation. All rights reserved.