1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
|
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
$Id: RELEASE-NOTES.txt 1215331 2011-12-16 23:04:37Z sebb $
Commons JEXL Package
Version 2.1.1
Release Notes
INTRODUCTION:
=============
The Apache Commons JEXL library facilitates the implementation of dynamic and scripting features in
applications and frameworks written in Java.
JEXL implements an Expression Language based on some extensions to the JSTL Expression Language supporting most of the
constructs seen in shell-script or ECMAScript.
Its goal is to expose scripting features usable by technical operatives or consultants working with enterprise platforms.
http://commons.apache.org/jexl/
What's new in 2.1.1
===================
Version 2.1.1 is a bugfix release to address a regression in 2.1:
* JEXL-124: Array parameters to methods don't work anymore
There are no other changes
Compatibility with previous releases
====================================
Version 2.1 is binary compatible with 2.0.1.
However it is not source compatible.
New methods have been added to the org.apache.commons.jexl2.Script and org.apache.commons.jexl2.JexlInfo interfaces.
Any source code that implements these interfaces will need to be updated.
What's new in 2.1:
==================
* A more thorough arithmetic (JexlArithmetic) that allows fine control over decimals (scale and precision), a
new syntax for numeric literals (OGNL inspired Big and Huge notations) and a better type handling keeping the most
appropriate representation in casual operations.
* The introduction of script variables and parameters that reduce context dependencies and methods; this allows to
perform checks after script creation (light static checking hints). Plus the ability to call script from scripts.
* A sandoxing feature to restrict and rename what JEXL can access from the environment allowing tighter control over security.
* Extensions to UnifiedJEXL that allow the creation of templates.
New features in 2.1:
====================
* JEXL-121: Add simple template features [this was missing from the previous edition of these notes]
* JEXL-114: Allow scripts to create local variables // Add return keyword
* JEXL-113: Add functions to extract which variables, parameters and local variables are used to evaluate a script
* JEXL-118: Provide an IN operator
* JEXL-115: Add support for asynchronous script execution and cancellation
* JEXL-116: Add control over classes, methods, constructors and properties allowed in scripts
* JEXL-120: Add simple template features
* JEXL-119: Allow indexed properties container resolution in expressions
* JEXL-106: When divide two BigDecimal values in an expression it results in java.lang.ArithmeticException
* JEXL-102: Add "jexl2" as a supported name
Bugs Fixed in 2.1:
==================
* JEXL-83: Make JexlArithmetic immutable (and threadsafe)
* JEXL-24: Support Long for integer literal instead of Integers
* JEXL-107: literals and parenthesized expressions can not be used as references
* JEXL-108: parsing error if i define a empty literal array/map
* JEXL-101: Vararg methods where the first argument is no vararg can not be called with only the fixed parameters given
* JEXL-105: Array literals are considered constant even when they are not
* JEXL-104: NPE in JexlArithmetic when an Array-Expression containing a null is used.
* JEXL-112: Cannot parse Integer.MIN_VALUE
* JEXL-111: expression execute error
Bugs fixed in 2.0.1:
====================
* JEXL-100: Array access expressions fail when evaluated twice and cache is enabled
* JEXL-99: Documentation of Thread Safety / Invalid code examples on homepage
* JEXL-98: Quote escaping cannot be escaped
Previous Releases:
==================
Bugs fixed in 2.0:
==================
* JEXL-90: Jexl parser allows invalid expressions, e.g. "a=1 b=2 3"
* JEXL-88: MethodKey.java - name clash getMostSpecific() with Java 1.5.0
* JEXL-87: Inconsistent behaviour of arithmetical operations
* JEXL-81: Introspector does not use ListGetExecutor for List
* JEXL-80: Lenient mode should not throw exception when {g,s}etting an undefined property
* JEXL-78: Ternary operator throws Exception when JexlEngine in strict mode
* JEXL-76: Remove unnecessary class VisitorAdapter
* JEXL-71: Parsing errors?
* JEXL-67: Potential NPE in util.introspection.MethodKey
* JEXL-66: testDottedNames expects map enumeration order
* JEXL-64: Inconsistent behaviour of dotted names
* JEXL-62: NPE in Interpreter
* JEXL-59: ClassMap holds a reference to class
* JEXL-56: Logging wrongly uses java.util.logging
* JEXL-50: Div operator does not do integer division
* JEXL-49: Block statements aren't parsed
* JEXL-48: NPE during expression evaluation
* JEXL-45: Unhandled division by zero
* JEXL-42: NullPointerException evaluating an expression
* JEXL-40: JEXL fails to find abstract public methods in the base class if overridden by non-public derived types
* JEXL-32: BigDecimal values are treated as Long values which results in loss of precision
* JEXL-30: ASTAddNode does not add BigDecimal objects correctly
* JEXL-27: Cannot assign a value to the property of an object, such as object.prop = value.
* JEXL-26: ASTArrayAccess messes up on fallback to JexlContext
* JEXL-19: Ternary conditional not supported
* JEXL-3 : Static method resolution and changes to context
Other issues fixed (Improvements/New Features):
===============================================
* JEXL-95: Enhance JSR-223 implementation
* JEXL-94: Allow stateful namespaces (ns:function)
* JEXL-93: Add public fields as targets of set/get property
* JEXL-92: JexlContext API should be more flexible
* JEXL-89: Drop main() and suite() methods from Test cases
* JEXL-85: 2.0 grammar finishing touches & debugger update
* JEXL-82: Change foreach syntax
* JEXL-77: Rename last Velocity originated classes
* JEXL-72: Remove deprecated classes and methods entirely
* JEXL-70: Add main class to allow scripts etc to be tested
* JEXL-63: JSR-223 support
* JEXL-61: Usage of strong references on Method/Constructor & WeakHashMap usage
* JEXL-60: Refactor o.a.c.jexl.util and o.a.c.jexl.util.introspection
* JEXL-58: UnifiedJEXL
* JEXL-57: Change pom.xml to make it Netbeans Maven2 plugin friendly
* JEXL-55: JEXL 2.0 redux, attempting to restart the effort to release 2.0
* JEXL-54: Light performance enhancements
* JEXL-47: Allow single-line comments with //
* JEXL-43: Website overview does not mention method calls and new 2.0 features
* JEXL-41: Allow nested ${} evaluation
* JEXL-35: Final API requirements
* JEXL-34: Remove pre and post resolution of variables via the JexlExprResolver classes.
* JEXL-33: Remove unnecessary throws Exception from various classes
* JEXL-29: Support non-object-level functions/methods, as size and empty function
* JEXL-25: Call method with varargs
* JEXL-24: Support Long for integer literal instead of Integers
* JEXL-21: operator overloading / hooks on operator processing
* JEXL-16: allowing quote escaping
* JEXL-15: Needs definable functions
* JEXL-11: Don't make null convertible into anything
* JEXL-10: Make possible checking for unresolved variables
Other Changes:
==============
o Add @since 2.0 tags to code so we can track API additions via Javadoc
Upgrading from JEXL 1.x
=======================
JEXL now requires Java 1.5 or later.
Version 2.0 resides in the org.apache.commons.jexl2 package; part of the version 1.x API is reimplemented as an
add-on source library in the jexl-compat directory; since it can not fully reimplement the original public 1.x, it may
only be used to ease transition in strictly controlled deployments.
The following classes are implemented through the jexl-compat source library:
* ExpressionFactory
* ScriptFactory
* Expression
* Script
* JexlContext
* JexlHelper
Migration notes
===============
When migrating from jexl 1.x to jexl 2.0, the following hints may be helpfull.
The following classes no longer exist:
* ExpressionFactory, ScriptFactory: create a JexlEngine and use createExpression() or createScript()
instead.
The following classes have been renamed and replaced:
* VelMethod <=> JexlMethod
* VelPropertyGet <=> JexlPropertyGet
* VelPropertySet <=> JexlPropertySet
The following methods have been removed:
* Info.getTemplateName() - use Info.getName() instead
* Expression.addPostResolver() / Expression.addPreResolver() - set ant-like variables in JexlContext, implement
a specific JexlContext or derive JexlcontextInterpreter/JexlEngine instead
Behavior changes
================
* Public fields are considered when using JexlPropertyGet / JexlPropertySet: Jexl 1.x behavior can be reimplemented
by subclassing UberspectImpl.
*Division (/ operator) behavior change: division between integers no longer casts its operands to double; integer division
allways results in a integer. The 1.x behavior can be reimplemented by subclassing JexlArithmetic.
New Features:
=============
Assignment expression: a = b (and a.b.c = d)
* Assigns a variable (ant-like variable or bean-property)
Ternary operator expression: a ? b : c (and a ?: c)
* The usual inline conditional shortcut and its 'Elvis' form (a ?: b evaluates as a ? a : b)
Constructor call expression: new('my.class.name', arguments...)
* Creates a new instance of a class using the most appropriate constructor according
to the actual arguments
Function namespace: ns:func(arguments...)
* A function namespace allows the use of class or instance methods in function calls
UnifiedJEXL
* Adds ${...} and #{...} JSP/EL syntax support on top of the JexlEngine
JSR-223 support
* Implement JSR-223 Scripting Engine for JEXL script (need BSF-3.0 on Java < 6)
Error and exception handling
* Configuring the leniency and verbosity of the Jexl engine allows user control over the
error handling policy
|