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