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