Apache Commons JEXL 3.0 发布

jopen 8年前


Java Expression Language (JEXL) 是一个表达式语言引擎,可以用来在应用或者框架中使用。JEXL 受Velocity 和 JSP 标签库 1.1 (JSTL) 的影响而产生的。需要注意的是, JEXL 并不时 JSTL 中的表达式语言的实现。

Apache Commons JEXL 3.0 发布,此版本现已提供下载:

https://commons.apache.org/jexl/download_jexl.cgi

JEXL 3.0 是个重大版本,修改了公共 JEXL API;因为二进制和源代码的不兼容,JEXL 转移到了 org.apache.commons.jexl3 包,Maven artifactId 也改为 commons-jexl3。

JEXL 3.0 现要求 Java 6。

JEXL 3.0 主要改进
==================
* A redesigned API that properly segregates the "public" part and the
"internal" parts of JEXL.
* A real difference between Expression and Script (scripts accept
statements: for, while, etc).
* The ability to create JEXL functions in script, closure/variables
hoisting/currying included.
* A set of assignment operators (+=, *= , ...).
* A set of String matching operators (^= startsWith, $= endsWith) and
their negative counterparts (!^, !$)
* A range operator (x .. y) to ease writing loops (for(var x : 1 .. 10))
* A literal set syntax to ease creating sets: { 1, 2...}

新特性
====================
* JEXL-178: 'Unsolvable property' message to provide details about
underlying exception
* JEXL-177: Unified expressions to be used in String literals in JEXL
scripts
* JEXL-176: Synonym operator name 'in' for operator =~ // Remove
'foreach...in' syntax
* JEXL-174: Overloadable property access operators
* JEXL-173: Duck-typed java closures
* JEXL-170: Implement assignment operators
* JEXL-164: public getters for high/low properties for IntegerRange and
LongRange
* JEXL-152: Extend Range literal to support Long values
* JEXL-149: Set Construction as per EL 3.0 spec
* JEXL-133: String matching Operator short-hand inspired by CSS3
* JEXL-128: ObjectContext<> should implement NamespaceResolver
* JEXL-127: Allow the creation of functions
* JEXL-123: Redesign API for stability
* JEXL-122: Move JEXL from org.apache.comms.jexl2 to
org.apache.commons.jexl3
* JEXL-136: Script calls within scripts may fail with number arguments
* JEXL-135: Using map as script parameter or local variable
* JEXL-134: Issue with evaluation of concat of variables : \r + \n gives 0
* JEXL-131: UnifiedJexl parsing may fail with NPE
* JEXL-130: Ternary Conditional fails for Object values
* JEXL-126: Decimal numbers literals should be 'double' by default
(instead of 'float')

Bugs 修复
==================
* JEXL-184: dot-ed identifiers parsing failure
* JEXL-180: Documentation - suggests using float for financials
* JEXL-171: Map access operator does not work if key name clashes with
map property name
* JEXL-169: A string is wrongly identified as FloatingPointNumber
* JEXL-168: Dedicated operator for String concatenation
* JEXL-79:  Add support for growable arrays (ArrayLists)
* JEXL-167: Possible loss of value when converting BigDecimal to BigInteger
* JEXL-166: Incorrect operator symbol for bitwise complement in
jexlArithmetic
* JEXL-163: empty(new ("java.lang.Long", 4294967296)) returns true
* JEXL-162: empty() function throws an exception : unsupported type
* JEXL-160: typo in package.html
* JEXL-158: Handle locale decimal separators correctly
* JEXL-157: Replace File.pathSeparator with File.separator
* JEXL-146: Performance problem in Interpreter.unknownVariable mechanism
* JEXL-145: Sandbox calling wrong check (classname vs class)
* JEXL-144: Empty array property setting fails
* JEXL-142: Map expression issue with empty key
* JEXL-141: Suffix for Big Decimal and Big Integer Literal is
incorrectly mentioned in Java docs
* JEXL-137: Invalid script variable list for nested array/map access

改进列表:
http://commons.apache.org/jexl/changes-report.html

来自: http://www.oschina.net/news/69444/commons-jexl-3-0