xref: /aosp_15_r20/external/apache-commons-lang/src/site/resources/release-notes/RELEASE-NOTES-3.3.2.txt (revision 455610af95f3bf5f4bc8a9eda520f57e389a4c42)
1Licensed to the Apache Software Foundation (ASF) under one or more
2contributor license agreements.  See the NOTICE file distributed with
3this work for additional information regarding copyright ownership.
4The ASF licenses this file to You under the Apache License, Version 2.0
5(the "License"); you may not use this file except in compliance with
6the License.  You may obtain a copy of the License at
7
8http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15
16=============================================================================
17
18                           Apache Commons Lang
19                               Version 3.3.2
20                              Release Notes
21
22
23INTRODUCTION:
24
25This document contains the release notes for the 3.3.2 version of
26Apache Commons Lang. Commons Lang is a set of utility functions and reusable
27components that should be of use in any Java environment. Commons Lang 3.3.2
28at least requires Java 6.0.
29
30For the advice on upgrading from 2.x to 3.x, see the following page:
31
32    https://commons.apache.org/lang/article3_0.html
33
34
35NEW FEATURES
36==============
37
38o LANG-989:  Add org.apache.commons.lang3.SystemUtils.IS_JAVA_1_8
39
40FIXED BUGS
41============
42
43o LANG-992:  NumberUtils#isNumber() returns false for "0.0", "0.4790", et al
44
45                        Release Notes for version 3.3.1
46
47FIXED BUGS
48============
49
50o LANG-987:  DateUtils.getFragmentInDays(Date, Calendar.MONTH) returns wrong
51             days
52o LANG-983:  DurationFormatUtils does not describe format string fully
53o LANG-981:  DurationFormatUtils#lexx does not detect unmatched quote char
54o LANG-984:  DurationFormatUtils does not handle large durations correctly
55o LANG-982:  DurationFormatUtils.formatDuration(61999, "s.SSSS") - ms field
56             size should be 4 digits
57o LANG-978:  Failing tests with Java 8 b128
58
59                        Release Notes for version 3.3
60
61NEW FEATURES
62==============
63
64o LANG-955:  Add methods for removing all invalid characters according to
65             XML 1.0 and XML 1.1 in an input string to StringEscapeUtils.
66             Thanks to Adam Hooper.
67o LANG-970:  Add APIs MutableBoolean setTrue() and setFalse()
68o LANG-962:  Add SerializationUtils.roundtrip(T extends Serializable) to
69             serialize then deserialize
70o LANG-637:  There should be a DifferenceBuilder with a
71             ReflectionDifferenceBuilder implementation
72o LANG-944:  Add the Jaro-Winkler string distance algorithm to StringUtils.
73             Thanks to Rekha Joshi.
74o LANG-417:  New class ClassPathUtils with methods for turning FQN into
75             resource path
76o LANG-834:  Validate: add inclusiveBetween and exclusiveBetween overloads
77             for primitive types
78o LANG-900:  New RandomUtils class. Thanks to Duncan Jones.
79o LANG-966:  Add IBM OS/400 detection
80
81FIXED BUGS
82============
83
84o LANG-621:  ReflectionToStringBuilder.toString does not debug 3rd party object
85             fields within 3rd party object. Thanks to Philip Hodges,
86             Thomas Neidhart.
87o LANG-977:  NumericEntityEscaper incorrectly encodes supplementary characters.
88             Thanks to Chris Karcher.
89o LANG-973:  Make some private fields final
90o LANG-971:  NumberUtils#isNumber(String) fails to reject invalid Octal numbers
91o LANG-972:  NumberUtils#isNumber does not allow for hex 0XABCD
92o LANG-969:  StringUtils.toEncodedString(byte[], Charset) needlessly throws
93             UnsupportedEncodingException. Thanks to Matt Bishop.
94o LANG-946:  ConstantInitializerTest fails when building with IBM JDK 7
95o LANG-954:  uncaught PatternSyntaxException in FastDateFormat on Android.
96             Thanks to Michael Keppler.
97o LANG-936:  StringUtils.getLevenshteinDistance with too big of a threshold
98             returns wrong result. Thanks to Yaniv Kunda, Eli Lindsey.
99o LANG-943:  Test DurationFormatUtilsTest.testEdgeDuration fails in
100             JDK 1.6, 1.7 and 1.8, BRST time zone
101o LANG-613:  ConstructorUtils.getAccessibleConstructor() Does Not Check the
102             Accessibility of Enclosing Classes
103o LANG-951:  Fragments are wrong by 1 day when using fragment YEAR or MONTH.
104             Thanks to Sebastian Götz.
105o LANG-950:  FastDateParser does not handle two digit year parsing like
106             SimpleDateFormat
107o LANG-949:  FastDateParserTest.testParses does not test FastDateParser
108o LANG-915:  Wrong locale handling in LocaleUtils.toLocale().
109             Thanks to Sergio Fernández.
110
111CHANGES
112=========
113
114o LANG-961:  org.apache.commons.lang3.reflect.FieldUtils.removeFinalModifier(Field)
115             does not clean up after itself
116o LANG-958:  FastDateParser javadoc incorrectly states that SimpleDateFormat
117             is used internally
118o LANG-956:  Improve Javadoc of WordUtils.wrap methods
119o LANG-939:  Move Documentation from user guide to package-info files
120o LANG-953:  Convert package.html files to package-info.java files
121o LANG-940:  Fix deprecation warnings
122o LANG-819:  EnumUtils.generateBitVector needs a "? extends"
123
124                        Release Notes for version 3.2.1
125
126BUG FIXES
127===========
128
129o LANG-937:  Fix missing Hamcrest dependency in Ant Build
130o LANG-941:  Test failure in LocaleUtilsTest when building with JDK 8
131o LANG-942:  Test failure in FastDateParserTest and FastDateFormat_ParserTest
132             when building with JDK8. Thanks to Bruno P. Kinoshita,
133             Henri Yandell.
134o LANG-938:  Build fails with test failures when building with JDK 8
135
136                        Release Notes for version 3.2
137
138COMPATIBILITY WITH 3.1
139========================
140
141This release introduces backwards incompatible changes in
142org.apache.commons.lang3.time.FastDateFormat:
143o Method 'protected java.util.List parsePattern()' has been removed
144o Method 'protected java.lang.String parseToken(java.lang.String, int[])' has
145  been removed
146o Method 'protected org.apache.commons.lang3.time.FastDateFormat$NumberRule
147  selectNumberRule(int, int)' has been removed
148
149These changes were the result of [LANG-462]. It is assumed that this change
150will not break clients as Charles Honton pointed out on 25/Jan/12:
151"
152 1. Methods "FastDateFormat$NumberRule selectNumberRule(int, int)" and
153    "List<Rule> parsePattern()" couldn't have been overridden because
154    NumberRule and Rule were private to FastDateFormat.
155 2. Due to the factory pattern used, it's unlikely other two methods would have
156    been overridden.
157 3. The four methods are highly implementation specific. I consider it a
158    mistake that the methods were exposed.
159"
160For more information see https://issues.apache.org/jira/browse/LANG-462.
161
162NEW FEATURES
163==============
164
165o LANG-934:  Add removeFinalModifier to FieldUtils
166o LANG-863:  Method returns number of inheritance hops between parent and
167             subclass. Thanks to Daneel S. Yaitskov.
168o LANG-774:  Added isStarted, isSuspended and isStopped to StopWatch.
169             Thanks to Erhan Bagdemir.
170o LANG-848:  Added StringUtils.isBlank/isEmpty CharSequence... methods.
171             Thanks to Alexander Muthmann.
172o LANG-926:  Added ArrayUtils.reverse(array, from, to) methods.
173o LANG-795:  StringUtils.toString(byte[], String) deprecated in favour of a new
174             StringUtils.toString(byte[], CharSet). Thanks to Aaron Digulla.
175o LANG-893:  StrSubstitutor now supports default values for variables.
176             Thanks to Woonsan Ko.
177o LANG-913:  Adding .gitignore to commons-lang. Thanks to Allon Mureinik.
178o LANG-837:  Add ObjectUtils.toIdentityString methods that support
179             StringBuilder, StrBuilder, and Appendable.
180o LANG-886:  Added CharSetUtils.containsAny(String, String).
181o LANG-797:  Added escape/unescapeJson to StringEscapeUtils.
182o LANG-875:  Added appendIfMissing and prependIfMissing methods to StringUtils.
183o LANG-870:  Add StringUtils.LF and StringUtils.CR values.
184o LANG-873:  Add FieldUtils getAllFields() to return all the fields defined in
185             the given class and super classes.
186o LANG-835:  StrBuilder should support StringBuilder as an input parameter.
187o LANG-857:  StringIndexOutOfBoundsException in CharSequenceTranslator.
188o LANG-856:  Code refactoring in NumberUtils.
189o LANG-855:  NumberUtils#createBigInteger does not allow for hex and octal
190             numbers.
191o LANG-854:  NumberUtils#createNumber - does not allow for hex numbers to be
192             larger than Long.
193o LANG-853:  StringUtils join APIs for primitives.
194o LANG-841:  Add StringUtils API to call String.replaceAll in DOTALL a.k.a.
195             single-line mode.
196o LANG-825:  Create StrBuilder APIs similar to
197             String.format(String, Object...).
198o LANG-675:  Add Triple class (ternary version of Pair).
199o LANG-462:  FastDateFormat supports parse methods.
200
201BUG FIXES
202===========
203
204o LANG-932:  Spelling fixes. Thanks to Ville Skyttä.
205o LANG-929:  OctalUnescaper tried to parse all of \279.
206o LANG-928:  OctalUnescaper had bugs when parsing octals starting with a zero.
207o LANG-905:  EqualsBuilder returned true when comparing arrays, even when the
208             elements are different.
209o LANG-917:  Fixed exception when combining custom and choice format in
210             ExtendedMessageFormat. Thanks to Arne Burmeister.
211o LANG-902:  RandomStringUtils.random javadoc was incorrectly promising letters
212             and numbers would, as opposed to may, appear  Issue:. Thanks to
213             Andrzej Winnicki.
214o LANG-921:  BooleanUtils.xor(boolean...) produces wrong results.
215o LANG-896:  BooleanUtils.toBoolean(String str) javadoc is not updated. Thanks
216             to Mark Bryan Yu.
217o LANG-879:  LocaleUtils test fails with new Locale "ja_JP_JP_#u-ca-japanese"
218             of JDK7.
219o LANG-836:  StrSubstitutor does not support StringBuilder or CharSequence.
220             Thanks to Arnaud Brunet.
221o LANG-693:  Method createNumber from NumberUtils doesn't work for floating
222             point numbers other than Float  Issue: LANG-693. Thanks to
223             Calvin Echols.
224o LANG-887:  FastDateFormat does not use the locale specific cache correctly.
225o LANG-754:  ClassUtils.getShortName(String) will now only do a reverse lookup
226             for array types.
227o LANG-881:  NumberUtils.createNumber() Javadoc says it does not work for octal
228             numbers.
229o LANG-865:  LocaleUtils.toLocale does not parse strings starting with an
230             underscore.
231o LANG-858:  StringEscapeUtils.escapeJava() and escapeEcmaScript() do not
232             output the escaped surrogate pairs that are Java parsable.
233o LANG-849:  FastDateFormat and FastDatePrinter generates Date objects
234             wastefully.
235o LANG-845:  Spelling fixes.
236o LANG-844:  Fix examples contained in javadoc of StringUtils.center methods.
237o LANG-832:  FastDateParser does not handle unterminated quotes correctly.
238o LANG-831:  FastDateParser does not handle white-space properly.
239o LANG-830:  FastDateParser could use \Q \E to quote regexes.
240o LANG-828:  FastDateParser does not handle non-Gregorian calendars properly.
241o LANG-826:  FastDateParser does not handle non-ASCII digits correctly.
242o LANG-822:  NumberUtils#createNumber - bad behavior for leading "--".
243o LANG-818:  FastDateFormat's "z" pattern does not respect timezone of Calendar
244             instances passed to format().
245o LANG-817:  Add org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS_8.
246o LANG-813:  StringUtils.equalsIgnoreCase doesn't check string reference
247             equality.
248o LANG-810:  StringUtils.join() endIndex, bugged for loop.
249o LANG-807:  RandomStringUtils throws confusing IAE when end <= start.
250o LANG-805:  RandomStringUtils.random(count, 0, 0, false, false, universe,
251             random) always throws java.lang.ArrayIndexOutOfBoundsException.
252o LANG-802:  LocaleUtils - unnecessary recursive call in SyncAvoid class.
253o LANG-800:  Javadoc bug in DateUtils#ceiling for Calendar and Object versions.
254o LANG-788:  SerializationUtils throws ClassNotFoundException when cloning
255             primitive classes.
256o LANG-786:  StringUtils equals() relies on undefined behavior.
257o LANG-783:  Documentation bug: StringUtils.split.
258o LANG-777:  jar contains velocity template of release notes.
259o LANG-776:  TypeUtilsTest contains incorrect type assignability assertion.
260o LANG-775:  TypeUtils.getTypeArguments() misses type arguments for
261             partially-assigned classes.
262o LANG-773:  ImmutablePair doc contains nonsense text.
263o LANG-772:  ClassUtils.PACKAGE_SEPARATOR Javadoc contains garbage text.
264o LANG-765:  EventListenerSupport.ProxyInvocationHandler no longer defines
265             serialVersionUID.
266o LANG-764:  StrBuilder is now serializable.
267o LANG-761:  Fix Javadoc Ant warnings.
268o LANG-747:  NumberUtils does not handle Long Hex numbers.
269o LANG-743:  Javadoc bug in static inner class DateIterator.
270
271CHANGES
272=========
273
274o LANG-931:  Misleading Javadoc comment in StrBuilderReader class. Thanks
275             to Christoph Schneegans.
276o LANG-910:  StringUtils.normalizeSpace now handles non-breaking spaces
277             (Unicode 00A0). Thanks to Timur Yarosh.
278o LANG-804:  Redundant check for zero in HashCodeBuilder ctor. Thanks to
279             Allon Mureinik.
280o LANG-884:  Simplify FastDateFormat; eliminate boxing.
281o LANG-882:  LookupTranslator now works with implementations of CharSequence
282             other than String.
283o LANG-846:  Provide CharSequenceUtils.regionMatches with a proper green
284             implementation instead of inefficiently converting to Strings.
285o LANG-839:  ArrayUtils removeElements methods use unnecessary HashSet.
286o LANG-838:  ArrayUtils removeElements methods clone temporary index arrays
287             unnecessarily.
288o LANG-799:  DateUtils#parseDate uses default locale; add Locale support.
289o LANG-798:  Use generics in SerializationUtils.
290
291CHANGES WITHOUT TICKET
292========================
293
294o Fixed URLs in javadoc to point to new oracle.com pages
295
296
297                        Release Notes for version 3.1
298
299NEW FEATURES
300==============
301
302o LANG-801:  Add Conversion utility to convert between data types on byte level
303o LANG-760:  Add API StringUtils.toString(byte[] input, String charsetName)
304o LANG-756:  Add APIs ClassUtils.isPrimitiveWrapper(Class<?>) and
305             isPrimitiveOrWrapper(Class<?>)
306o LANG-695:  SystemUtils.IS_OS_UNIX doesn't recognize FreeBSD as a Unix system
307
308BUG FIXES
309===========
310
311o LANG-749:  Incorrect Bundle-SymbolicName in Manifest
312o LANG-746:  NumberUtils does not handle upper-case hex: 0X and -0X
313o LANG-744:  StringUtils throws java.security.AccessControlException on Google
314             App Engine
315o LANG-741:  Ant build has wrong component.name
316o LANG-698:  Document that the Mutable numbers don't work as expected with
317             String.format
318
319CHANGES
320=========
321
322o LANG-758:  Add an example with whitespace in StringUtils.defaultIfEmpty
323o LANG-752:  Fix createLong() so it behaves like createInteger()
324o LANG-751:  Include the actual type in the Validate.isInstance and
325             isAssignableFrom exception messages
326o LANG-748:  Deprecating chomp(String, String)
327o LANG-736:  CharUtils static final array CHAR_STRING is not needed to compute
328             CHAR_STRING_ARRAY
329
330
331                        Release Notes for version 3.0
332
333ADDITIONS
334===========
335
336o LANG-276:  MutableBigDecimal and MutableBigInteger.
337o LANG-285:  Wish : method unaccent.
338o LANG-358:  ObjectUtils.coalesce.
339o LANG-386:  LeftOf/RightOfNumber in Range convenience methods necessary.
340o LANG-435:  Add ClassUtils.isAssignable() variants with autoboxing.
341o LANG-444:  StringUtils.emptyToNull.
342o LANG-482:  Enhance StrSubstitutor to support nested ${var-${subvr}} expansion
343o LANG-482:  StrSubstitutor now supports substitution in variable names.
344o LANG-496:  A generic implementation of the Lazy initialization pattern.
345o LANG-497:  Addition of ContextedException and ContextedRuntimeException.
346o LANG-498:  Add StringEscapeUtils.escapeText() methods.
347o LANG-499:  Add support for the handling of ExecutionExceptions.
348o LANG-501:  Add support for background initialization.
349o LANG-529:  Add a concurrent package.
350o LANG-533:  Validate: support for validating blank strings.
351o LANG-537:  Add ArrayUtils.toArray to create generic arrays.
352o LANG-545:  Add ability to create a Future for a constant.
353o LANG-546:  Add methods to Validate to check whether the index is valid for
354             the array/list/string.
355o LANG-553:  Add TypeUtils class to provide utility code for working with generic
356             types.
357o LANG-559:  Added isAssignableFrom and isInstanceOf validation methods.
358o LANG-559:  Added validState validation method.
359o LANG-560:  New TimedSemaphore class.
360o LANG-582:  Provide an implementation of the ThreadFactory interface.
361o LANG-588:  Create a basic Pair<L, R> class.
362o LANG-594:  DateUtils equal & compare functions up to most significant field.
363o LANG-601:  Add Builder Interface / Update Builders to Implement It.
364o LANG-609:  Support lazy initialization using atomic variables
365o LANG-610:  Extend exception handling in ConcurrentUtils to runtime exceptions.
366o LANG-614:  StringUtils.endsWithAny method
367o LANG-640:  Add normalizeSpace to StringUtils
368o LANG-644:  Provide documentation about the new concurrent package
369o LANG-649:  BooleanUtils.toBooleanObject to support single character input
370o LANG-651:  Add AnnotationUtils
371o LANG-653:  Provide a very basic ConcurrentInitializer implementation
372o LANG-655:  Add StringUtils.defaultIfBlank()
373o LANG-667:  Add a Null-safe compare() method to ObjectUtils
374o LANG-676:  Documented potential NPE if auto-boxing occurs for some BooleanUtils
375             methods
376o LANG-678:  Add support for ConcurrentMap.putIfAbsent()
377o LANG-692:  Add hashCodeMulti varargs method
378o LANG-697:  Add FormattableUtils class
379o LANG-684:  Levenshtein Distance Within a Given Threshold
380
381REMOVALS
382==========
383
384o LANG-438:  Remove @deprecateds.
385o LANG-492:  Remove code handled now by the JDK.
386o LANG-493:  Remove code that does not hold enough value to remain.
387o LANG-590:  Remove JDK 1.2/1.3 bug handling in
388             StringUtils.indexOf(String, String, int).
389o LANG-673:  WordUtils.abbreviate() removed
390o LANG-691:  Removed DateUtils.UTC_TIME_ZONE
391
392IMPROVEMENTS
393==============
394
395o LANG-290:  EnumUtils for JDK 5.0.
396o LANG-336:  Finally start using generics.
397o LANG-355:  StrBuilder should implement CharSequence and Appendable.
398o LANG-396:  Investigate for vararg usages.
399o LANG-424:  Improve Javadoc for StringUtils class.
400o LANG-458:  Refactor Validate.java to eliminate code redundancy.
401o LANG-479:  Document where in SVN trunk is.
402o LANG-504:  bring ArrayUtils.isEmpty to the generics world.
403o LANG-505:  Rewrite StringEscapeUtils.
404o LANG-507:  StringEscapeUtils.unescapeJava should support \u+ notation.
405o LANG-510:  Convert StringUtils API to take CharSequence.
406o LANG-513:  Better EnumUtils.
407o LANG-528:  Mutable classes should implement an appropriately typed Mutable
408             interface.
409o LANG-539:  Compile commons.lang for CDC 1.1/Foundation 1.1.
410o LANG-540:  Make NumericEntityEscaper immutable.
411o LANG-541:  Replace StringBuffer with StringBuilder.
412o LANG-548:  Use Iterable on API instead of Collection.
413o LANG-551:  Replace Range classes with generic version.
414o LANG-562:  Change Maven groupId.
415o LANG-563:  Change Java package name.
416o LANG-570:  Do the test cases really still require main() and suite() methods?
417o LANG-579:  Add new Validate methods.
418o LANG-599:  ClassUtils.getClass(): Allow Dots as Inner Class Separators.
419o LANG-605:  DefaultExceptionContext overwrites values in recursive situations.
420o LANG-668:  Change ObjectUtils min() & max() functions to use varargs rather
421             than just two parameters
422o LANG-681:  Push down WordUtils to "text" sub-package.
423o LANG-711:  Add includeantruntime=false to javac targets to quell warnings in
424             ant 1.8.1 and better (and modest performance gain).
425o LANG-713:  Increase test coverage of FieldUtils read methods and tweak
426             javadoc.
427o LANG-718:  build.xml Java 1.5+ updates.
428
429BUG FIXES
430===========
431
432o LANG-11:   Depend on JDK 1.5+.
433o LANG-302:  StrBuilder does not implement clone().
434o LANG-339:  StringEscapeUtils.escapeHtml() escapes multibyte characters like
435             Chinese, Japanese, etc.
436o LANG-369:  ExceptionUtils not thread-safe.
437o LANG-418:  Javadoc incorrect for StringUtils.endsWithIgnoreCase.
438o LANG-428:  StringUtils.isAlpha, isAlphanumeric and isNumeric now return false
439             for ""
440o LANG-439:  StringEscapeUtils.escapeHTML() does not escape chars (0x00-0x20).
441o LANG-448:  Lower Ascii Characters don't get encoded by Entities.java.
442o LANG-468:  JDK 1.5 build/runtime failure on LANG-393 (EqualsBuilder).
443o LANG-474:  Fixes for thread safety.
444o LANG-478:  StopWatch does not resist to system time changes.
445o LANG-480:  StringEscapeUtils.escapeHtml incorrectly converts unicode
446             characters above U+00FFFF into 2 characters.
447o LANG-481:  Possible race-conditions in hashCode of the range classes.
448o LANG-564:  Improve StrLookup API documentation.
449o LANG-568:  @SuppressWarnings("unchecked") is used too generally.
450o LANG-571:  ArrayUtils.add(T[:  array, T element) can create unexpected
451             ClassCastException.
452o LANG-585:  exception.DefaultExceptionContext.getFormattedExceptionMessage
453             catches Throwable.
454o LANG-596:  StrSubstitutor should also handle the default properties of a
455             java.util.Properties class
456o LANG-600:  Javadoc is incorrect for public static int
457             lastIndexOf(String str, String searchStr).
458o LANG-602:  ContextedRuntimeException no longer an 'unchecked' exception.
459o LANG-606:  EqualsBuilder causes StackOverflowException.
460o LANG-608:  Some StringUtils methods should take an int character instead of
461             char to use String API features.
462o LANG-617:  StringEscapeUtils.escapeXML() can't process UTF-16 supplementary
463             characters
464o LANG-624:  SystemUtils.getJavaVersionAsFloat throws
465             StringIndexOutOfBoundsException on Android runtime/Dalvik VM
466o LANG-629:  Charset may not be threadsafe, because the HashSet is not synch.
467o LANG-638:  NumberUtils createNumber throws a StringIndexOutOfBoundsException
468             when argument containing "e" and "E" is passed in
469o LANG-643:  Javadoc StringUtils.left() claims to throw on negative len, but
470             doesn't
471o LANG-645:  FastDateFormat.format() outputs incorrect week of year because
472             locale isn't respected
473o LANG-646:  StringEscapeUtils.unescapeJava doesn't handle octal escapes and
474             Unicode with extra u
475o LANG-656:  Example StringUtils.indexOfAnyBut("zzabyycdxx", '') = 0 incorrect
476o LANG-658:  Some entities like &Ouml; are not matched properly against its
477             ISO8859-1 representation
478o LANG-659:  EntityArrays typo: {"\u2122", "&minus;"}, // minus sign, U+2212
479             ISOtech
480o LANG-66:   StringEscaper.escapeXml() escapes characters > 0x7f.
481o LANG-662:  org.apache.commons.lang3.math.Fraction does not reduce
482             (Integer.MIN_VALUE, 2^k)
483o LANG-663:  org.apache.commons.lang3.math.Fraction does not always succeed in
484             multiplyBy and divideBy
485o LANG-664:  NumberUtils.isNumber(String) is not right when the String is
486             "1.1L"
487o LANG-672:  Doc bug in DateUtils#ceiling
488o LANG-677:  DateUtils.isSameLocalTime compares using 12-hour clock and not
489             24-hour
490o LANG-685:  EqualsBuilder synchronizes on HashCodeBuilder.
491o LANG-703:  StringUtils.join throws NPE when toString returns null for one of
492             objects in collection
493o LANG-710:  StringIndexOutOfBoundsException when calling unescapeHtml4("&#03")
494o LANG-714:  StringUtils doc/comment spelling fixes.
495o LANG-715:  CharSetUtils.squeeze() speedup.
496o LANG-716:  swapCase and *capitalize speedups.
497
498
499Historical list of changes: https://commons.apache.org/lang/changes-report.html
500
501For complete information on Commons Lang, including instructions on how to
502submit bug reports, patches, or suggestions for improvement, see the
503Apache Commons Lang website:
504
505https://commons.apache.org/lang/
506
507Have fun!
508-Apache Commons Lang team
509
510