You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Henri Biestro (Jira)" <ji...@apache.org> on 2021/06/07 13:15:06 UTC

[jira] [Closed] (JEXL-327) map[null] does not work in assignment context

     [ https://issues.apache.org/jira/browse/JEXL-327?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Henri Biestro closed JEXL-327.
------------------------------

> map[null] does not work in assignment context
> ---------------------------------------------
>
>                 Key: JEXL-327
>                 URL: https://issues.apache.org/jira/browse/JEXL-327
>             Project: Commons JEXL
>          Issue Type: Bug
>    Affects Versions: 3.1
>            Reporter: David Costanzo
>            Priority: Trivial
>             Fix For: 3.2
>
>
> In JEXL, you can create a map with a null key by using a map literal and you can get the value associated with a null key.  However,  you can't assign a value to a null key, as in 
> {code:java}
> map[null] = 'bar'{code}
> This asymmetry is weird and might be an oversight.
>  
> *Impact:*
> This has not blocked us from doing anything, so *the impact nearly zero*.  It's something I found while writing unit tests for my application, but it does not impact my users.  I'm mostly reporting it as a "language weirdness", in case the JEXL developers care.
> That said, we _do_ use null keys in maps.  In my domain (working with data from clinical trials), a null numeric value means "missing", which is a valid value.  Our JEXL programmers implement "switch" statements using a map, so you might see an expression that translates a coded variable named "DMSEX" into an English description like:
> {code:java}
> {
>    null : "Unknown",
>    1    : "MALE",
>    2    : "FEMALE"
> }[DMSEX]{code}
> Fortunately, this works as expected.  This bug only prevents us from building the lookup map programmatically, but we prefer using a literal, anyway.
>  
> *Steps to Reproduce:*
> {code:java}
> @Test
> public void testSetNullKey() throws IOException {
>     JexlEngine jexl = new JexlBuilder().create();
>     JexlContext jc = new MapContext();
>     JexlExpression expression1 = jexl.createExpression(
>         "(function () {\n" +
>         "  var map = {null : 'foo'};\n" +
>         "  map[null] = 'bar';\n" +
>         "  return map[null];\n" +
>         "})()");
>     // JEXL 3.1, throws JexlException$Property "unsolvable property '<?>.<null>'"
>     // JEXL 3.2, throws JexlException$Property "undefined property '<?>.<null>'"
>     Object o1 = expression1.evaluate(jc);
>     Assert.assertEquals("bar", o1);
> }{code}
> *What Happens:*
> JEXL throws a JexlException.Property exception when it tries to evaluate "{{map[null] = 'bar'}}".
> *Expected Result:*
> "{{map[null] = 'bar'}}" changes the null key's value from "foo" to "bar" and the function returns "bar".
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)