History of Changes

Version 2.2.7 (2014/02/06)

developer: cbe type: update fixes: 73
updated method invocation code to use Method.setAccessible() only if necessary.
developer: cbe context: build type: add fixes: 79
Catch SecurityException when accessing default el.properties.

Version 2.2.6 (2013/01/11)

developer: cbe type: update thanks to: Oleg Varaksin, Arjan Tijms. fixes: 71
For a single identifier method expression, if the identifier evaluates to another method expression, invoke that method expression. (The semantics for this case is not covered in the specification. See also this issue . This change was made to improve compatibility with other EL implementations.)
developer: cbe context: build type: add thanks to: Adam Crume.
Added OSGi bundle manifest entries for juel-api and juel-impl and declared de.odysseus.el.ExpressionFactoryImpl as an OSGi service.

Version 2.2.5 (2012/07/08)

developer: cbe context: build type: update thanks to: Oleg Varaksin. fixes: 3521406
Changed scope for dependency from juel-impl to juel-api to provided. Therefore, to include juel-api, users now need to explicitly add it as a dependency.
developer: cbe context: code type: update
Re-implemented Cache based on ConcurrentHashMap and ConcurrentLinkedQueue to improve performance in multi-threaded environments.
developer: cbe context: code type: update thanks to: Martin Koci. fixes: 3529970
Determine target type and coerce argument in ExpressionNode.setValue().
developer: cbe context: code type: fix thanks to: Martin Koci. fixes: 834616
Catch and re-throw IllegalArgumentException as ELException in BeanELResolver.setValue().
developer: cbe context: code type: update
Updated messages with keys error.coerce.type and error.coerce.value to include value that could not be coerced.
developer: cbe context: code type: update
Create HashMap in ELContext lazily.
developer: cbe context: code type: update
BeanELResolver now caches property access methods.
developer: cbe context: code type: fix fixes: 3420591
ELContext.getContext(key) and putContext(key, value) should throw NPE if key is null

Version 2.2.4 (2011/09/30)

developer: cbe context: code type: add
Added property javax.el.ignoreReturnType to ignore the expected return type passed to EpressionFactory.createMethodExpression() when looking up a method to invoke. (This option has no effect when evaluating literal method expressions, where the expected return type acts as coercion target type.)

Version 2.2.3 (2011/01/30)

developer: cbe context: code type: update thanks to: Martin Koci. fixes: 3154206
fixed: a method invocation node invoked via ValueExpression.getValue(...) should return null if its base (prefix) expression evaluates to null.
developer: cbe context: build type: update
Moved parent pom.xml from modules to project root to simplify maven release build.

Version 2.2.2 (2010/11/12)

developer: cbe context: build type: update
Updated POMs to sync JUEL releases to maven central via Sonatype's repository hosting service.
developer: cbe context: code type: update fixes: 3104608
fixed: MethodExpression.invoke(...) should ignore passed parameter types if arguments are specified in the expression as in ${foo.bar(123)}.
developer: cbe context: code type: update fixes: 3095122
Improved method lookup in method expressions (when calling MethodExpression.invoke(...), Method.setAccessible(true) is used if necessary).
developer: cbe context: code type: update
Changed implementation of ASTProperty.getValueReference() to throw an exception if base expression evaluates to null. Updated documentation of ValueExpression.getValueReference() accordingly.

Version 2.2.1 (2009/12/13)

developer: cbe context: code type: add
Added MethodExpression.isParametersProvided(). This method was added silently to the API (wasn't mentioned anywhere prior to the final release of EE6) and forces this release...
developer: cbe context: build type: update
Added OSGi attributes to manifest files of juel-api-2.2.x.jar, juel-impl-2.2.x.jar and juel-spi-2.2.x.jar. E.g. the latter two can now be added as OSGi modules to glassfish v3.
developer: cbe context: code type: add
Added SimpleResolver.setELResolver(ELResolver).
developer: cbe context: code type: update
Removed static field BeanELResolver.DEFAULT_FACTORY. Lazily get a factory for type conversions when needed to coerce method parameters instead.

Version 2.2.0 (2009/12/01)

developer: cbe context: code type: update
Improved implementation of type conversions in de.odysseus.el.misc.TypeConverterImpl.
developer: cbe context: code type: add
Added some more unit tests.

Version 2.2.0-rc3 (2009/11/08)

developer: cbe context: code type: update
If no properties are available in JUEL's expression factory (neither passed in nor from el.properties), use system properties if System.getProperty("javax.el.ExpressionFactory") points to JUEL.
developer: cbe context: admin type: update
Split code base into modules modules/api, modules/impl and modules/spi; added maven build for these.
developer: cbe context: build type: add
Separated the JAR service provider (META-INF/services/javax.el.ExpressionFactory) into its own juel-spi-2.2.x.jar. This allows to have juel-impl-2.2.x.jar on your classpath without forcing JUEL to be used by ExpressionFactory.newInstance().
developer: cbe context: code type: add
Added ExpressionFactoryImpl.Profile enum type and several new constructors to easily choose between JEE5 and JEE6 (default) behavior.
developer: cbe context: docs type: update
Updated documentation for 2.2.

Version 2.1.3/2.2.0-rc2 (2009/10/09)

developer: cbe context: code type: add
Added ExpressionFactoryImpl(TreeStore store, TypeConverter converter) constructor.
developer: cbe context: code type: fix thanks to: Pavel Vojtechovsky. fixes: 2871773
Fixed: ListELResolver.getValue(...) should return null when index is out of range.
developer: cbe context: code type: fix thanks to: Pavel Vojtechovsky. fixes: 2871795
Fixed: second operand is always evaluated in and/or operations (e.g. ${true or false}).
developer: cbe context: code type: fix fixes: 2822943
Fixed: BeanELResolver should use Method.setAccessible(true).
developer: cbe context: docs type: update
Updated copyright notes.

Version 2.2.0-rc1 (2009/08/09)

developer: cbe context: code type: add
Implemented changes from JSR 245, maintenance release 2. This replaces JUELs proprietary API for method invocations. The BeanELResolver class now provides a generic default for method invocations using reflection. Method invocations are disabled/enabled via the javax.el.methodInvocations property.

Version 2.1.2 (2009/04/26)

developer: cbe context: code type: fix thanks to: Gerhard Petracek. fixes: 2748538
Fixed: for a single identifier expression ${foo}, ValueExpression.setValue(...) always calls ELContext.setValue(...), even if foo is bound to a variable.
developer: cbe context: build type: update
Renamed API/impl jars to juel-api-<version>.jar and juel-impl-<version>.jar to reflect maven artifact names juel-api and juel-impl.

Version 2.1.1 (2009/03/21)

developer: cbe context: code type: add
Added support for bracket operator in method invocations (e.g. ${foo[bar](baz)}).
developer: cbe context: code type: add
Added implementation of javax.el api classes.
developer: cbe context: build type: update thanks to: Wolfgang Häfelinger.
Updated pom.xml to package the following jar files: juel-<version>.jar, juel-<version>-api.jar and juel-<version>-impl.jar.
developer: cbe context: code type: fix thanks to: Adam Winer. fixes: 2590830
Fixed: SimpleContext.getVariableMapper() returns null
developer: cbe context: code type: add
Experimental support for syntax extensions.
developer: cbe context: build type: update
Reorganized project structure to meet maven's standard layout.
developer: cbe context: code type: update
Improved method invocation support by passing de.odysseus.el.misc.MethodInvocation as property to ELResolver.getValue(..., Object property).
developer: cbe context: code type: add
Added support for varargs.
developer: cbe context: code type: add
Introduce TypeConverter to allow for customized coercion rules.
developer: cbe context: code type: remove
Removed old TypeConversions (use TypeConverter.DEFAULT).
developer: cbe context: docs type: update
Update to fop-0.95-beta and forrester-0.3.3.
developer: cbe context: admin type: update
Moved to SVN.

Version 2.1.0 (2007/03/06)

developer: cbe context: code type: update
Use StringBuilder instead of StringBuffer (performance).
developer: cbe context: code type: update
Update API sources from glassfish.

Version 2.1.0-rc3 (2006/10/20)

developer: cbe context: code type: fix thanks to: Frédéric Esnault.
ListELResolver was missing in SimpleResolver's default chain of resolver delegates.
developer: cbe context: code type: update
Update API sources from glassfish.
developer: cbe context: code type: update
Minor performance improvements in type conversions and number operations.

Version 2.1.0-rc2 (2006/10/06)

developer: cbe context: code type: update
Relaxed matching of return type for nonliteral MethodExpression's. The actual method return type is checked be assignable to the expression's expected return type.
developer: cbe context: code type: add
Let ExpressionFactory's default constructor read properties from el.properties.
developer: cbe context: admin type: update
Updated API classes to include new API methods ExpressionFactory.newInstance() and ExpressionFactory.newInstance(java.util.Properties).
developer: cbe context: build type: add
Package Jars with META-INF/services/javax.el.ExpressionFactory to register JUEL as EL service provider.
developer: cbe context: code type: add
Added Builder.Feature.NULL_PROPERTIES to resolve ${map[null]}.
developer: cbe context: code type: update
Generified TypeConversions.coerceToEnum(...) and TypeConversions.coerceToEnum(...).
developer: cbe context: code type: fix
Coerce null function parameters whose type is primitive.
developer: cbe context: code type: update
Minor scanner cleanup.
developer: cbe context: code type: update
Increased default cache size to 1000.
developer: cbe context: code type: update
ExpressionFactoryImpl no longer final to allow customization by subclassing. E.g. using JUEL with JSF requires calling a default constructor.

Version 2.1.0-rc1 (2006/07/18)

developer: cbe context: code type: add
Added support for method invocations as in ${foo.bar(1)} (disabled by default).
developer: cbe context: code type: fix
Reject identifier instanceof.
developer: cbe context: docs type: add
Added "Advanced Topics" section.
developer: cbe context: code type: remove
Removed support for system property de.odysseus.el.factory.builder.
developer: cbe context: design type: update
Moved default tree cache implementation to package de.odysseus.el.tree.impl.
developer: cbe context: design type: update
Moved node implementation classes to package de.odysseus.el.tree.impl.ast.
developer: cbe context: code type: remove
Removed deprecated methods from SimpleResolver.
developer: cbe context: code type: update
Do not coerce null function parameters.
developer: cbe context: code type: update
Minor improvemnents in BooleanOperations and TypeConversions.
developer: cbe context: code type: update
Replaced JFlex scanner by handcoded scanner.
developer: cbe context: code type: update
Lazy initialize parser's lookahead token list.

Version 2.1.0-b2 (2006/07/01)

developer: cbe context: docs type: add
Added specification issues on number literals.
developer: cbe context: code type: remove
Finally removed the old JavaCC parser.
developer: cbe context: docs type: add
Added some more Javadocs.
developer: cbe context: code type: fix
Avoid NumberFormatException when parsing integer/floating point literals.
developer: cbe context: code type: remove
Removed staticTreeBuilder.DEFAULT constant.
developer: cbe context: code type: fix
Take builder and expected type into account when comparing tree expressions.

Version 2.1.0-b1 (2006/06/18)

developer: cbe context: docs type: add
Added documentation (HTML and PDF).
developer: cbe context: code type: add
Added TreeValueExpression.isLeftValue().
developer: cbe context: code type: remove
Removed ExpressionNode.isLiteralValue().
developer: cbe context: build type: add
Added more jar manifest attributes.
developer: cbe context: build type: update
Let javac include line and source debug information.
developer: cbe context: code type: add
Added secondary cache (WeakHashMap) to TreeCache.Default.
developer: cbe context: code type: update
Lazy initialize SimpleContext.ELResolver.
developer: cbe context: code type: add
Configure default builder class via system property de.odysseus.el.factory.builder.
developer: cbe context: code type: update
Added @Override annotations.
developer: cbe context: code type: add
Added SAX XML filter sample.
developer: cbe context: code type: update
Simplified SimpleResolver (now only handles top-level properties) .
developer: cbe context: code type: update
Deprecated SimpleContext.setValue(...) and SimpleContext.setFunctions(...). These methods will be removed in 2.1.0.
developer: cbe context: code type: update
Lots of minor refactorings.

Version 2.1.0-a3 (2006/06/04)

developer: cbe context: code type: fix
Re-throw NumberFormatException in number coercion as ELException.
developer: cbe context: code type: fix
Expected type now mandatory for value expressions.
developer: cbe context: docs type: add
Added SourceForge logo to JUEL home page.
developer: cbe context: code type: add
Added a calculator sample.
developer: cbe context: code type: update
Now use a new hand crafted top-down parser and a JFlex generated scanner. This almost doubles parsing performance!
developer: cbe context: code type: update
Moved the Javacc parser to package de.odysseus.el.tree.impl.javacc. By default, it is excluded from the JUEL jar file.

Version 2.1.0-a2 (2006/06/01)

developer: cbe context: code type: update
Include EL api sources from glassfish now (the tomcat6 code was too buggy). The sources are available under Sun's CDDL and are redistributed here. Also added a note on that in the README.txt file.
developer: cbe context: code type: update
Use pure Javacc parser. We no longer use the JJTree preprocessor. The AST classes are now Javacc independent and could easily be reused with other parser generators.
developer: cbe context: code type: update
Improved unit tests
developer: cbe context: docs type: add
Added some documentation
developer: cbe context: code type: update
Improved parse exception formatting

Version 2.1.0-a1 (2006/05/13)

developer: cbe context: admin type: add
Initial Release