1Licensed to the Apache Software Foundation (ASF) under one or more 2contributor license agreements. See the NOTICE file distributed with 3this work for additional information regarding copyright ownership. 4The ASF licenses this file to You under the Apache License, Version 2.0 5(the "License"); you may not use this file except in compliance with 6the License. You may obtain a copy of the License at 7 8http://www.apache.org/licenses/LICENSE-2.0 9 10Unless required by applicable law or agreed to in writing, software 11distributed under the License is distributed on an "AS IS" BASIS, 12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13See the License for the specific language governing permissions and 14limitations under the License. 15 16============================================================================= 17 18 Commons Lang Package 19 Version 2.3 20 Release Notes 21 22 23INTRODUCTION: 24 25This document contains the release notes for the 2.3 version of Apache 26Jakarta Commons Lang. 27Commons Lang is a set of utility functions and reusable components that 28should be of use in any Java environment. 29 30INCOMPATIBLE CHANGES WITH VERSION 2.2: 31 32- Calling stop on a suspended StopWatch will no longer change the underlying time. 33 It's very unlikely anyone was relying on that bug as a feature. 34 35ADDITIONAL INCOMPATIBLE CHANGES WITH VERSION 2.0: 36 37- The Nestable interface defines the method indexOfThrowable(Class). 38Previously the implementations checked only for a specific Class. 39Now they check for subclasses of that Class as well. 40For most situations this will be the expected behavior (i.e. it's a bug fix). 41If it causes problems, please use the ExceptionUtils.indexOfThrowable(Class) method instead. 42Note that the ExceptionUtils method is available in v1.0 and v2.0 of commons-lang and has not been changed. 43(An alternative to this is to change the public static matchSubclasses flag on NestableDelegate. 44However, we don't recommend that as a long-term solution.) 45 46- The StopWatch class has had much extra validation added. 47If your code previously relied on unusual aspects, it may no longer work. 48 49- Starting with version 2.1, Ant version 1.6.x is required to build. Copy 50junit.jar to ANT_HOME/lib. You can get JUnit from https://www.junit.org. See the developer's guide 51for more details. 52 53DEPRECATIONS FROM 2.2 to 2.3: 54 55- None 56 57DEPRECATIONS FROM 2.1 to 2.2: 58 59- None 60 61DEPRECATIONS FROM 2.0 to 2.1: 62 63- The enum package has been renamed to enums for JDK 1.5 compliance. 64All functionality is identical, just the package has changed. 65This package will be removed in v3.0. 66 67- NumberUtils.stringToInt - renamed to toInt 68 69- DateUtils - four constants, MILLIS_IN_* have been deprecated as they were defined 70as int not long. The replacements are MILLIS_PER_*. 71 72 73BUG FIXES IN 2.3: 74 75 * [LANG-69 ] - ToStringBuilder throws StackOverflowError when an Object cycle exists 76 * [LANG-102] - Refactor Entities methods 77 * [LANG-153] - Can't XMLDecode an Enum 78 * [LANG-262] - Use of enum prevents a classloader from being garbage collected resulting in out of memory exceptions. 79 * [LANG-279] - HashCodeBuilder throws java.lang.StackOverflowError when an object contains a cycle. 80 * [LANG-281] - DurationFormatUtils returns wrong result 81 * [LANG-286] - Serialization - not backwards compatible 82 * [LANG-292] - unescapeXml("&12345678;") should be "&12345678;" 83 * [LANG-294] - StrBuilder.replaceAll and StrBuilder.deleteAll can throw ArrayIndexOutOfBoundsException. 84 * [LANG-295] - StrBuilder contains usages of thisBuf.length when they should use size 85 * [LANG-299] - Bug in method appendFixedWidthPadRight of class StrBuilder causes an ArrayIndexOutOfBoundsException 86 * [LANG-300] - NumberUtils.createNumber throws NumberFormatException for one digit long 87 * [LANG-303] - FastDateFormat.mRules is not transient or serializable 88 * [LANG-304] - NullPointerException in isAvailableLocale(Locale) 89 * [LANG-313] - Wrong behavior of Entities.unescape 90 * [LANG-315] - StopWatch: suspend() acts as split(), if followed by stop() 91 92IMPROVEMENTS IN 2.3: 93 94 * [LANG-258] - Enum Javadoc 95 * [LANG-266] - Wish for StringUtils.join(Collection, *) 96 * [LANG-268] - StringUtils.join should allow you to pass a range for it (so it only joins a part of the array) 97 * [LANG-275] - StringUtils substringsBetween 98 * [LANG-282] - Create more tests to test out the +=31 replacement code in DurationFormatUtils. 99 * [LANG-287] - Optimize StringEscapeUtils.unescapeXml(String) 100 * [LANG-289] - NumberUtils.max(byte[]) and NumberUtils.min(byte[]) are missing 101 * [LANG-291] - Null-safe comparison methods for finding the most recent / least recent dates. 102 * [LANG-306] - StrBuilder appendln/appendAll/appendSeparator 103 * [LANG-310] - BooleanUtils isNotTrue/isNotFalse 104 * [LANG-314] - Tests fail to pass when building with Maven 2 105 106