1 2Licensed to the Apache Software Foundation (ASF) under one or more 3contributor license agreements. See the NOTICE file distributed with 4this work for additional information regarding copyright ownership. 5The ASF licenses this file to You under the Apache License, Version 2.0 6(the "License"); you may not use this file except in compliance with 7the License. You may obtain a copy of the License at 8 9http://www.apache.org/licenses/LICENSE-2.0 10 11Unless required by applicable law or agreed to in writing, software 12distributed under the License is distributed on an "AS IS" BASIS, 13WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14See the License for the specific language governing permissions and 15limitations under the License. 16 17 18 Apache Commons Lang 19 Version 3.7 20 Release Notes 21 22 23INTRODUCTION: 24 25This document contains the release notes for the 3.7 version of Apache Commons Lang. 26Commons Lang is a set of utility functions and reusable components that should be of use in any 27Java environment. 28 29Lang 3.0 and onwards now targets Java 5.0, making use of features that arrived with Java 5.0 such as generics, 30variable arguments, autoboxing, concurrency and formatted output. 31 32For the advice on upgrading from 2.x to 3.x, see the following page: 33 34 https://commons.apache.org/lang/article3_0.html 35 36Apache Commons Lang, a package of Java utility classes for the 37classes that are in java.lang's hierarchy, or are considered to be so 38standard as to justify existence in java.lang. 39 40New features and bug fixes. Requires Java 7, supports Java 8, 9, 10. 41 42Changes in this version include: 43 44New features: 45o LANG-1355: TimeZone.getTimeZone() in FastDateParser causes resource contention (PR #296.) Thanks to Chas Honton. 46o LANG-1360: Add methods to ObjectUtils to get various forms of class names in a null-safe manner Thanks to Gary Gregory. 47 48Fixed Bugs: 49o LANG-1362: Fix tests DateUtilsTest for Java 9 with en_GB locale Thanks to Stephen Colebourne. 50o LANG-1365: Fix NullPointerException in isJavaVersionAtLeast on Java 10, add SystemUtils.IS_JAVA_10, add JavaVersion.JAVA_10 Thanks to Gary Gregory. 51o LANG-1348: StackOverflowError on TypeUtils.toString(...) for a generic return type of Enum.valueOf Thanks to mbusso. 52o LANG-1350: ConstructorUtils.invokeConstructor(Class, Object...) regression Thanks to Brett Kail. 53o LANG-1349: EqualsBuilder#isRegistered: swappedPair construction bug Thanks to Naman Nigam. 54o LANG-1357: org.apache.commons.lang3.time.FastDateParser should use toUpperCase(Locale) Thanks to BruceKuiLiu. 55 56Changes: 57o LANG-1358: Improve StringUtils#replace throughput Thanks to Stephane Landelle. 58o LANG-1346: Remove deprecation from RandomStringUtils 59o LANG-1361: ExceptionUtils.getThrowableList() is using deprecated ExceptionUtils.getCause() Thanks to Ana. 60 61 62Historical list of changes: https://commons.apache.org/proper/commons-lang/changes-report.html 63 64For complete information on Apache Commons Lang, including instructions on how to submit bug reports, 65patches, or suggestions for improvement, see the Apache Commons Lang website: 66 67https://commons.apache.org/proper/commons-lang/ 68 69============================================================================= 70 71 Apache Commons Lang 72 Version 3.6 73 Release Notes 74 75 76INTRODUCTION: 77 78This document contains the release notes for the 3.6 version of 79Apache Commons Lang as well as a history all changes in the Commons Lang 3.x 80release line. Commons Lang is a set of utility functions and reusable 81components that should be of use in any Java environment. Commons Lang 3.6 at 82least requires Java 7.0. Note that this has changed from Commons Lang 3.5, which 83only required Java 1.6. 84 85For the advice on upgrading from 2.x to 3.x, see the following page: 86 87 https://commons.apache.org/lang/article3_0.html 88 89HIGHLIGHTS 90========== 91 92Some of the highlights in this release include: 93 94o The class org.apache.commons.lang3.concurrent.Memoizer is an implementation 95 of the Memoizer pattern as shown in 96 Goetz, Brian et al. (2006) - Java Concurrency in Practice, p. 108. 97o The class org.apache.commons.lang3.ArchUtils has been added. ArchUtils is 98 a utility class for the "os.arch" system property. 99 100DEPRECATIONS 101============ 102 103The Apache Commons Community has recently set up the Commons Text component 104as a home for algorithms working on strings. For this reason most of the string 105focused functionality in Commons Lang has been deprecated and moved to 106Commons Text. This includes: 107 108o All classes in the org.apache.commons.lang3.text and the 109 org.apache.commons.lang3.text.translate packages 110o org.apache.commons.lang3.StringEscapeUtils 111o org.apache.commons.lang3.RandomStringUtils 112o The methods org.apache.commons.lang3.StringUtils.getJaroWinklerDistance and 113 org.apache.commons.lang3.StringUtils.getLevenshteinDistance 114 115For more information see the Commons Text website: 116 117 https://commons.apache.org/text 118 119The class org.apache.commons.lang3.CharEncoding has been deprecated in favor of 120java.nio.charset.StandardCharsets. 121 122The following methods have been deprecated in 123org.apache.commons.lang3.ArrayUtils in favor of the corresponding insert 124methods. Note that the handling for null inputs differs between add and insert. 125 126o add(boolean[], int, boolean) -> insert(int, boolean[], boolean...) 127o add(byte[], int, boolean) -> insert(int, byte[], byte...) 128o add(char[], int, boolean) -> insert(int, char[], char...) 129o add(double[], int, boolean) -> insert(int, double[], double...) 130o add(float[], int, boolean) -> insert(int, float[], float...) 131o add(int[], int, boolean) -> insert(int, int[], int...) 132o add(long[], int, boolean) -> insert(int, long[], long...) 133o add(short[], int, boolean) -> insert(int, short[], short...) 134o add(T[], int, boolean) -> insert(int, T[], T...) 135 136 137COMPATIBILITY WITH JAVA 9 138================== 139 140The MANIFEST.MF now contains an additional entry: 141 142 Automatic-Module-Name: org.apache.commons.lang3 143 144This should make it possible to use Commons Lang 3.6 as a module in the Java 9 145module system. For more information see the corresponding issue and the 146referenced mailing list discussions: 147 148 https://issues.apache.org/jira/browse/LANG-1338 149 150The build problems present in the 3.5 release have been resolved. Building 151Commons Lang 3.6 should work out of the box with the latest Java 9 EA build. 152Please report any Java 9 related issues at: 153 154 https://issues.apache.org/jira/browse/LANG 155 156NEW FEATURES 157============ 158 159o LANG-1336: Add NUL Byte To CharUtils. Thanks to Beluga Behr. 160o LANG-1304: Add method in StringUtils to determine if string contains both 161 mixed cased characters. Thanks to Andy Klimczak. 162o LANG-1325: Increase test coverage of ToStringBuilder class to 100%. 163 Thanks to Arshad Basha. 164o LANG-1307: Add a method in StringUtils to extract only digits out of input 165 string. Thanks to Arshad Basha. 166o LANG-1256: Add JMH maven dependencies. Thanks to C0rWin. 167o LANG-1167: Add null filter to ReflectionToStringBuilder. 168 Thanks to Mark Dacek. 169o LANG-1299: Add method for converting string to an array of code points. 170o LANG-660: Add methods to insert arrays into arrays at an index. 171o LANG-1034: Add support for recursive comparison to 172 EqualsBuilder#reflectionEquals. Thanks to Yathos UG. 173o LANG-1067: Add a reflection-based variant of DiffBuilder. 174o LANG-740: Implementation of a Memoizer. Thanks to James Sawle. 175o LANG-1258: Add ArrayUtils#toStringArray method. 176 Thanks to IG, Grzegorz Rożniecki. 177o LANG-1160: StringUtils#abbreviate should support 'custom ellipses' parameter. 178o LANG-1293: Add StringUtils#isAllEmpty and #isAllBlank methods. 179 Thanks to Pierre Templier, Martin Tarjanyi. 180o LANG-1313: Add ArchUtils - An utility class for the "os.arch" system property. 181 Thanks to Tomschi. 182o LANG-1272: Add shuffle methods to ArrayUtils. 183o LANG-1317: Add MethodUtils#findAnnotation and extend 184 MethodUtils#getMethodsWithAnnotation for non-public, super-class 185 and interface methods. Thanks to Yasser Zamani. 186o LANG-1331: Add ImmutablePair.nullPair(). 187o LANG-1332: Add ImmutableTriple.nullTriple(). 188 189FIXED BUGS 190========== 191 192o LANG-1337: Fix test failures in IBM JDK 8 for ToStringBuilderTest. 193o LANG-1319: MultilineRecursiveToStringStyle StackOverflowError when object is 194 an array. 195o LANG-1320: LocaleUtils#toLocale does not support language followed by UN M.49 196 numeric-3 area code followed by variant. 197o LANG-1300: Clarify or improve behavior of int-based indexOf methods in 198 StringUtils. Thanks to Mark Dacek. 199o LANG-1286: RandomStringUtils random method can overflow and return characters 200 outside of specified range. 201o LANG-1292: WordUtils.wrap throws StringIndexOutOfBoundsException. 202o LANG-1287: RandomStringUtils#random can enter infinite loop if end parameter 203 is to small. Thanks to Ivan Morozov. 204o LANG-1285: NullPointerException in FastDateParser$TimeZoneStrategy. 205 Thanks to Francesco Chicchiriccò. 206o LANG-1281: Javadoc of StringUtils.ordinalIndexOf is contradictory. 207 Thanks to Andreas Lundblad. 208o LANG-1188: StringUtils#join(T...): warning: [unchecked] Possible heap 209 pollution from parameterized vararg type T. 210o LANG-1144: Multiple calls of 211 org.apache.commons.lang3.concurrent.LazyInitializer.initialize() 212 are possible. Thanks to Waldemar Maier, Gary Gregory. 213o LANG-1276: StrBuilder#replaceAll ArrayIndexOutOfBoundsException. 214 Thanks to Andy Klimczak. 215o LANG-1278: BooleanUtils javadoc issues. Thanks to Duke Yin. 216o LANG-1070: ArrayUtils#add confusing example in javadoc. 217 Thanks to Paul Pogonyshev. 218o LANG-1271: StringUtils#isAnyEmpty and #isAnyBlank should return false for an 219 empty array. Thanks to Pierre Templier. 220o LANG-1155: Add StringUtils#unwrap. Thanks to Saif Asif, Thiago Andrade. 221o LANG-1311: TypeUtils.toString() doesn't handle primitive and Object arrays 222 correctly. Thanks to Aaron Digulla. 223o LANG-1312: LocaleUtils#toLocale does not support language followed by UN M.49 224 numeric-3 area code. 225o LANG-1265: Build failures when building with Java 9 EA. 226o LANG-1314: javadoc creation broken with Java 8. Thanks to Allon Murienik. 227o LANG-1310: MethodUtils.invokeMethod throws ArrayStoreException if using 228 varargs arguments and smaller types than the method defines. 229 Thanks to Don Jeba. 230 231CHANGES 232======= 233 234o LANG-1338: Add Automatic-Module-Name MANIFEST entry for Java 9 235 compatibility. 236o LANG-1334: Deprecate CharEncoding in favour of 237 java.nio.charset.StandardCharsets. 238o LANG-1110: Implement HashSetvBitSetTest using JMH. 239 Thanks to Bruno P. Kinoshita. 240o LANG-1290: Increase test coverage of org.apache.commons.lang3.ArrayUtils. 241 Thanks to Andrii Abramov. 242o LANG-1274: StrSubstitutor should state its thread safety. 243o LANG-1277: StringUtils#getLevenshteinDistance reduce memory consumption. 244 Thanks to yufcuy. 245o LANG-1279: Update Java requirement from Java 6 to 7. 246o LANG-1143: StringUtils should use toXxxxCase(int) rather than 247 toXxxxCase(char). Thanks to sebb. 248o LANG-1297: Add SystemUtils.getHostName() API. 249o LANG-1301: Moving apache-rat-plugin configuration into pluginManagement. 250 Thanks to Karl Heinz Marbaise. 251o LANG-1316: Deprecate classes/methods moved to commons-text. 252 253============================================================================= 254 255 Release Notes for version 3.5 256 257 258HIGHLIGHTS 259========== 260 261Some of the highlights in this release include: 262 263o Added Java 9 detection to org.apache.commons.lang3.SystemUtils. 264o Support for shifting and swapping elements in 265 org.apache.commons.lang3.ArrayUtils. 266o New methods for generating random strings from different character classes 267 including alphabetic, alpha-numeric and ASCII added to 268 org.apache.commons.lang3.RandomStringUtils. 269o Numerous extensions to org.apache.commons.lang3.StringUtils including 270 null safe compare variants, more remove and replace variants, rotation and 271 truncation. 272o Added org.apache.commons.lang3.ThreadUtils - a utility class to work with 273 instances of java.lang.Thread and java.lang.ThreadGroup. 274o Added annotations @EqualsExclude, @HashCodeExclude and @ToStringExclude to 275 mark fields which should be ignored by the reflective builders in the 276 org.apache.commons.lang3.builder package. 277o Support for various modify and retrieve value use cases added to the classes 278 in org.apache.commons.lang3.mutable. 279 280COMPATIBILITY 281============= 282 283Apache Commons Lang 3.5 is binary compatible with the 3.4 release. Users 284should not experience any problems when upgrading from 3.4 to 3.5. 285 286There has been an addition to the org.apache.commons.lang3.time.DatePrinter 287interface: 288 289o Added method 'public boolean parse(java.lang.String, java.text.ParsePosition, 290 java.util.Calendar)' 291o Added method 'public java.lang.Appendable format(long, java.lang.Appendable)' 292o Added method 'public java.lang.Appendable format(java.util.Date, 293 java.lang.Appendable)' 294o Added method 'public java.lang.Appendable format(java.util.Calendar, 295 java.lang.Appendable)' 296 297For this reason 3.5 is not strictly source compatible to 3.4. Since the 298DatePrinter interface is not meant to be implemented by clients, this 299change it not considered to cause any problems. 300 301JAVA 9 SUPPORT 302============== 303 304Java 9 introduces a new version-string scheme. Details of this new scheme are 305documented in JEP-223 (https://openjdk.org/jeps/223). In order to support 306JEP-223 two classes had to be changed: 307 308o org.apache.commons.lang3.JavaVersion 309 deprecated enum constant JAVA_1_9 310 introduced enum constant JAVA_9 311 312o org.apache.commons.lang3.SystemUtils 313 deprecated constant IS_JAVA_1_9 314 introduced constant IS_JAVA_9 315 316For more information see LANG-1197 317(https://issues.apache.org/jira/browse/LANG-1197). All other APIs are expected 318to work with Java 9. 319 320BUILDING ON JAVA 9 321================== 322 323Java 8 introduced the Unicode Consortium's Common Locale Data Repository as 324alternative source for locale data. Java 9 will use the CLDR provider as 325default provider for locale data (see https://openjdk.org/jeps/252). This 326causes an number of locale-sensitive test in Commons Lang to fail. In order 327to build Commons Lang 3.5 on Java 9, the locale provider has to be set to 328'JRE': 329 330 mvn -Djava.locale.providers=JRE clean install 331 332We are currently investigating ways to support building on Java 9 without 333further configuration. For more information see: 334https://issues.apache.org/jira/browse/LANG-1265 335 336 337NEW FEATURES 338============== 339 340o LANG-1275: Added a tryAcquire() method to TimedSemaphore. 341o LANG-1255: Add DateUtils.toCalendar(Date, TimeZone). Thanks to Kaiyuan Wang. 342o LANG-1023: Add WordUtils.wrap overload with customizable breakable character. 343 Thanks to Marko Bekhta. 344o LANG-787: Add method removeIgnoreCase(String, String) to StringUtils. Thanks 345 to Gokul Nanthakumar C. 346o LANG-1224: Extend RandomStringUtils with methods that generate strings 347 between a min and max length. Thanks to Caleb Cushing. 348o LANG-1257: Add APIs StringUtils.wrapIfMissing(String, char|String). Thanks to 349 Gary Gregory. 350o LANG-1253: Add RandomUtils#nextBoolean() method. Thanks to adilek. 351o LANG-1085: Add a circuit breaker implementation. Thanks to Oliver Heger and 352 Bruno P. Kinoshita. 353o LANG-1013: Add StringUtils.truncate(). Thanks to Thiago Andrade. 354o LANG-1195: Enhance MethodUtils to allow invocation of private methods. Thanks 355 to Derek C. Ashmore. 356o LANG-1189: Add getAndIncrement/getAndDecrement/getAndAdd/incrementAndGet/ 357 decrementAndGet/addAndGet in Mutable* classes. Thanks to 358 Haiyang Li and Matthew Bartenschlag. 359o LANG-1225: Add RandomStringUtils#randomGraph and #randomPrint which match 360 corresponding regular expression class. Thanks to Caleb Cushing. 361o LANG-1223: Add StopWatch#getTime(TimeUnit). Thanks to Nick Manley. 362o LANG-781: Add methods to ObjectUtils class to check for null elements in the 363 array. Thanks to Krzysztof Wolny. 364o LANG-1228: Prefer Throwable.getCause() in ExceptionUtils.getCause(). 365 Thanks to Brad Hess. 366o LANG-1233: DiffBuilder add method to allow appending from a DiffResult. 367 Thanks to Nick Manley. 368o LANG-1168: Add SystemUtils.IS_OS_WINDOWS_10 property. 369 Thanks to Pascal Schumacher. 370o LANG-1115: Add support for varargs in ConstructorUtils, MemberUtils, and 371 MethodUtils. Thanks to Jim Lloyd and Joe Ferner. 372o LANG-1134: Add methods to check numbers against NaN and infinite to 373 Validate. Thanks to Alan Smithee. 374o LANG-1220: Add tests for missed branches in DateUtils. 375 Thanks to Casey Scarborough. 376o LANG-1146: z/OS identification in SystemUtils. 377 Thanks to Gabor Liptak. 378o LANG-1192: FastDateFormat support of the week-year component (uppercase 'Y'). 379 Thanks to Dominik Stadler. 380o LANG-1169: Add StringUtils methods to compare a string to multiple strings. 381 Thanks to Rafal Glowinski, Robert Parr and Arman Sharif. 382o LANG-1185: Add remove by regular expression methods in StringUtils. 383o LANG-1139: Add replace by regular expression methods in StringUtils. 384o LANG-1171: Add compare methods in StringUtils. 385o LANG-1174: Add sugar to RandomUtils. Thanks to Punkratz312. 386o LANG-1154: FastDateFormat APIs that use a StringBuilder. Thanks to 387 Gary Gregory. 388o LANG-1149: Ability to throw checked exceptions without declaring them. Thanks 389 to Gregory Zak. 390o LANG-1153: Implement ParsePosition api for FastDateParser. 391o LANG-1137: Add check for duplicate event listener in EventListenerSupport. 392 Thanks to Matthew Aguirre. 393o LANG-1135: Add method containsAllWords to WordUtils. Thanks to 394 Eduardo Martins. 395o LANG-1132: ReflectionToStringBuilder doesn't throw IllegalArgumentException 396 when the constructor's object param is null. Thanks to Jack Tan. 397o LANG-701: StringUtils join with var args. Thanks to James Sawle. 398o LANG-1105: Add ThreadUtils - A utility class which provides helper methods 399 related to java.lang.Thread Issue: LANG-1105. Thanks to 400 Hendrik Saly. 401o LANG-1031: Add annotations to exclude fields from ReflectionEqualsBuilder, 402 ReflectionToStringBuilder and ReflectionHashCodeBuilder. Thanks 403 to Felipe Adorno. 404o LANG-1127: Use JUnit rules to set and reset the default Locale and TimeZone. 405o LANG-1119: Add rotate(string, int) method to StringUtils. Thanks to 406 Loic Guibert. 407o LANG-1099: Add swap and shift operations for arrays to ArrayUtils. Thanks to 408 Adrian Ber. 409o LANG-1050: Change nullToEmpty methods to generics. Thanks to James Sawle. 410o LANG-1074: Add a method to ArrayUtils for removing all occurrences of a given 411 element Issue: LANG-1074. Thanks to Haiyang Li. 412 413FIXED BUGS 414============ 415 416o LANG-1261: ArrayUtils.contains returns false for instances of subtypes. 417o LANG-1252: Rename NumberUtils.isNumber, isCreatable to better reflect 418 createNumber. Also, accommodated for "+" symbol as prefix in 419 isCreatable and isNumber. Thanks to Rob Tompkins. 420o LANG-1230: Remove unnecessary synchronization from registry lookup in 421 EqualsBuilder and HashCodeBuilder. Thanks to Philippe Marschall. 422o LANG-1214: Handle "void" in ClassUtils.getClass(). Thanks to Henry Tung. 423o LANG-1250: SerializationUtils#deserialize has unnecessary code and a comment 424 for that. Thanks to Glease Wang. 425o LANG-1190: TypeUtils.isAssignable throws NullPointerException when fromType 426 has type variables and toType generic superclass specifies type 427 variable. Thanks to Pascal Schumacher. 428o LANG-1226: StringUtils#normalizeSpace does not trim the string anymore. 429 Thanks to Pascal Schumacher. 430o LANG-1251: SerializationUtils.ClassLoaderAwareObjectInputStream should use 431 static initializer to initialize primitiveTypes map. Thanks to 432 Takuya Ueshin. 433o LANG-1248: FastDatePrinter Memory allocation regression. Thanks to 434 Benoit Wiart. 435o LANG-1018: Fix precision loss on NumberUtils.createNumber(String). Thanks to 436 Nick Manley. 437o LANG-1199: Fix implementation of StringUtils.getJaroWinklerDistance(). Thanks 438 to M. Steiger. 439o LANG-1244: Fix dead links in StringUtils.getLevenshteinDistance() javadoc. 440 Thanks to jjbankert. 441o LANG-1242: "\u2284":"?" mapping missing from 442 EntityArrays#HTML40_EXTENDED_ESCAPE. Thanks to Neal Stewart. 443o LANG-901: StringUtils#startsWithAny/endsWithAny is case sensitive - 444 documented as case insensitive. Thanks to Matthew Bartenschlag. 445o LANG-1232: DiffBuilder: Add null check on fieldName when appending Object or 446 Object[]. Thanks to Nick Manley. 447o LANG-1178: ArrayUtils.removeAll(Object array, int... indices) should do the 448 clone, not its callers. Thanks to Henri Yandell. 449o LANG-1120: StringUtils.stripAccents should remove accents from "Ł" and "ł". 450 Thanks to kaching88. 451o LANG-1205: NumberUtils.createNumber() behaves inconsistently with 452 NumberUtils.isNumber(). Thanks to pbrose. 453o LANG-1222: Fix for incorrect comment on StringUtils.containsIgnoreCase 454 method. Thanks to Adam J. 455o LANG-1221: Fix typo on appendIfMissing javadoc. Thanks to Pierre Templier. 456o LANG-1202: parseDateStrictly doesn't pass specified locale. Thanks to 457 Markus Jelsma. 458o LANG-1219: FastDateFormat doesn't respect summer daylight in some localized 459 strings. Thanks to Jarek. 460o LANG-1175: Remove Ant-based build. 461o LANG-1194: Limit max heap memory for consistent Travis CI build. 462o LANG-1186: Fix NullPointerException in FastDateParser$TimeZoneStrategy. 463 Thanks to NickManley. 464o LANG-1193: ordinalIndexOf("abc", "ab", 1) gives incorrect answer of -1 465 (correct answer should be 0); revert fix for LANG-1077. Thanks to 466 Qin Li. 467o LANG-1002: Several predefined ISO FastDateFormats in DateFormatUtils are 468 incorrect. Thanks to Michael Osipov. 469o LANG-1152: StringIndexOutOfBoundsException or field over-write for large year 470 fields in FastDateParser. Thanks to Pas Filip. 471o LANG-1141: StrLookup.systemPropertiesLookup() no longer reacts on changes on 472 system properties. 473o LANG-1147: EnumUtils *BitVector issue with more than 32 values Enum. Thanks 474 to Loic Guibert. 475o LANG-1059: Capitalize javadoc is incorrect. Thanks to Colin Casey. 476o LANG-1122: Inconsistent behavior of swap for malformed inputs. Thanks to 477 Adrian Ber. 478o LANG-1130: Fix critical issues reported by SonarQube. 479o LANG-1131: StrBuilder.equals(StrBuilder) doesn't check for null inputs. 480o LANG-1128: JsonToStringStyle doesn't handle chars and objects correctly. 481 Thanks to Jack Tan. 482o LANG-1126: DateFormatUtilsTest.testSMTP depends on the default Locale. 483o LANG-1123: Unit test FastDatePrinterTimeZonesTest needs a timezone set. 484 Thanks to Christian P. Momon. 485o LANG-916: DateFormatUtils.format does not correctly change Calendar 486 TimeZone in certain situations. Thanks to Christian P. Momon. 487o LANG-1116: DateUtilsTest.testLang530 fails for some timezones. Thanks to 488 Aaron Sheldon. 489o LANG-1114: TypeUtils.ParameterizedType#equals doesn't work with wildcard 490 types. Thanks to Andy Coates. 491o LANG-1118: StringUtils.repeat('z', -1) throws NegativeArraySizeException. 492 Thanks to Loic Guibert. 493o LANG-1111: Fix FindBugs warnings in DurationFormatUtils. 494o LANG-1162: StringUtils#equals fails with Index OOBE on non-Strings with 495 identical leading prefix.. 496o LANG-1163: There are no tests for CharSequenceUtils.regionMatches. 497o LANG-1200: Fix Javadoc of StringUtils.ordinalIndexOf. Thanks to BarkZhang. 498o LANG-1191: Incorrect Javadoc 499 StringUtils.containsAny(CharSequence, CharSequence...). Thanks to 500 qed, Brent Worden and Gary Gregory. 501 502CHANGES 503========= 504o LANG-1197: Prepare Java 9 detection. 505o LANG-1262: CompareToBuilder.append(Object, Object, Comparator) method is too 506 big to be inlined. Thanks to Ruslan Cheremin. 507o LANG-1259: Javadoc for ArrayUtils.isNotEmpty() is slightly misleading. Thanks 508 to Dominik Stadler. 509o LANG-1247: FastDatePrinter generates extra Date objects. Thanks to 510 Benoit Wiart. 511o LANG-1229: HashCodeBuilder.append(Object,Object) is too big to be inlined, 512 which prevents whole builder to be scalarized. Thanks to 513 Ruslan Cheremin. 514o LANG-1243: Simplify ArrayUtils removeElements by using new decrementAndGet() 515 method. 516o LANG-1240: Optimize BitField constructor implementation. Thanks to zhanhb. 517o LANG-1206: Improve CharSetUtils.squeeze() performance. Thanks to 518 Mohammed Alfallaj. 519o LANG-1176: Improve ArrayUtils removeElements time complexity to O(n). Thanks 520 to Jeffery Yuan. 521o LANG-1234: getLevenshteinDistance with a threshold: optimize implementation 522 if the strings lengths differ more than the threshold. Thanks to 523 Jonatan Jönsson. 524o LANG-1151: Performance improvements for NumberUtils.isParsable. Thanks to 525 Juan Pablo Santos Rodríguez. 526o LANG-1218: EqualsBuilder.append(Object,Object) is too big to be inlined, 527 which prevents whole builder to be scalarized. Thanks to 528 Ruslan Cheremin. 529o LANG-1210: StringUtils#startsWithAny has error in Javadoc. Thanks to 530 Matthias Niehoff. 531o LANG-1208: StrSubstitutor can preserve escapes. Thanks to Samuel Karp. 532o LANG-1182: Clarify Javadoc of StringUtils.containsAny(). Thanks to 533 Larry West and Pascal Schumacher. 534o LANG-1183: Making replacePattern/removePattern methods null safe in 535 StringUtils. 536o LANG-1057: Replace StringBuilder with String concatenation for better 537 optimization. Thanks to Otávio Santana. 538o LANG-1075: Deprecate SystemUtils.FILE_SEPARATOR and 539 SystemUtils.PATH_SEPARATOR. 540o LANG-979: TypeUtils.parameterizeWithOwner - wrong format descriptor for 541 "invalid number of type parameters". Thanks to Bruno P. Kinoshita. 542o LANG-1112: MultilineRecursiveToStringStyle largely unusable due to being 543 package-private. 544o LANG-1058: StringUtils.uncapitalize performance improvement. Thanks to 545 Leo Wang. 546o LANG-1069: CharSet.getInstance documentation does not clearly explain how 547 to include negation character in set. Thanks to Arno Noordover. 548o LANG-1107: Fix parsing edge cases in FastDateParser. 549o LANG-1273: Added new property IS_OS_MAC_OSX_EL_CAPITAN in SystemUtils. Thanks 550 to Jake Wang. 551 552============================================================================= 553 554 Release Notes for version 3.4 555 556 557COMPATIBILITY 558============= 559 560Commons Lang 3.4 is fully binary compatible to the last release and can 561therefore be used as a drop in replacement for 3.3.2. Note that the value of 562org.apache.commons.lang3.time.DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN 563has changed, which may affect clients using the constant. Furthermore the 564constant is used internally in 565o DurationFormatUtils.formatDurationISO(long) 566o DurationFormatUtils.formatPeriodISO(long, long) 567 568For more information see https://issues.apache.org/jira/browse/LANG-1000. 569 570NEW FEATURES 571============== 572 573o LANG-821: Support OS X versions in SystemUtils. Thanks to Timo Kockert. 574o LANG-1103: Add SystemUtils.IS_JAVA_1_9 575o LANG-1093: Add ClassUtils.getAbbreviatedName(). Thanks to Fabian Lange. 576o LANG-1082: Add option to disable the "objectsTriviallyEqual" test in 577 DiffBuilder. Thanks to Jonathan Baker. 578o LANG-1015: Add JsonToStringStyle implementation to ToStringStyle. Thanks to 579 Thiago Andrade. 580o LANG-1080: Add NoClassNameToStringStyle implementation of ToStringStyle. 581 Thanks to Innokenty Shuvalov. 582o LANG-883: Add StringUtils.containsAny(CharSequence, CharSequence...) method. 583 Thanks to Daniel Stewart. 584o LANG-1052: Multiline recursive to string style. Thanks to Jan Matèrne. 585o LANG-536: Add isSorted() to ArrayUtils. Thanks to James Sawle. 586o LANG-1033: Add StringUtils.countMatches(CharSequence, char) 587o LANG-1021: Provide methods to retrieve all fields/methods annotated with a 588 specific type. Thanks to Alexander Müller. 589o LANG-1016: NumberUtils#isParsable method(s). Thanks to 590 Juan Pablo Santos Rodríguez. 591o LANG-999: Add fuzzy String matching logic to StringUtils. Thanks to 592 Ben Ripkens. 593o LANG-994: Add zero copy read method to StrBuilder. Thanks to 594 Mikhail Mazursky. 595o LANG-993: Add zero copy write method to StrBuilder. Thanks to 596 Mikhail Mazursky. 597o LANG-1044: Add method MethodUtils.invokeExactMethod(Object, String) 598o LANG-1045: Add method MethodUtils.invokeMethod(Object, String) 599 600FIXED BUGS 601============ 602 603o LANG-794: SystemUtils.IS_OS_WINDOWS_2008, VISTA are incorrect. Thanks to 604 Timo Kockert. 605o LANG-1104: Parse test fails for TimeZone America/Sao_Paulo 606o LANG-948: Exception while using ExtendedMessageFormat and escaping braces. 607 Thanks to Andrey Khobnya. 608o LANG-1092: Wrong formatting of time zones with daylight saving time in 609 FastDatePrinter 610o LANG-1090: FastDateParser does not set error indication in ParsePosition 611o LANG-1089: FastDateParser does not handle excess hours as per 612 SimpleDateFormat 613o LANG-1061: FastDateParser error - timezones not handled correctly. Thanks to 614 dmeneses. 615o LANG-1087: NumberUtils#createNumber() returns positive BigDecimal when 616 negative Float is expected. Thanks to Renat Zhilkibaev. 617o LANG-1081: DiffBuilder.append(String, Object left, Object right) does not do 618 a left.equals(right) check. Thanks to Jonathan Baker. 619o LANG-1055: StrSubstitutor.replaceSystemProperties does not work consistently. 620 Thanks to Jonathan Baker. 621o LANG-1083: Add (T) casts to get unit tests to pass in old JDK. Thanks to 622 Jonathan Baker. 623o LANG-1073: Read wrong component type of array in add in ArrayUtils. 624 Thanks to haiyang li. 625o LANG-1077: StringUtils.ordinalIndexOf("aaaaaa", "aa", 2) != 3 in StringUtils. 626 Thanks to haiyang li. 627o LANG-1072: Duplicated "0x" check in createBigInteger in NumberUtils. Thanks 628 to haiyang li. 629o LANG-1064: StringUtils.abbreviate description doesn't agree with the 630 examples. Thanks to B.J. Herbison. 631o LANG-1041: Fix MethodUtilsTest so it does not depend on JDK method ordering. 632 Thanks to Alexandre Bartel. 633o LANG-1000: ParseException when trying to parse UTC dates with Z as zone 634 designator using DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT 635o LANG-1035: Javadoc for EqualsBuilder.reflectionEquals() is unclear 636o LANG-1001: ISO 8601 misspelled throughout the Javadocs. Thanks to 637 Michael Osipov. 638o LANG-1088: FastDateParser should be case insensitive 639o LANG-995: Fix bug with stripping spaces on last line in WordUtils.wrap(). 640 Thanks to Andrey Khobnya. 641 642CHANGES 643========= 644 645o LANG-1102: Make logic for comparing OS versions in SystemUtils smarter 646o LANG-1091: Shutdown thread pools in test cases. Thanks to Fabian Lange. 647o LANG-1101: FastDateParser and FastDatePrinter support 'X' format 648o LANG-1100: Avoid memory allocation when using date formatting to StringBuffer. 649 Thanks to mbracher. 650o LANG-935: Possible performance improvement on string escape functions. 651 Thanks to Fabian Lange, Thomas Neidhart. 652o LANG-1098: Avoid String allocation in StrBuilder.append(CharSequence). Thanks 653 to Mikhail Mazurskiy, Fabian Lange. 654o LANG-1098: Update maven-checkstyle-plugin to 2.14. Thanks to Micha? Kordas. 655o LANG-1097: Update org.easymock:easymock to 3.3.1. Thanks to Micha? Kordas. 656o LANG-1096: Update maven-pmd-plugin to 3.4. Thanks to Micha? Kordas. 657o LANG-1095: Update maven-antrun-plugin to 1.8. Thanks to Micha? Kordas. 658o LANG-877: Performance improvements for StringEscapeUtils. Thanks to 659 Fabian Lange. 660o LANG-1071: Fix wrong examples in Javadoc of 661 StringUtils.replaceEachRepeatedly(...), 662 StringUtils.replaceEach(...) Thanks to Arno Noordover. 663o LANG-827: CompareToBuilder's doc doesn't specify precedence of fields it 664 uses in performing comparisons 665o LANG-1020: Improve performance of normalize space. Thanks to Libor Ondrusek. 666o LANG-1027: org.apache.commons.lang3.SystemUtils#isJavaVersionAtLeast should 667 return true by default 668o LANG-1026: Bring static method references in StringUtils to consistent style. 669 Thanks to Alex Yursha. 670o LANG-1017: Use non-ASCII digits in Javadoc examples for 671 StringUtils.isNumeric. Thanks to Christoph Schneegans. 672o LANG-1008: Change min/max methods in NumberUtils/IEEE754rUtils from array 673 input parameters to varargs. Thanks to Thiago Andrade. 674o LANG-1006: Add wrap (with String or char) to StringUtils. Thanks to 675 Thiago Andrade. 676o LANG-1005: Extend DurationFormatUtils#formatDurationISO default pattern to 677 match #formatDurationHMS. Thanks to Michael Osipov. 678o LANG-1007: Fixing NumberUtils JAVADoc comments for max methods. Thanks to 679 Thiago Andrade. 680o LANG-731: Better Javadoc for BitField class 681o LANG-1004: DurationFormatUtils#formatDurationHMS implementation does not 682 correspond to Javadoc and vice versa. Thanks to Michael Osipov. 683o LANG-1003: DurationFormatUtils are not able to handle negative 684 durations/periods 685o LANG-998: Javadoc is not clear on preferred pattern to instantiate 686 FastDateParser / FastDatePrinter 687 688============================================================================= 689 690 Release Notes for version 3.3.2 691 692NEW FEATURES 693============== 694 695o LANG-989: Add org.apache.commons.lang3.SystemUtils.IS_JAVA_1_8 696 697FIXED BUGS 698============ 699 700o LANG-992: NumberUtils#isNumber() returns false for "0.0", "0.4790", et al 701 702============================================================================= 703 704 Release Notes for version 3.3.1 705 706FIXED BUGS 707============ 708 709o LANG-987: DateUtils.getFragmentInDays(Date, Calendar.MONTH) returns wrong 710 days 711o LANG-983: DurationFormatUtils does not describe format string fully 712o LANG-981: DurationFormatUtils#lexx does not detect unmatched quote char 713o LANG-984: DurationFormatUtils does not handle large durations correctly 714o LANG-982: DurationFormatUtils.formatDuration(61999, "s.SSSS") - ms field 715 size should be 4 digits 716o LANG-978: Failing tests with Java 8 b128 717 718============================================================================= 719 720 Release Notes for version 3.3 721 722NEW FEATURES 723============== 724 725o LANG-955: Add methods for removing all invalid characters according to 726 XML 1.0 and XML 1.1 in an input string to StringEscapeUtils. 727 Thanks to Adam Hooper. 728o LANG-970: Add APIs MutableBoolean setTrue() and setFalse() 729o LANG-962: Add SerializationUtils.roundtrip(T extends Serializable) to 730 serialize then deserialize 731o LANG-637: There should be a DifferenceBuilder with a 732 ReflectionDifferenceBuilder implementation 733o LANG-944: Add the Jaro-Winkler string distance algorithm to StringUtils. 734 Thanks to Rekha Joshi. 735o LANG-417: New class ClassPathUtils with methods for turning FQN into 736 resource path 737o LANG-834: Validate: add inclusiveBetween and exclusiveBetween overloads 738 for primitive types 739o LANG-900: New RandomUtils class. Thanks to Duncan Jones. 740o LANG-966: Add IBM OS/400 detection 741 742FIXED BUGS 743============ 744 745o LANG-621: ReflectionToStringBuilder.toString does not debug 3rd party object 746 fields within 3rd party object. Thanks to Philip Hodges, 747 Thomas Neidhart. 748o LANG-977: NumericEntityEscaper incorrectly encodes supplementary characters. 749 Thanks to Chris Karcher. 750o LANG-973: Make some private fields final 751o LANG-971: NumberUtils#isNumber(String) fails to reject invalid Octal numbers 752o LANG-972: NumberUtils#isNumber does not allow for hex 0XABCD 753o LANG-969: StringUtils.toEncodedString(byte[], Charset) needlessly throws 754 UnsupportedEncodingException. Thanks to Matt Bishop. 755o LANG-946: ConstantInitializerTest fails when building with IBM JDK 7 756o LANG-954: uncaught PatternSyntaxException in FastDateFormat on Android. 757 Thanks to Michael Keppler. 758o LANG-936: StringUtils.getLevenshteinDistance with too big of a threshold 759 returns wrong result. Thanks to Yaniv Kunda, Eli Lindsey. 760o LANG-943: Test DurationFormatUtilsTest.testEdgeDuration fails in 761 JDK 1.6, 1.7 and 1.8, BRST time zone 762o LANG-613: ConstructorUtils.getAccessibleConstructor() Does Not Check the 763 Accessibility of Enclosing Classes 764o LANG-951: Fragments are wrong by 1 day when using fragment YEAR or MONTH. 765 Thanks to Sebastian Götz. 766o LANG-950: FastDateParser does not handle two digit year parsing like 767 SimpleDateFormat 768o LANG-949: FastDateParserTest.testParses does not test FastDateParser 769o LANG-915: Wrong locale handling in LocaleUtils.toLocale(). 770 Thanks to Sergio Fernández. 771 772CHANGES 773========= 774 775o LANG-961: org.apache.commons.lang3.reflect.FieldUtils.removeFinalModifier(Field) 776 does not clean up after itself 777o LANG-958: FastDateParser javadoc incorrectly states that SimpleDateFormat 778 is used internally 779o LANG-956: Improve Javadoc of WordUtils.wrap methods 780o LANG-939: Move Documentation from user guide to package-info files 781o LANG-953: Convert package.html files to package-info.java files 782o LANG-940: Fix deprecation warnings 783o LANG-819: EnumUtils.generateBitVector needs a "? extends" 784 785============================================================================= 786 787 Release Notes for version 3.2.1 788 789BUG FIXES 790=========== 791 792o LANG-937: Fix missing Hamcrest dependency in Ant Build 793o LANG-941: Test failure in LocaleUtilsTest when building with JDK 8 794o LANG-942: Test failure in FastDateParserTest and FastDateFormat_ParserTest 795 when building with JDK8. Thanks to Bruno P. Kinoshita, 796 Henri Yandell. 797o LANG-938: Build fails with test failures when building with JDK 8 798 799============================================================================= 800 801 Release Notes for version 3.2 802 803COMPATIBILITY WITH 3.1 804======================== 805 806This release introduces backwards incompatible changes in 807org.apache.commons.lang3.time.FastDateFormat: 808o Method 'protected java.util.List parsePattern()' has been removed 809o Method 'protected java.lang.String parseToken(java.lang.String, int[])' has 810 been removed 811o Method 'protected org.apache.commons.lang3.time.FastDateFormat$NumberRule 812 selectNumberRule(int, int)' has been removed 813 814These changes were the result of [LANG-462]. It is assumed that this change 815will not break clients as Charles Honton pointed out on 25/Jan/12: 816" 817 1. Methods "FastDateFormat$NumberRule selectNumberRule(int, int)" and 818 "List<Rule> parsePattern()" couldn't have been overridden because 819 NumberRule and Rule were private to FastDateFormat. 820 2. Due to the factory pattern used, it's unlikely other two methods would have 821 been overridden. 822 3. The four methods are highly implementation specific. I consider it a 823 mistake that the methods were exposed. 824" 825For more information see https://issues.apache.org/jira/browse/LANG-462. 826 827NEW FEATURES 828============== 829 830o LANG-934: Add removeFinalModifier to FieldUtils 831o LANG-863: Method returns number of inheritance hops between parent and 832 subclass. Thanks to Daneel S. Yaitskov. 833o LANG-774: Added isStarted, isSuspended and isStopped to StopWatch. 834 Thanks to Erhan Bagdemir. 835o LANG-848: Added StringUtils.isBlank/isEmpty CharSequence... methods. 836 Thanks to Alexander Muthmann. 837o LANG-926: Added ArrayUtils.reverse(array, from, to) methods. 838o LANG-795: StringUtils.toString(byte[], String) deprecated in favour of a new 839 StringUtils.toString(byte[], CharSet). Thanks to Aaron Digulla. 840o LANG-893: StrSubstitutor now supports default values for variables. 841 Thanks to Woonsan Ko. 842o LANG-913: Adding .gitignore to commons-lang. Thanks to Allon Mureinik. 843o LANG-837: Add ObjectUtils.toIdentityString methods that support 844 StringBuilder, StrBuilder, and Appendable. 845o LANG-886: Added CharSetUtils.containsAny(String, String). 846o LANG-797: Added escape/unescapeJson to StringEscapeUtils. 847o LANG-875: Added appendIfMissing and prependIfMissing methods to StringUtils. 848o LANG-870: Add StringUtils.LF and StringUtils.CR values. 849o LANG-873: Add FieldUtils getAllFields() to return all the fields defined in 850 the given class and super classes. 851o LANG-835: StrBuilder should support StringBuilder as an input parameter. 852o LANG-857: StringIndexOutOfBoundsException in CharSequenceTranslator. 853o LANG-856: Code refactoring in NumberUtils. 854o LANG-855: NumberUtils#createBigInteger does not allow for hex and octal 855 numbers. 856o LANG-854: NumberUtils#createNumber - does not allow for hex numbers to be 857 larger than Long. 858o LANG-853: StringUtils join APIs for primitives. 859o LANG-841: Add StringUtils API to call String.replaceAll in DOTALL a.k.a. 860 single-line mode. 861o LANG-825: Create StrBuilder APIs similar to 862 String.format(String, Object...). 863o LANG-675: Add Triple class (ternary version of Pair). 864o LANG-462: FastDateFormat supports parse methods. 865 866BUG FIXES 867=========== 868 869o LANG-932: Spelling fixes. Thanks to Ville Skyttä. 870o LANG-929: OctalUnescaper tried to parse all of \279. 871o LANG-928: OctalUnescaper had bugs when parsing octals starting with a zero. 872o LANG-905: EqualsBuilder returned true when comparing arrays, even when the 873 elements are different. 874o LANG-917: Fixed exception when combining custom and choice format in 875 ExtendedMessageFormat. Thanks to Arne Burmeister. 876o LANG-902: RandomStringUtils.random javadoc was incorrectly promising letters 877 and numbers would, as opposed to may, appear Issue:. Thanks to 878 Andrzej Winnicki. 879o LANG-921: BooleanUtils.xor(boolean...) produces wrong results. 880o LANG-896: BooleanUtils.toBoolean(String str) javadoc is not updated. Thanks 881 to Mark Bryan Yu. 882o LANG-879: LocaleUtils test fails with new Locale "ja_JP_JP_#u-ca-japanese" 883 of JDK7. 884o LANG-836: StrSubstitutor does not support StringBuilder or CharSequence. 885 Thanks to Arnaud Brunet. 886o LANG-693: Method createNumber from NumberUtils doesn't work for floating 887 point numbers other than Float Issue: LANG-693. Thanks to 888 Calvin Echols. 889o LANG-887: FastDateFormat does not use the locale specific cache correctly. 890o LANG-754: ClassUtils.getShortName(String) will now only do a reverse lookup 891 for array types. 892o LANG-881: NumberUtils.createNumber() Javadoc says it does not work for octal 893 numbers. 894o LANG-865: LocaleUtils.toLocale does not parse strings starting with an 895 underscore. 896o LANG-858: StringEscapeUtils.escapeJava() and escapeEcmaScript() do not 897 output the escaped surrogate pairs that are Java parsable. 898o LANG-849: FastDateFormat and FastDatePrinter generates Date objects 899 wastefully. 900o LANG-845: Spelling fixes. 901o LANG-844: Fix examples contained in javadoc of StringUtils.center methods. 902o LANG-832: FastDateParser does not handle unterminated quotes correctly. 903o LANG-831: FastDateParser does not handle white-space properly. 904o LANG-830: FastDateParser could use \Q \E to quote regexes. 905o LANG-828: FastDateParser does not handle non-Gregorian calendars properly. 906o LANG-826: FastDateParser does not handle non-ASCII digits correctly. 907o LANG-822: NumberUtils#createNumber - bad behavior for leading "--". 908o LANG-818: FastDateFormat's "z" pattern does not respect timezone of Calendar 909 instances passed to format(). 910o LANG-817: Add org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS_8. 911o LANG-813: StringUtils.equalsIgnoreCase doesn't check string reference 912 equality. 913o LANG-810: StringUtils.join() endIndex, bugged for loop. 914o LANG-807: RandomStringUtils throws confusing IAE when end <= start. 915o LANG-805: RandomStringUtils.random(count, 0, 0, false, false, universe, 916 random) always throws java.lang.ArrayIndexOutOfBoundsException. 917o LANG-802: LocaleUtils - unnecessary recursive call in SyncAvoid class. 918o LANG-800: Javadoc bug in DateUtils#ceiling for Calendar and Object versions. 919o LANG-788: SerializationUtils throws ClassNotFoundException when cloning 920 primitive classes. 921o LANG-786: StringUtils equals() relies on undefined behavior. 922o LANG-783: Documentation bug: StringUtils.split. 923o LANG-777: jar contains velocity template of release notes. 924o LANG-776: TypeUtilsTest contains incorrect type assignability assertion. 925o LANG-775: TypeUtils.getTypeArguments() misses type arguments for 926 partially-assigned classes. 927o LANG-773: ImmutablePair doc contains nonsense text. 928o LANG-772: ClassUtils.PACKAGE_SEPARATOR Javadoc contains garbage text. 929o LANG-765: EventListenerSupport.ProxyInvocationHandler no longer defines 930 serialVersionUID. 931o LANG-764: StrBuilder is now serializable. 932o LANG-761: Fix Javadoc Ant warnings. 933o LANG-747: NumberUtils does not handle Long Hex numbers. 934o LANG-743: Javadoc bug in static inner class DateIterator. 935 936CHANGES 937========= 938 939o LANG-931: Misleading Javadoc comment in StrBuilderReader class. Thanks 940 to Christoph Schneegans. 941o LANG-910: StringUtils.normalizeSpace now handles non-breaking spaces 942 (Unicode 00A0). Thanks to Timur Yarosh. 943o LANG-804: Redundant check for zero in HashCodeBuilder ctor. Thanks to 944 Allon Mureinik. 945o LANG-884: Simplify FastDateFormat; eliminate boxing. 946o LANG-882: LookupTranslator now works with implementations of CharSequence 947 other than String. 948o LANG-846: Provide CharSequenceUtils.regionMatches with a proper green 949 implementation instead of inefficiently converting to Strings. 950o LANG-839: ArrayUtils removeElements methods use unnecessary HashSet. 951o LANG-838: ArrayUtils removeElements methods clone temporary index arrays 952 unnecessarily. 953o LANG-799: DateUtils#parseDate uses default locale; add Locale support. 954o LANG-798: Use generics in SerializationUtils. 955 956CHANGES WITHOUT TICKET 957======================== 958 959o Fixed URLs in javadoc to point to new oracle.com pages 960 961============================================================================= 962 963 Release Notes for version 3.1 964 965NEW FEATURES 966============== 967 968o LANG-801: Add Conversion utility to convert between data types on byte level 969o LANG-760: Add API StringUtils.toString(byte[] input, String charsetName) 970o LANG-756: Add APIs ClassUtils.isPrimitiveWrapper(Class<?>) and 971 isPrimitiveOrWrapper(Class<?>) 972o LANG-695: SystemUtils.IS_OS_UNIX doesn't recognize FreeBSD as a Unix system 973 974BUG FIXES 975=========== 976 977o LANG-749: Incorrect Bundle-SymbolicName in Manifest 978o LANG-746: NumberUtils does not handle upper-case hex: 0X and -0X 979o LANG-744: StringUtils throws java.security.AccessControlException on Google 980 App Engine 981o LANG-741: Ant build has wrong component.name 982o LANG-698: Document that the Mutable numbers don't work as expected with 983 String.format 984 985CHANGES 986========= 987 988o LANG-758: Add an example with whitespace in StringUtils.defaultIfEmpty 989o LANG-752: Fix createLong() so it behaves like createInteger() 990o LANG-751: Include the actual type in the Validate.isInstance and 991 isAssignableFrom exception messages 992o LANG-748: Deprecating chomp(String, String) 993o LANG-736: CharUtils static final array CHAR_STRING is not needed to compute 994 CHAR_STRING_ARRAY 995 996============================================================================= 997 998 Release Notes for version 3.0 999 1000ADDITIONS 1001=========== 1002 1003o LANG-276: MutableBigDecimal and MutableBigInteger. 1004o LANG-285: Wish : method unaccent. 1005o LANG-358: ObjectUtils.coalesce. 1006o LANG-386: LeftOf/RightOfNumber in Range convenience methods necessary. 1007o LANG-435: Add ClassUtils.isAssignable() variants with autoboxing. 1008o LANG-444: StringUtils.emptyToNull. 1009o LANG-482: Enhance StrSubstitutor to support nested ${var-${subvr}} expansion 1010o LANG-482: StrSubstitutor now supports substitution in variable names. 1011o LANG-496: A generic implementation of the Lazy initialization pattern. 1012o LANG-497: Addition of ContextedException and ContextedRuntimeException. 1013o LANG-498: Add StringEscapeUtils.escapeText() methods. 1014o LANG-499: Add support for the handling of ExecutionExceptions. 1015o LANG-501: Add support for background initialization. 1016o LANG-529: Add a concurrent package. 1017o LANG-533: Validate: support for validating blank strings. 1018o LANG-537: Add ArrayUtils.toArray to create generic arrays. 1019o LANG-545: Add ability to create a Future for a constant. 1020o LANG-546: Add methods to Validate to check whether the index is valid for 1021 the array/list/string. 1022o LANG-553: Add TypeUtils class to provide utility code for working with generic 1023 types. 1024o LANG-559: Added isAssignableFrom and isInstanceOf validation methods. 1025o LANG-559: Added validState validation method. 1026o LANG-560: New TimedSemaphore class. 1027o LANG-582: Provide an implementation of the ThreadFactory interface. 1028o LANG-588: Create a basic Pair<L, R> class. 1029o LANG-594: DateUtils equal & compare functions up to most significant field. 1030o LANG-601: Add Builder Interface / Update Builders to Implement It. 1031o LANG-609: Support lazy initialization using atomic variables 1032o LANG-610: Extend exception handling in ConcurrentUtils to runtime exceptions. 1033o LANG-614: StringUtils.endsWithAny method 1034o LANG-640: Add normalizeSpace to StringUtils 1035o LANG-644: Provide documentation about the new concurrent package 1036o LANG-649: BooleanUtils.toBooleanObject to support single character input 1037o LANG-651: Add AnnotationUtils 1038o LANG-653: Provide a very basic ConcurrentInitializer implementation 1039o LANG-655: Add StringUtils.defaultIfBlank() 1040o LANG-667: Add a Null-safe compare() method to ObjectUtils 1041o LANG-676: Documented potential NPE if auto-boxing occurs for some BooleanUtils 1042 methods 1043o LANG-678: Add support for ConcurrentMap.putIfAbsent() 1044o LANG-692: Add hashCodeMulti varargs method 1045o LANG-697: Add FormattableUtils class 1046o LANG-684: Levenshtein Distance Within a Given Threshold 1047 1048REMOVALS 1049========== 1050 1051o LANG-438: Remove @deprecateds. 1052o LANG-492: Remove code handled now by the JDK. 1053o LANG-493: Remove code that does not hold enough value to remain. 1054o LANG-590: Remove JDK 1.2/1.3 bug handling in 1055 StringUtils.indexOf(String, String, int). 1056o LANG-673: WordUtils.abbreviate() removed 1057o LANG-691: Removed DateUtils.UTC_TIME_ZONE 1058 1059IMPROVEMENTS 1060============== 1061 1062o LANG-290: EnumUtils for JDK 5.0. 1063o LANG-336: Finally start using generics. 1064o LANG-355: StrBuilder should implement CharSequence and Appendable. 1065o LANG-396: Investigate for vararg usages. 1066o LANG-424: Improve Javadoc for StringUtils class. 1067o LANG-458: Refactor Validate.java to eliminate code redundancy. 1068o LANG-479: Document where in SVN trunk is. 1069o LANG-504: bring ArrayUtils.isEmpty to the generics world. 1070o LANG-505: Rewrite StringEscapeUtils. 1071o LANG-507: StringEscapeUtils.unescapeJava should support \u+ notation. 1072o LANG-510: Convert StringUtils API to take CharSequence. 1073o LANG-513: Better EnumUtils. 1074o LANG-528: Mutable classes should implement an appropriately typed Mutable 1075 interface. 1076o LANG-539: Compile commons.lang for CDC 1.1/Foundation 1.1. 1077o LANG-540: Make NumericEntityEscaper immutable. 1078o LANG-541: Replace StringBuffer with StringBuilder. 1079o LANG-548: Use Iterable on API instead of Collection. 1080o LANG-551: Replace Range classes with generic version. 1081o LANG-562: Change Maven groupId. 1082o LANG-563: Change Java package name. 1083o LANG-570: Do the test cases really still require main() and suite() methods? 1084o LANG-579: Add new Validate methods. 1085o LANG-599: ClassUtils.getClass(): Allow Dots as Inner Class Separators. 1086o LANG-605: DefaultExceptionContext overwrites values in recursive situations. 1087o LANG-668: Change ObjectUtils min() & max() functions to use varargs rather 1088 than just two parameters 1089o LANG-681: Push down WordUtils to "text" sub-package. 1090o LANG-711: Add includeantruntime=false to javac targets to quell warnings in 1091 ant 1.8.1 and better (and modest performance gain). 1092o LANG-713: Increase test coverage of FieldUtils read methods and tweak 1093 javadoc. 1094o LANG-718: build.xml Java 1.5+ updates. 1095 1096BUG FIXES 1097=========== 1098 1099o LANG-11: Depend on JDK 1.5+. 1100o LANG-302: StrBuilder does not implement clone(). 1101o LANG-339: StringEscapeUtils.escapeHtml() escapes multibyte characters like 1102 Chinese, Japanese, etc. 1103o LANG-369: ExceptionUtils not thread-safe. 1104o LANG-418: Javadoc incorrect for StringUtils.endsWithIgnoreCase. 1105o LANG-428: StringUtils.isAlpha, isAlphanumeric and isNumeric now return false 1106 for "" 1107o LANG-439: StringEscapeUtils.escapeHTML() does not escape chars (0x00-0x20). 1108o LANG-448: Lower Ascii Characters don't get encoded by Entities.java. 1109o LANG-468: JDK 1.5 build/runtime failure on LANG-393 (EqualsBuilder). 1110o LANG-474: Fixes for thread safety. 1111o LANG-478: StopWatch does not resist to system time changes. 1112o LANG-480: StringEscapeUtils.escapeHtml incorrectly converts unicode 1113 characters above U+00FFFF into 2 characters. 1114o LANG-481: Possible race-conditions in hashCode of the range classes. 1115o LANG-564: Improve StrLookup API documentation. 1116o LANG-568: @SuppressWarnings("unchecked") is used too generally. 1117o LANG-571: ArrayUtils.add(T[: array, T element) can create unexpected 1118 ClassCastException. 1119o LANG-585: exception.DefaultExceptionContext.getFormattedExceptionMessage 1120 catches Throwable. 1121o LANG-596: StrSubstitutor should also handle the default properties of a 1122 java.util.Properties class 1123o LANG-600: Javadoc is incorrect for public static int 1124 lastIndexOf(String str, String searchStr). 1125o LANG-602: ContextedRuntimeException no longer an 'unchecked' exception. 1126o LANG-606: EqualsBuilder causes StackOverflowException. 1127o LANG-608: Some StringUtils methods should take an int character instead of 1128 char to use String API features. 1129o LANG-617: StringEscapeUtils.escapeXML() can't process UTF-16 supplementary 1130 characters 1131o LANG-624: SystemUtils.getJavaVersionAsFloat throws 1132 StringIndexOutOfBoundsException on Android runtime/Dalvik VM 1133o LANG-629: Charset may not be threadsafe, because the HashSet is not synch. 1134o LANG-638: NumberUtils createNumber throws a StringIndexOutOfBoundsException 1135 when argument containing "e" and "E" is passed in 1136o LANG-643: Javadoc StringUtils.left() claims to throw on negative len, but 1137 doesn't 1138o LANG-645: FastDateFormat.format() outputs incorrect week of year because 1139 locale isn't respected 1140o LANG-646: StringEscapeUtils.unescapeJava doesn't handle octal escapes and 1141 Unicode with extra u 1142o LANG-656: Example StringUtils.indexOfAnyBut("zzabyycdxx", '') = 0 incorrect 1143o LANG-658: Some entities like Ö are not matched properly against its 1144 ISO8859-1 representation 1145o LANG-659: EntityArrays typo: {"\u2122", "−"}, // minus sign, U+2212 1146 ISOtech 1147o LANG-66: StringEscaper.escapeXml() escapes characters > 0x7f. 1148o LANG-662: org.apache.commons.lang3.math.Fraction does not reduce 1149 (Integer.MIN_VALUE, 2^k) 1150o LANG-663: org.apache.commons.lang3.math.Fraction does not always succeed in 1151 multiplyBy and divideBy 1152o LANG-664: NumberUtils.isNumber(String) is not right when the String is 1153 "1.1L" 1154o LANG-672: Doc bug in DateUtils#ceiling 1155o LANG-677: DateUtils.isSameLocalTime compares using 12 hour clock and not 1156 24 hour 1157o LANG-685: EqualsBuilder synchronizes on HashCodeBuilder. 1158o LANG-703: StringUtils.join throws NPE when toString returns null for one of 1159 objects in collection 1160o LANG-710: StringIndexOutOfBoundsException when calling unescapeHtml4("") 1161o LANG-714: StringUtils doc/comment spelling fixes. 1162o LANG-715: CharSetUtils.squeeze() speedup. 1163o LANG-716: swapCase and *capitalize speedups. 1164 1165 1166Historical list of changes: https://commons.apache.org/lang/changes-report.html 1167 1168For complete information on Commons Lang, including instructions on how to 1169submit bug reports, patches, or suggestions for improvement, see the 1170Apache Commons Lang website: 1171 1172https://commons.apache.org/lang/ 1173 1174Have fun! 1175-Apache Commons Lang team 1176 1177