Parameters and Expression Language
When adding a Parameter that makes use of the Expression Language, it is important to understand the context in which the Expression Language will be evaluated. The expression is always evaluated in the context of the Processor or Controller Service that references the Parameter. Take, for example, a scenario where a Parameter with the name Time
is added with a value of ${now()}
. The Expression Language results in a call to determine the system time when it is evaluated. When added as a Parameter, the system time is not evaluated when the Parameter is added, but rather when a Processor or Controller Service evaluates the Expression. That is, if a Processor has a Property whose value is set to #{Time}
it will function in exactly the same manner as if the Property's value were set to ${now()}
. Each time that the property is referenced, it will produce a different timestamp.
Furthermore, some Properties do not allow for Expression Language, while others allow for Expression Language but do not evaluate expressions against FlowFile attributes. To help understand how this works, consider a Parameter named File
whose value is ${filename}
. Then consider three different properties, each with a different Expression Language Scope and a FlowFile whose filename is test.txt
. If each of those Properties is set to #{File}
, then the follow table illustrates the resultant value.
Configured Property Value | Expression Language Scope | Effective Property Value | Notes |
---|---|---|---|
#{File} |
FlowFile Attributes |
test.txt |
The filename is resolved by looking at the |
#{File} |
Variable Registry Only |
Empty String |
FlowFile attributes are not in scope, and we assume there is no Variable in the Variable Registry named "filename" |
#{File} |
None |
${filename} |
The literal text "${filename}" will be unevaluated. |