Apache Commons logo Commons Lang

Lang 2.3 Release Notes

These are the release notes and advice for upgrading Commons-Lang from version 2.2 to version 2.3.

INTRODUCTION:

This document contains the release notes for the 2.3 version of Apache 
Jakarta Commons Lang.
Commons Lang is a set of utility functions and reusable components that
should be of use in any Java environment.

INCOMPATIBLE CHANGES WITH VERSION 2.2:

- Calling stop on a suspended StopWatch will no longer change the underlying time. 
  It's very unlikely anyone was relying on that bug as a feature.

ADDITIONAL INCOMPATIBLE CHANGES WITH VERSION 2.0:

- The Nestable interface defines the method indexOfThrowable(Class).
Previously the implementations checked only for a specific Class.
Now they check for subclasses of that Class as well.
For most situations this will be the expected behavior (i.e. it's a bug fix).
If it causes problems, please use the ExceptionUtils.indexOfThrowable(Class) method instead.
Note that the ExceptionUtils method is available in v1.0 and v2.0 of commons-lang and has not been changed.
(An alternative to this is to change the public static matchSubclasses flag on NestableDelegate.
However, we don't recommend that as a long-term solution.)

- The StopWatch class has had much extra validation added.
If your code previously relied on unusual aspects, it may no longer work.

- Starting with version 2.1, Ant version 1.6.x is required to build. Copy 
junit.jar to ANT_HOME/lib. You can get JUnit from https://www.junit.org. See the developer's guide
for more details.

DEPRECATIONS FROM 2.2 to 2.3:

- None

DEPRECATIONS FROM 2.1 to 2.2:

- None

DEPRECATIONS FROM 2.0 to 2.1:

- The enum package has been renamed to enums for JDK 1.5 compliance.
All functionality is identical, just the package has changed.
This package will be removed in v3.0.

- NumberUtils.stringToInt - renamed to toInt

- DateUtils - four constants, MILLIS_IN_* have been deprecated as they were defined
as int not long. The replacements are MILLIS_PER_*. 


BUG FIXES IN 2.3:

    * [LANG-69 ] - ToStringBuilder throws StackOverflowError when an Object cycle exists
    * [LANG-102] - Refactor Entities methods
    * [LANG-153] - Can't XMLDecode an Enum
    * [LANG-262] - Use of enum prevents a classloader from being garbage collected resulting in out of memory exceptions.
    * [LANG-279] - HashCodeBuilder throws java.lang.StackOverflowError when an object contains a cycle.
    * [LANG-281] - DurationFormatUtils returns wrong result
    * [LANG-286] - Serialization - not backwards compatible
    * [LANG-292] - unescapeXml("&12345678;") should be "&12345678;"
    * [LANG-294] - StrBuilder.replaceAll and StrBuilder.deleteAll can throw ArrayIndexOutOfBoundsException.
    * [LANG-295] - StrBuilder contains usages of thisBuf.length when they should use size
    * [LANG-299] - Bug in method appendFixedWidthPadRight of class StrBuilder causes an ArrayIndexOutOfBoundsException
    * [LANG-300] - NumberUtils.createNumber throws NumberFormatException for one digit long
    * [LANG-303] - FastDateFormat.mRules is not transient or serializable
    * [LANG-304] - NullPointerException in isAvailableLocale(Locale)
    * [LANG-313] - Wrong behavior of Entities.unescape
    * [LANG-315] - StopWatch: suspend() acts as split(), if followed by stop()

IMPROVEMENTS IN 2.3:

    * [LANG-258] - Enum Javadoc
    * [LANG-266] - Wish for StringUtils.join(Collection, *)
    * [LANG-268] - StringUtils.join should allow you to pass a range for it (so it only joins a part of the array)
    * [LANG-275] - StringUtils substringsBetween
    * [LANG-282] - Create more tests to test out the +=31 replacement code in DurationFormatUtils.
    * [LANG-287] - Optimize StringEscapeUtils.unescapeXml(String)
    * [LANG-289] - NumberUtils.max(byte[]) and NumberUtils.min(byte[]) are missing
    * [LANG-291] - Null-safe comparison methods for finding most recent / least recent dates.
    * [LANG-306] - StrBuilder appendln/appendAll/appendSeparator
    * [LANG-310] - BooleanUtils isNotTrue/isNotFalse
    * [LANG-314] - Tests fail to pass when building with Maven 2