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