Class JexlEngine
- Introspection, see
JexlUberspect
- Arithmetic and comparison, see
JexlArithmetic
- Error reporting
- Logging
Note that methods that evaluate expressions may throw unchecked exceptions;
The JexlException
are thrown in "non-silent" mode but since these are
RuntimeException, user-code should catch them wherever most appropriate.
- Since:
- 2.0
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic final class
The empty context class, public for instrospection.static final class
The empty/static/non-mutable JexlNamespace class, public for instrospection.static interface
Deprecated.3.2 -
Field Summary
Modifier and TypeFieldDescriptionprotected static final ThreadLocal<JexlContext.ThreadLocal>
The thread local context.static final JexlFeatures
Default features.static final JexlContext
An empty/static/non-mutable JexlContext singleton used instead of null context.static final JexlContext.NamespaceResolver
An empty/static/non-mutable JexlNamespace singleton used instead of null namespace.protected static final ThreadLocal<JexlEngine>
The thread local engine.static final Object
A marker singleton for invocation failures in tryInvoke. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract void
Clears the expression cache.final JexlExpression
createExpression
(String expression) Creates a JexlExpression from a String containing valid JEXL syntax.abstract JexlExpression
createExpression
(JexlInfo info, String expression) Creates an JexlExpression from a String containing valid JEXL syntax.Create an information structure for dynamic set/get/invoke/new.createInfo
(String fn, int l, int c) Creates a JexlInfo instance.Creates a newJxltEngine
instance using this engine.createJxltEngine
(boolean noScript) Creates a newJxltEngine
instance using this engine.abstract JxltEngine
createJxltEngine
(boolean noScript, int cacheSize, char immediate, char deferred) Creates a new instance ofJxltEngine
using this engine.final JexlScript
createScript
(File scriptFile) Creates a Script from aFile
containing valid JEXL syntax.final JexlScript
createScript
(File scriptFile, String... names) Creates a Script from aFile
containing valid JEXL syntax.final JexlScript
createScript
(String scriptText) Creates a Script from a String containing valid JEXL syntax.final JexlScript
createScript
(String source, String... names) Creates a Script from a String containing valid JEXL syntax.final JexlScript
createScript
(URL scriptUrl) Creates a Script from aURL
containing valid JEXL syntax.final JexlScript
createScript
(URL scriptUrl, String... names) Creates a Script from aURL
containing valid JEXL syntax.abstract JexlScript
createScript
(JexlFeatures features, JexlInfo info, String source, String... names) Creates a JexlScript from a String containing valid JEXL syntax.final JexlScript
createScript
(JexlInfo info, File scriptFile, String... names) Creates a Script from aFile
containing valid JEXL syntax.final JexlScript
createScript
(JexlInfo info, String source, String... names) Creates a JexlScript from a String containing valid JEXL syntax.final JexlScript
createScript
(JexlInfo info, URL scriptUrl, String... names) Creates a Script from aURL
containing valid JEXL syntax.abstract JexlArithmetic
Gets this engine underlyingJexlArithmetic
.abstract Charset
Gets the charset used for parsing.abstract Object
getProperty
(Object bean, String expr) Accesses properties of a bean using an expression.abstract Object
getProperty
(JexlContext context, Object bean, String expr) Accesses properties of a bean using an expression.static JexlContext.ThreadLocal
Accesses the current thread local context.static JexlEngine
Accesses the current thread local engine.abstract JexlUberspect
Gets this engine underlyingJexlUberspect
.abstract Object
invokeMethod
(Object obj, String meth, Object... args) Invokes an object's method by name and arguments.abstract boolean
Checks whether this engine will throw JexlException.Cancel (true) or return null (false) when interrupted during an execution.abstract boolean
isDebug()
Checks whether this engine is in debug mode.abstract boolean
isSilent()
Checks whether this engine throws JexlException during evaluation.abstract boolean
isStrict()
Checks whether this engine considers unknown variables, methods, functions and constructors as errors.abstract <T> T
newInstance
(Class<? extends T> clazz, Object... args) Creates a new instance of an object using the most appropriate constructor based on the arguments.abstract Object
newInstance
(String clazz, Object... args) Creates a new instance of an object using the most appropriate constructor based on the arguments.protected String
readSource
(File file) Reads a JEXL source from a File.protected String
readSource
(URL url) Reads a JEXL source from an URL.abstract void
setClassLoader
(ClassLoader loader) Sets the class loader used to discover classes in 'new' expressions.abstract void
setProperty
(Object bean, String expr, Object value) Assign properties of a bean using an expression.abstract void
setProperty
(JexlContext context, Object bean, String expr, Object value) Assign properties of a bean using an expression.static void
Sets the current thread local context.protected static String
toString
(BufferedReader reader) Creates a string from a reader.
-
Field Details
-
TRY_FAILED
A marker singleton for invocation failures in tryInvoke. -
CONTEXT
The thread local context. -
ENGINE
The thread local engine. -
DEFAULT_FEATURES
Default features. -
EMPTY_CONTEXT
An empty/static/non-mutable JexlContext singleton used instead of null context. -
EMPTY_NS
An empty/static/non-mutable JexlNamespace singleton used instead of null namespace.
-
-
Constructor Details
-
JexlEngine
public JexlEngine()
-
-
Method Details
-
getThreadContext
Accesses the current thread local context.- Returns:
- the context or null
-
getThreadEngine
Accesses the current thread local engine.Advanced: you should only use this to retrieve the engine within a method/ctor called through the evaluation of a script/expression.
- Returns:
- the engine or null
-
setThreadContext
Sets the current thread local context.This should only be used carefully, for instance when re-evaluating a "stored" script that requires a given Namespace resolver. Remember to synchronize access if context is shared between threads.
- Parameters:
tls
- the thread local context to set
-
toString
Creates a string from a reader.- Parameters:
reader
- to be read.- Returns:
- the contents of the reader as a String.
- Throws:
IOException
- on any error reading the reader.
-
clearCache
Clears the expression cache. -
createExpression
Creates an JexlExpression from a String containing valid JEXL syntax. This method parses the expression which must contain either a reference or an expression.- Parameters:
info
- An info structure to carry debugging information if neededexpression
- A String containing valid JEXL syntax- Returns:
- An
JexlExpression
which can be evaluated using aJexlContext
- Throws:
JexlException
- if there is a problem parsing the script
-
createExpression
Creates a JexlExpression from a String containing valid JEXL syntax. This method parses the expression which must contain either a reference or an expression.- Parameters:
expression
- A String containing valid JEXL syntax- Returns:
- An
JexlExpression
which can be evaluated using aJexlContext
- Throws:
JexlException
- if there is a problem parsing the script
-
createInfo
Create an information structure for dynamic set/get/invoke/new.This gathers the class, method and line number of the first calling method outside of o.a.c.jexl3.
- Returns:
- a JexlInfo instance
-
createInfo
Creates a JexlInfo instance.- Parameters:
fn
- url/file/template/script user given namel
- line numberc
- column number- Returns:
- a JexlInfo instance
-
createJxltEngine
Creates a newJxltEngine
instance using this engine.- Returns:
- a JEXL Template engine
-
createJxltEngine
Creates a newJxltEngine
instance using this engine.- Parameters:
noScript
- whether the JxltEngine only allows Jexl expressions or scripts- Returns:
- a JEXL Template engine
-
createJxltEngine
public abstract JxltEngine createJxltEngine(boolean noScript, int cacheSize, char immediate, char deferred) Creates a new instance ofJxltEngine
using this engine.- Parameters:
noScript
- whether the JxltEngine only allows JEXL expressions or scriptscacheSize
- the number of expressions in this cache, default is 256immediate
- the immediate template expression character, default is '$'deferred
- the deferred template expression character, default is '#'- Returns:
- a JEXL Template engine
-
createScript
Creates a Script from aFile
containing valid JEXL syntax. This method parses the script and validates the syntax.- Parameters:
scriptFile
- AFile
containing valid JEXL syntax. Must not be null. Must be a readable file.- Returns:
- A
JexlScript
which can be executed with aJexlContext
. - Throws:
JexlException
- if there is a problem reading or parsing the script.
-
createScript
Creates a Script from aFile
containing valid JEXL syntax. This method parses the script and validates the syntax.- Parameters:
scriptFile
- AFile
containing valid JEXL syntax. Must not be null. Must be a readable file.names
- The script parameter names used during parsing; a corresponding array of arguments containing values should be used during evaluation.- Returns:
- A
JexlScript
which can be executed with aJexlContext
. - Throws:
JexlException
- if there is a problem reading or parsing the script.
-
createScript
public abstract JexlScript createScript(JexlFeatures features, JexlInfo info, String source, String... names) Creates a JexlScript from a String containing valid JEXL syntax. This method parses the script and validates the syntax.- Parameters:
features
- A set of features that will be enforced during parsinginfo
- An info structure to carry debugging information if neededsource
- A string containing valid JEXL syntaxnames
- The script parameter names used during parsing; a corresponding array of arguments containing values should be used during evaluation- Returns:
- A
JexlScript
which can be executed using aJexlContext
- Throws:
JexlException
- if there is a problem parsing the script
-
createScript
Creates a Script from aFile
containing valid JEXL syntax. This method parses the script and validates the syntax.- Parameters:
info
- An info structure to carry debugging information if neededscriptFile
- AFile
containing valid JEXL syntax. Must not be null. Must be a readable file.names
- The script parameter names used during parsing; a corresponding array of arguments containing values should be used during evaluation.- Returns:
- A
JexlScript
which can be executed with aJexlContext
. - Throws:
JexlException
- if there is a problem reading or parsing the script.
-
createScript
Creates a JexlScript from a String containing valid JEXL syntax. This method parses the script and validates the syntax.- Parameters:
info
- An info structure to carry debugging information if neededsource
- A string containing valid JEXL syntaxnames
- The script parameter names used during parsing; a corresponding array of arguments containing values should be used during evaluation- Returns:
- A
JexlScript
which can be executed using aJexlContext
- Throws:
JexlException
- if there is a problem parsing the script
-
createScript
Creates a Script from aURL
containing valid JEXL syntax. This method parses the script and validates the syntax.- Parameters:
info
- An info structure to carry debugging information if neededscriptUrl
- AURL
containing valid JEXL syntax. Must not be null.names
- The script parameter names used during parsing; a corresponding array of arguments containing values should be used during evaluation.- Returns:
- A
JexlScript
which can be executed with aJexlContext
. - Throws:
JexlException
- if there is a problem reading or parsing the script.
-
createScript
Creates a Script from a String containing valid JEXL syntax. This method parses the script and validates the syntax.- Parameters:
scriptText
- A String containing valid JEXL syntax- Returns:
- A
JexlScript
which can be executed using aJexlContext
- Throws:
JexlException
- if there is a problem parsing the script.
-
createScript
Creates a Script from a String containing valid JEXL syntax. This method parses the script and validates the syntax.- Parameters:
source
- A String containing valid JEXL syntaxnames
- The script parameter names used during parsing; a corresponding array of arguments containing values should be used during evaluation- Returns:
- A
JexlScript
which can be executed using aJexlContext
- Throws:
JexlException
- if there is a problem parsing the script
-
createScript
Creates a Script from aURL
containing valid JEXL syntax. This method parses the script and validates the syntax.- Parameters:
scriptUrl
- AURL
containing valid JEXL syntax. Must not be null.- Returns:
- A
JexlScript
which can be executed with aJexlContext
. - Throws:
JexlException
- if there is a problem reading or parsing the script.
-
createScript
Creates a Script from aURL
containing valid JEXL syntax. This method parses the script and validates the syntax.- Parameters:
scriptUrl
- AURL
containing valid JEXL syntax. Must not be null.names
- The script parameter names used during parsing; a corresponding array of arguments containing values should be used during evaluation.- Returns:
- A
JexlScript
which can be executed with aJexlContext
. - Throws:
JexlException
- if there is a problem reading or parsing the script.
-
getArithmetic
Gets this engine underlyingJexlArithmetic
.- Returns:
- the arithmetic
-
getCharset
Gets the charset used for parsing.- Returns:
- the charset
-
getProperty
Accesses properties of a bean using an expression.If the JEXL engine is silent, errors will be logged through its logger as warning.
- Parameters:
context
- the evaluation contextbean
- the bean to get properties fromexpr
- the property expression- Returns:
- the value of the property
- Throws:
JexlException
- if there is an error parsing the expression or during evaluation
-
getProperty
Accesses properties of a bean using an expression.jexl.get(myobject, "foo.bar"); should equate to myobject.getFoo().getBar(); (or myobject.getFoo().get("bar"))
If the JEXL engine is silent, errors will be logged through its logger as warning.
- Parameters:
bean
- the bean to get properties fromexpr
- the property expression- Returns:
- the value of the property
- Throws:
JexlException
- if there is an error parsing the expression or during evaluation
-
getUberspect
Gets this engine underlyingJexlUberspect
.- Returns:
- the uberspect
-
invokeMethod
Invokes an object's method by name and arguments.- Parameters:
obj
- the method's invoker objectmeth
- the method's nameargs
- the method's arguments- Returns:
- the method returned value or null if it failed and engine is silent
- Throws:
JexlException
- if method could not be found or failed and engine is not silent
-
isCancellable
Checks whether this engine will throw JexlException.Cancel (true) or return null (false) when interrupted during an execution.- Returns:
- true if cancellable, false otherwise
-
isDebug
Checks whether this engine is in debug mode.- Returns:
- true if debug is on, false otherwise
-
isSilent
Checks whether this engine throws JexlException during evaluation.- Returns:
- true if silent, false (default) otherwise
-
isStrict
Checks whether this engine considers unknown variables, methods, functions and constructors as errors.- Returns:
- true if strict, false otherwise
-
newInstance
Creates a new instance of an object using the most appropriate constructor based on the arguments.- Type Parameters:
T
- the type of object- Parameters:
clazz
- the class to instantiateargs
- the constructor arguments- Returns:
- the created object instance or null on failure when silent
-
newInstance
Creates a new instance of an object using the most appropriate constructor based on the arguments.- Parameters:
clazz
- the name of the class to instantiate resolved through this engine's class loaderargs
- the constructor arguments- Returns:
- the created object instance or null on failure when silent
-
readSource
Reads a JEXL source from a File.- Parameters:
file
- the script file- Returns:
- the source
-
readSource
Reads a JEXL source from an URL.- Parameters:
url
- the script url- Returns:
- the source
-
setClassLoader
Sets the class loader used to discover classes in 'new' expressions.This method is not thread safe; it may be called after JexlEngine initialization and allow scripts to use new classes definitions.
- Parameters:
loader
- the class loader to use
-
setProperty
Assign properties of a bean using an expression.If the JEXL engine is silent, errors will be logged through its logger as warning.
- Parameters:
context
- the evaluation contextbean
- the bean to set properties inexpr
- the property expressionvalue
- the value of the property- Throws:
JexlException
- if there is an error parsing the expression or during evaluation
-
setProperty
Assign properties of a bean using an expression.jexl.set(myobject, "foo.bar", 10); should equate to myobject.getFoo().setBar(10); (or myobject.getFoo().put("bar", 10) )
If the JEXL engine is silent, errors will be logged through its logger as warning.
- Parameters:
bean
- the bean to set properties inexpr
- the property expressionvalue
- the value of the property- Throws:
JexlException
- if there is an error parsing the expression or during evaluation
-