This comes from copying the source code of de.odysseus.juel:juel-impl and de.odysseus.juel:juel-api (a copy of Sun Microsystems Inc. Expression Language 2.2) into our codebase
The source code of javax.el is replaced by a proper dependency (e.g., jakarta.el:jakarta.el-api).
The source code of de.odysseus.juel:juel-impl is either replaced by a proper dependency or moved into a dedicated module form where it can be consumed by all of our components (bpmn engine, dmn engine, quarkus extension).
Keeping the JUEL source code has the advantage that we can still benefit from customizations, and we can make it compatible with jakarta.el:jakarta.el-api (Odysseus JUEL is not maintained anymore).
We fully understand the impact (e.g., potentially changed behavior of expression resolution, integration with application servers/runtimes).
~Recently implemented fix #2848 doesn't work with a proper dependency to jakarta.el:jakarta.el-api~ This works with EL API 4.0 and 5.0 out of the box, since parameter types are derived from all parameter values, nulls are considered assignable to the defined method parameter type and methods are found correctly
~This is most likely because of the following change between Java EL 2.2 and 3:~
The default coercion for nulls to non-primitive types returns nulls. For
instance, a null coerced to String now returns a null, instead of an empty
String.
– cf. pg. 62 in ELSpec.book
Bean method invocation changes - method parameters are converted by the resolver as described in the EL API specification. As a result, null values will be coerced into the type defined by the method. For example, calling myBean.setStringAttribute(null), requiring a String parameter, leads to null being coerced into "".
Currently, null is passed on as is, even for String types. This is not EL specification-conform anymore with EL API 2.2+
Context
javax.el
is part of our codebase.de.odysseus.juel:juel-impl
andde.odysseus.juel:juel-api
(a copy of Sun Microsystems Inc. Expression Language 2.2) into our codebase2848
3053
Acceptance Criteria (Required on creation)
javax.el
is replaced by a proper dependency (e.g.,jakarta.el:jakarta.el-api
).de.odysseus.juel:juel-impl
is either replaced by a proper dependency or moved into a dedicated module form where it can be consumed by all of our components (bpmn engine, dmn engine, quarkus extension).jakarta.el:jakarta.el-api
(Odysseus JUEL is not maintained anymore).Hints
jakarta.el:jakarta.el-api
~ This works with EL API 4.0 and 5.0 out of the box, since parameter types are derived from all parameter values,null
s are considered assignable to the defined method parameter type and methods are found correctlynull
values will be coerced into the type defined by the method. For example, callingmyBean.setStringAttribute(null)
, requiring aString
parameter, leads tonull
being coerced into""
.null
is passed on as is, even forString
types. This is not EL specification-conform anymore with EL API 2.2+M
Links