Professional Documents
Culture Documents
Version 3.4
Release Notes
INTRODUCTION:
This document contains the release notes for the 3.4 version of
Apache Commons Lang. Commons Lang is a set of utility functions and reusable
components that should be of use in any Java environment. Commons Lang 3.4
at least requires Java 6.0.
For the advice on upgrading from 2.x to 3.x, see the following page:
http://commons.apache.org/lang/article3_0.html
COMPATIBILITY
=============
Commons Lang 3.4 is fully binary compatible to the last release and can
therefore be used as a drop in replacement for 3.3.2. Note that the value of
org.apache.commons.lang3.time.DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN
has changed, which may affect clients using the constant. Furthermore the
constant is used internally in
o DurationFormatUtils.formatDurationISO(long)
o DurationFormatUtils.formatPeriodISO(long, long)
For more information see https://issues.apache.org/jira/browse/LANG-1000.
NEW FEATURES
==============
o
o
o
o
LANG-821:
LANG-1103:
LANG-1093:
LANG-1082:
o LANG-1015:
o LANG-1080:
o LANG-883:
o
o
o
o
LANG-1052:
LANG-536:
LANG-1033:
LANG-1021:
o LANG-1016:
o LANG-999:
o LANG-994:
o LANG-993:
o LANG-1044:
o LANG-1045:
FIXED BUGS
============
o LANG-794: SystemUtils.IS_OS_WINDOWS_2008, VISTA are incorrect. Thanks to
Timo Kockert.
o LANG-1104: Parse test fails for TimeZone America/Sao_Paulo
o LANG-948: Exception while using ExtendedMessageFormat and escaping braces.
Thanks to Andrey Khobnya.
o LANG-1092: Wrong formating of time zones with daylight saving time in
FastDatePrinter
o LANG-1090: FastDateParser does not set error indication in ParsePosition
o LANG-1089: FastDateParser does not handle excess hours as per
SimpleDateFormat
o LANG-1061: FastDateParser error - timezones not handled correctly. Thanks to
dmeneses.
o LANG-1087: NumberUtils#createNumber() returns positive BigDecimal when
negative Float is expected. Thanks to Renat Zhilkibaev.
o LANG-1081: DiffBuilder.append(String, Object left, Object right) does not do
a left.equals(right) check. Thanks to Jonathan Baker.
o LANG-1055: StrSubstitutor.replaceSystemProperties does not work consistently.
Thanks to Jonathan Baker.
o LANG-1083: Add (T) casts to get unit tests to pass in old JDK. Thanks to
Jonathan Baker.
o LANG-1073: Read wrong component type of array in add in ArrayUtils.
Thanks to haiyang li.
o LANG-1077: StringUtils.ordinalIndexOf("aaaaaa", "aa", 2) != 3 in StringUtils.
Thanks to haiyang li.
o LANG-1072: Duplicated "0x" check in createBigInteger in NumberUtils. Thanks
to haiyang li.
o LANG-1064: StringUtils.abbreviate description doesn't agree with the
examples. Thanks to B.J. Herbison.
o LANG-1041: Fix MethodUtilsTest so it does not depend on JDK method ordering.
Thanks to Alexandre Bartel.
o LANG-1000: ParseException when trying to parse UTC dates with Z as zone
designator using DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT
o LANG-1035: Javadoc for EqualsBuilder.reflectionEquals() is unclear
o LANG-1001: ISO 8601 misspelled throughout the Javadocs. Thanks to
Michael Osipov.
o LANG-1088: FastDateParser should be case insensitive
o LANG-995: Fix bug with stripping spaces on last line in WordUtils.wrap().
Thanks to Andrey Khobnya.
CHANGES
=========
o
o
o
o
LANG-1102:
LANG-1091:
LANG-1101:
LANG-1100:
o LANG-935:
o LANG-1098:
o
o
o
o
o
LANG-1098:
LANG-1097:
LANG-1096:
LANG-1095:
LANG-877:
o LANG-970:
o LANG-962:
o LANG-637:
o LANG-944:
o LANG-417:
o LANG-834:
o LANG-900:
o LANG-966:
FIXED BUGS
============
o LANG-621: ReflectionToStringBuilder.toString does not debug 3rd party object
fields within 3rd party object. Thanks to Philip Hodges,
Thomas Neidhart.
o LANG-977: NumericEntityEscaper incorrectly encodes supplementary characters.
Thanks to Chris Karcher.
o LANG-973: Make some private fields final
o LANG-971: NumberUtils#isNumber(String) fails to reject invalid Octal numbers
o LANG-972: NumberUtils#isNumber does not allow for hex 0XABCD
o LANG-969: StringUtils.toEncodedString(byte[], Charset) needlessly throws
UnsupportedEncodingException. Thanks to Matt Bishop.
o LANG-946: ConstantInitializerTest fails when building with IBM JDK 7
o LANG-954: uncaught PatternSyntaxException in FastDateFormat on Android.
Thanks to Michael Keppler.
o LANG-936: StringUtils.getLevenshteinDistance with too big of a threshold
returns wrong result. Thanks to Yaniv Kunda, Eli Lindsey.
o LANG-943: Test DurationFormatUtilsTest.testEdgeDuration fails in
JDK 1.6, 1.7 and 1.8, BRST time zone
o LANG-613: ConstructorUtils.getAccessibleConstructor() Does Not Check the
Accessibility of Enclosing Classes
o LANG-951: Fragments are wrong by 1 day when using fragment YEAR or MONTH.
Thanks to Sebastian Gtz.
o LANG-950: FastDateParser does not handle two digit year parsing like
SimpleDateFormat
o LANG-949: FastDateParserTest.testParses does not test FastDateParser
o LANG-915: Wrong locale handling in LocaleUtils.toLocale().
Thanks to Sergio Fernndez.
CHANGES
=========
o LANG-961: org.apache.commons.lang3.reflect.FieldUtils.removeFinalModifier(Fie
ld)
does not clean up after itself
o LANG-958: FastDateParser javadoc incorrectly states that SimpleDateFormat
is used internally
o LANG-956: Improve JavaDoc of WordUtils.wrap methods
o LANG-939: Move Documentation from user guide to package-info files
o LANG-953: Convert package.html files to package-info.java files
o LANG-940: Fix deprecation warnings
o LANG-819: EnumUtils.generateBitVector needs a "? extends"
LANG-932:
LANG-929:
LANG-928:
LANG-905:
o LANG-917:
o LANG-902:
o LANG-921:
o LANG-896:
o LANG-879:
o LANG-836:
o LANG-693:
o LANG-887:
o LANG-754:
o LANG-881:
o LANG-865:
o LANG-858:
o LANG-849:
o
o
o
o
o
o
o
o
o
LANG-845:
LANG-844:
LANG-832:
LANG-831:
LANG-830:
LANG-828:
LANG-826:
LANG-822:
LANG-818:
LANG-276:
LANG-285:
LANG-358:
LANG-386:
LANG-435:
LANG-444:
LANG-482:
LANG-482:
LANG-496:
LANG-497:
LANG-498:
LANG-499:
LANG-501:
LANG-529:
LANG-533:
LANG-537:
LANG-545:
LANG-546:
o
o
o
o
o
o
o
o
o
o
o
o
s
LANG-601:
LANG-609:
LANG-610:
LANG-614:
LANG-640:
LANG-644:
LANG-649:
LANG-651:
LANG-653:
LANG-655:
LANG-667:
LANG-676:
o
o
o
o
LANG-678:
LANG-692:
LANG-697:
LANG-684:
methods
Add support for ConcurrentMap.putIfAbsent()
Add hashCodeMulti varargs method
Add FormattableUtils class
Levenshtein Distance Within a Given Threshold
REMOVALS
==========
o
o
o
o
LANG-438:
LANG-492:
LANG-493:
LANG-590:
Remove @deprecateds.
Remove code handled now by the JDK.
Remove code that does not hold enough value to remain.
Remove JDK 1.2/1.3 bug handling in
StringUtils.indexOf(String, String, int).
o LANG-673: WordUtils.abbreviate() removed
o LANG-691: Removed DateUtils.UTC_TIME_ZONE
IMPROVEMENTS
==============
o
o
o
o
o
o
o
o
o
o
o
o
o
LANG-290:
LANG-336:
LANG-355:
LANG-396:
LANG-424:
LANG-458:
LANG-479:
LANG-504:
LANG-505:
LANG-507:
LANG-510:
LANG-513:
LANG-528:
o
o
o
o
o
o
o
o
o
o
o
o
LANG-539:
LANG-540:
LANG-541:
LANG-548:
LANG-551:
LANG-562:
LANG-563:
LANG-570:
LANG-579:
LANG-599:
LANG-605:
LANG-668:
(Integer.MIN_VALUE, 2^k)
o LANG-663: org.apache.commons.lang3.math.Fraction does not always succeed in
multiplyBy and divideBy
o LANG-664: NumberUtils.isNumber(String) is not right when the String is
"1.1L"
o LANG-672: Doc bug in DateUtils#ceiling
o LANG-677: DateUtils.isSameLocalTime compares using 12 hour clock and not
24 hour
o LANG-685: EqualsBuilder synchronizes on HashCodeBuilder.
o LANG-703: StringUtils.join throws NPE when toString returns null for one of
objects in collection
o LANG-710: StringIndexOutOfBoundsException when calling unescapeHtml4("")
o LANG-714: StringUtils doc/comment spelling fixes.
o LANG-715: CharSetUtils.squeeze() speedup.
o LANG-716: swapCase and *capitalize speedups.
Historical list of changes: http://commons.apache.org/lang/changes-report.html
For complete information on Commons Lang, including instructions on how to
submit bug reports, patches, or suggestions for improvement, see the
Apache Commons Lang website:
http://commons.apache.org/lang/
Have fun!
-Apache Commons Lang team