Hi Mike,

In order to evaluate an ExpressionLanguage with Map containing
variables, I used Query.prepare, to parse a query String into
PreparedQuery.
Following code snippet works without issue. Is that something you want to do?

final Map<String, String> map = Collections.singletonMap("name", "John Smith");
final PreparedQuery query = Query.prepare("${name}-${name:length()}");
final String result = query.evaluateExpressions(map, null);
System.out.println(result);

The code prints:
John Smith-10

Thanks,
Koji

On Sun, Jun 3, 2018 at 9:56 AM, Mike Thomsen <mikerthom...@gmail.com> wrote:
> Point of clarification, the templated URL would itself be part of the
> coordinate Map, not a descriptor on the service so users would have total
> freedom there to send different variations with each record depending on
> their needs per record being enriched.
>
> On Sat, Jun 2, 2018 at 8:55 PM Mike Thomsen <mikerthom...@gmail.com> wrote:
>
>> Ok. That makes sense. The idea was that the RestLookupService would
>> provide a templated URL option so you could specify roughly this as an
>> example:
>>
>> GET "https://something.com:${port}/service/${username}/something/${related
>> }"
>>
>> And have the EL engine take the Map and fill in the blanks.
>>
>> On Sat, Jun 2, 2018 at 6:53 PM Matt Burgess <mattyb...@apache.org> wrote:
>>
>>> Mike,
>>>
>>> IIRC the "top-level" EL evaluator will go through a string finding EL
>>> constructs and pass them into Query I think.  Also ReplaceText (for
>>> some reason) is the only place I know of where you can quote something
>>> and (if EL is present), the result is treated as a string literal.
>>> Otherwise in NiFi Expression Language I believe a quoted construct on
>>> its own is an attribute to be evaluated. You might want the following:
>>>
>>> literal('${name}-${name:length()}')
>>>
>>> or if that doesn't work, it might be because the Query has to be a
>>> full EL construct so maybe you'd have to put the whole thing together
>>> yourself:
>>>
>>> Query.compile("${name}").evaluate(coordinates) + "-" +
>>> Query.compile("${name:length()}")
>>>
>>> I didn't try this out, and it's very possible my assumptions are not
>>> spot-on, so if these don't work let me know and I'll take a closer
>>> look.
>>>
>>> Regards,
>>> Matt
>>>
>>>
>>>
>>>
>>> On Sat, Jun 2, 2018 at 6:30 PM, Mike Thomsen <mikerthom...@gmail.com>
>>> wrote:
>>> > I tried working with the EL package's Query object to try building
>>> > something like this:
>>> >
>>> > def evaluate(String query, Map coordinates) {
>>> >     def compiled = Query.compile(query)
>>> >     compiled.evaluate(coordinates)
>>> > }
>>> >
>>> > Which for [ name: "John Smith" ] and query '${name}-${name:length()}' I
>>> > expected would return a string with both bracketed operations executed.
>>> It
>>> > threw an exception saying unexpected token '-' at column 7.
>>> >
>>> > Am I missing something here?
>>> >
>>> > Thanks,
>>> >
>>> > Mike
>>>
>>

Reply via email to