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. ============================================================================= Commons Lang Package Version 2.2 Release Notes INTRODUCTION: This document contains the release notes for the 2.2 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.1: - None 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.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.2: LANG-2 javadoc example for StringUtils.splitByWholeSeparator incorrect LANG-3 PADDING array in StringUtils overflows on '\uffff' LANG-10 [patch] ClassUtils.primitiveToWrapper and Void LANG-21 escapeXML() -> Not escaping low characters LANG-25 DurationFormatUtils.formatDurationISO() javadoc is missing T in duration string between date and time part LANG-37 unit test for org.apache.commons.lang.text.StrBuilder LANG-42 EqualsBuilder.append(Object[], Object[]) crashes with a NullPointerException if an element of the first array is null LANG-45 StrBuilderTest#testReplaceStringString fails. LANG-50 Replace Clover with Cobertura LANG-59 DateUtils.truncate method is buggy when dealing with DST switching hours LANG-100 RandomStringUtils.random() family of methods create invalid unicode sequences LANG-105 ExceptionUtils goes into infinite loop in getThrowables is throwable.getCause() == throwable LANG-106 StringUtils#getLevenshteinDistance() performance is suboptimal LANG-112 Wrong length check in StrTokenizer.StringMatcher LANG-117 FastDateFormat: wrong format for date "01.01.1000" LANG-122 EscapeUtil.escapeHtml() should clarify that it does not escape ' chars to ' LANG-123 Unclear javadoc for DateUtils.iterator() LANG-127 Minor tweak to fix of bug # 26616 LANG-130 Memory "leak" in StringUtils LANG-140 DurationFormatUtils.formatPeriod() returns the wrong result LANG-141 Fraction.toProperString() returns -1/1 for -1 LANG-148 Performance modifications on StringUtils.replace LANG-150 StringEscapeUtils.unescapeHtml skips first entity after standalone ampersand LANG-152 DurationFormatUtils.formatDurationWords "11 s" gets converted to "11 " LANG-259 ValuedEnum.compareTo(Object other) not typesafe - it easily could be... LANG-261 Error in an example in the javadoc of the StringUtils.splitPreserveAllTokens() method LANG-264 ToStringBuilder/HashCodeBuilder javadoc code examples LANG-271 LocaleUtils test fails under Mustang LANG-272 Minor build and checkstyle changes LANG-277 Javadoc errors on StringUtils.splitPreserveAllTokens(String, char) LANG-278 javadoc for StringUtils.removeEnd is incorrect IMPROVEMENTS IN 2.2: LANG-159 Add WordUtils.getInitials(String) LANG-161 Add methods and tests to StrBuilder LANG-162 replace() length calculation improvement LANG-165 parseDate with TimeZone LANG-166 New interpolation features LANG-169 Implementation of escape/unescapeHtml methods with Writer LANG-176 CompareToBuilder excludeFields for reflection method LANG-186 Request for MutableBoolean implementation LANG-194 add generic add method to DateUtils LANG-198 New method for EqualsBuilder LANG-212 New ExceptionUtils method setCause() LANG-216 Provides a Class.getPublicMethod which returns public invocable Method LANG-217 Add Mutable to() methods. LANG-220 Tokenizer Enhancements: reset input string, static CSV/TSV factories LANG-226 Using ReflectionToStringBuilder and excluding secure fields LANG-242 Trivial cleanup of javadoc in various files LANG-246 CompositeFormat LANG-250 Performance boost for RandomStringUtils LANG-254 Enhanced Class.forName version LANG-260 StringEscapeUtils should expose escape*() methods taking Writer argument LANG-263 Add StringUtils.containsIgnoreCase(...) LANG-267 Support char array converters on ArrayUtils LANG-270 minor javadoc improvements for StringUtils.stripXxx() methods New ExceptionUtils methods getMessage/getRootCauseMessage