Norconex Commons Lang

1.x Release Notes

Release History

Version Date Description
1.15.2 2021-10-18 Maintenance release
1.15.1 2019-12-21 Maintenance release
1.15.0 2018-06-03 Feature release
1.14.0 2017-11-26 Feature release
1.13.1 2017-05-16 Bugfix release
1.13.0 2017-04-25 Feature release
1.12.3 2016-11-15 Bugfix release
1.12.2 2016-10-07 Bugfix release
1.12.1 2016-09-17 Bugfix release
1.12.0 2016-08-29 Feature release
1.11.0 2016-08-25 Feature release
1.10.0 2016-08-22 Feature release
1.9.1 2016-08-09 Maintenance release
1.9.0 2016-02-27 Feature release
1.8.0 2015-11-01 Feature release
1.7.0 2015-08-07 Feature release
1.6.2 2015-07-21 Maintenance release
1.6.1 2015-06-13 Maintenance release
1.6.0 2015-03-27 Feature release
1.5.0 2014-11-24 Feature release
1.4.0 2014-07-09 Feature release
1.3.2 2014-06-16 Maintenance release
1.3.1 2014-03-06 Maintenance release
1.3.0 2014-03-05 Feature release
1.2.0 2014-01-10 Minor release
1.1.0 2013-08-19 Minor release
1.0.0 2013-06-04 Open Source release

1.15.2 Maintenance release Release date 2021-10-18 Download

Updated Added conditional checks before log4j-specific method calls not covered by "log4j-over-slf4j".

1.15.1 Maintenance release Release date 2019-12-21 Download

New Added new normalization rules to URLNormalizer: removeQueryString, lowerCase, lowerCasePath, lowerCaseQuery, lowerCaseQueryParameterNames, lowerCaseQueryParameterValues.
Fixed CachedInputStream no longer truncates last character under certain conditions.
Fixed HttpURL#toAbsolute(String, String) will no longer try to make absolute URLs without the two slashes after colon (e.g., tel:12345).

1.15.0 Feature release Release date 2018-06-03 Download

New New EncryptionXMLUtil class offering methods to facilitate integration of EncryptionKey with IXMLConfigurable objects (or other XML objects).
Updated EncryptionUtil now uses AES for encryption and supports custom key size.
Updated ConfigurationLoader now sets the Velocity character encoding to UTF-8.
Updated HttpURL now extract protocols before first colon, no longer requiring two forward slash. Also more lenient towards relative URLs.
Updated QueryString now strips out fragments when part of a URL.

1.14.0 Feature release Release date 2017-11-26 Download

New Can now store and load Properties file as JSON.
New New StringUtil class with truncation methods replacing the truncated part with a hash code.
New New ResourceLoader class.
New New ProxySettings class.
New New CircularRange class.
New New method variation on EhancedXMLStreamWriter to overwrite the default "writeBlanks" setting.
New New FileUtil#createURLDirs method for creating directories matching URL segments.
New New XMLConfigurationUtil#nullable* methods to consider empty tags/attributes as null whereas not having the tag at all uses the default value.
New New XMLConfigurationUtil#keyExists methods to find if a key exists in XML even if empty.
New New EqualsUtil#equalsMap(...) method for checking if two maps are equal, regardless of entry order.
New It is now possible to pass a Charset where a string was expected for character encoding on a few utility classes.
New Added ZIP constant to ContentType.
New Added ICachedStream#getCacheDirectory().
Updated TextReader default maxReadSize is now 10 million characters (from 128,000) and now accepts -1 as the maxReadSize to mean unlimited.
Updated Properties with multi-values now have their values stored as individual entries by default (as opposed to using a delimiter). Also more storing/loading options are now available.
Updated TextReader#DEFAULT_MAX_READ_SIZE has been increased from 64 thousand to 10 million characters.
Updated Dependency updates: Apache Commons Lang 3.6, Apache Commons Text 1.1, Open JSON 1.8.
Updated ContentType now works better with types with parameters. Added two new related methods: #toBaseTypeString() and #toBaseType().
Fixed Fixed SystemCommand not handling arguments with spaces when they are properly quoted.
Fixed Fixed CachedInputStream returning -1 or throwing EOF exception when it should not.
Fixed Fixed QueryString setting "UTF-8" as the URL when invoking empty constructor (now blank).
Fixed Fixed DurationParser now returning default value in some cases where the duration was invalid (returning 0 instead).
Fixed Fixed CachedInputStream sometimes returning null when using #getCacheDirectory() method.
Removed Removed Properties#isCaseSensitiveKeys(), deprecated since 1.8.0.

1.13.1 Bugfix release Release date 2017-05-16 Download

Fixed Fixed XMLConfigurationUtil reporting a validation error when encountering attributes from the XML Namespace ("http://www.w3.org/XML/1998/namespace"), such as xml:space="preserve".

1.13.0 Feature release Release date 2017-04-25 Download

New New "exec" package containing classes moved from Norconex JEF API. Those classes provide ways to easily execute external commands as well as making code execution "retriable" in case of failure.
New IXMLConfigurable classes having XML schemas (XSD) are now validated when loaded (using XML Schema 1.1).
New Now distributed with new command-line scripts for encryption, safe copying of jars, finding jar duplicates, and automating the installation of this library into other projects.
New New CountingConsoleAppender for tracking how many log events of each type were logged (log4j).
New New ListErrorHandler which stores SAX Exceptions that can later be retrieved as lists.
New New ClasspathResourceResolver and ClasspathInput to resolve XSD schema includes/imports relative to each other in classpath.
New New XMLConfigurationUtil class replacing ConfigurationUtil, offering new methods: #getCSVStringArray(...), #getCSVIntArray(...), #validate(...), #loadFromXML(...), #newInstance(Reader), #getDuration(...)
New New IInputStreamListener, InputStreamLineListener, and InputStreamConsumer replacing now deprecated IStreamListener, and StreamGobbler. These new classes allow streaming of binary content, as well as text.
New New DurationParser class to parse plain-English durations into milliseconds (e.g., "5 minutes and 30 seconds" or "5m30s").
New New URLNormalizer#removeTrailingHash() method.
New New JarFile#isSameVersion(...) and JarFile#isSameVersionAndTime(...) methods.
New New constructor for EnhancedXMLStreamWriter enabling support for indentation (pretty-print).
Updated ConfigurationLoadedUtil now deprecated in favor of XMLConfigurationUtil.
Updated JarDuplicateFinder now checks the last modified date when two versions are the same.
Updated Now relies on Apache Xerces to parse XML Shema 1.1.
Updated Dependency updates: Apache Commons Lang 3.5, Apache Ant 1.10.1, Apache Collections 3.2.2.
Removed Removed all classes/methods deprecated since 1.5.0: ConfigurationLoaded#loadXML(Reader in), .io.FileMonitor, .io.FileUtil, .io.IFileChangeListener, .io.IFileVisitor, .file.FileUtil#deleteFile(File), ClassFinder#findImplementors(...).

1.12.3 Bugfix release Release date 2016-11-15 Download

Updated HttpURL no longer sets a null protocol when constructing non HTTP URLs.
Fixed Fixed URLNormalizer#removeSessionIds() not handling cases where the jsessionid is followed by a dot and other word characters.

1.12.2 Bugfix release Release date 2016-10-07 Download

Fixed Fixed QueryString removing parameters without equal sign.

1.12.1 Bugfix release Release date 2016-09-17 Download

Fixed Fixed URLNormalizer#sortQueryParameters() not handling #fragments properly.

1.12.0 Feature release Release date 2016-08-29 Download

New New URLNormalizer#addDomainTrailingSlash() method.
Updated HttpURL now preserves uppercase characters in protocol.
Fixed Fixed HttpURL constructing URLs with null elements when protocol was not lowercase (e.g. HTTP).

1.11.0 Feature release Release date 2016-08-25 Download

New New URLNormalizer#removeTrailingSlash() method.
Updated URLNormalizer#addTrailingSlash() has been deprecated in favor of URLNormalizer#addDirectoryTrailingSlash().
Updated Dependency updates: Apache Commons Lang 2.6.

1.10.0 Feature release Release date 2016-08-22 Download

New New Jar-related utility classes for jar file version conflict detection and resolution.

1.9.1 Maintenance release Release date 2016-08-09 Download

Updated Dependency updates: Apache Commons IO 2.5.
Updated URLStreamer now has two new "streamToString" methods that accept a character encoding argument. Versions without the character encoding argument now assume UTF-8 as opposed to OS default charset.
Updated ConfigurationLoader#loadString(...) now assumes UTF-8 as opposed to OS default charset for loading variables.
Fixed When case-insensitive, Fixed Properties#addString(...) that was adding values multiple times when a key was previously inserted with a different case and fixed Properties#keySet() that returns the right number of keys now.

1.9.0 Feature release Release date 2016-02-27 Download

New New EncryptionUtil class to easily encrypt and decrypt any text using a security key.
Updated Added support for the following BMP variations to ContentType: application/bmp, application/x-bmp, application/x-win-bitmap, image/ms-bmp, image/x-bitmap, image/x-bmp, image/x-ms-bmp, image/x-win-bitmap, image/x-windows-bmp
Updated ContentType default file extension for image/jpeg is now .jpg to match most frequent usage.
Updated Dependency updates: Apache Commons Collections 4.1.
Fixed HttpURL#toAbsolute(String, String) now handles relative URLs with no leading slashes properly (e.g. "sample.html").
Fixed HttpURL#getRoot(String) now returns the proper root even when the URL contains invalid characters.
Fixed Fixed ConfigurationUtils#newInstance(HierarchicalConfiguration, T, boolean) ignoring the "supportXMLConfigurable" argument.

1.8.0 Feature release Release date 2015-11-01 Download

New New normalization methods on URLNormalizer: #encodeNonURICharacters() and #encodeSpaces(). Spaces are no longer escaped automatically by default.
New New HttpURL#toAbsolute(String, String) method for converting relative URLs to absolute ones, based on another absolute URL.
New New HttpURL#encodeQueryString(String) method for properly encoding the query string portion of a URL.
New New HttpURL#isPortDefault() method to quickly find out if a URL is using a default port for its protocol (http/https).
New New HttpURL#getRoot() and HttpURL#getRoot(String) methods to extract the URL "root" from URLs (left part up to and including, the host name).
New New PropertyMatcher class for easily storing a condition for matching a Properties key value.
Updated HttpURL now keeps the URL fragment when present, and has accessors for it.
Updated HttpURL#toString() no longer returns the port when the protocol is https and the port is 443.
Updated Properties#isCaseSensitiveKeys() is now deprecated in favor of Properties#isCaseInsensitiveKeys() for consistency with constructor caseInsensitiveKeys argument.
Updated Fixed URLNormalizer#removeDotSegments() is now implemented following RFC3986 prescribed algorithm.
Fixed Fixed URLNormalizer#removeDuplicateSlashes() to no longer consider the two slashes between the protocol and hostname as being duplicates in some cases.
Fixed Fixed URLNormalizer#addTrailingSlash() when the path was already ending with one. Also adds one now when there are none and the path is followed by a question mark or hash character.
Fixed HttpURL now sets the port as 443 when initialized with a secure URL (https).
Fixed Fixed possible URISyntaxException in URLNormalizer for certain URLs.
Fixed UTF-8 unicode values are now used to percent-encode the part portion of a URL.
Fixed When Woodstox factory is used as the XML parser, now disables structure validation which can cause issues when you want to use the xml writer on a stream that already has XML written to it (could cause "multiple roots" error).

1.7.0 Feature release Release date 2015-08-07 Download

New Added static methods HttpURL#toURL(String), HttpURL#toURI(String) and regular method HttpURL#getEncoding(). Can now specify URL encoding (charset) at construction time. Also added encodePath(String) method for URL-encoding the path portion of a URL.
New Added new method QueryString#getEncoding().
Updated URLNormalizer now converts spaces to + instead of %20. In addition, it no longer URL-encodes characters when sorting or removing empty parameters (except for converting spaces to +).
Updated ConfigurationUtil#newInstance(...) will now log an ERROR instead of DEBUG when a class is specified but not found in classpath.

1.6.2 Maintenance release Release date 2015-07-21 Download

Updated Jar manifest now includes implementation entries and specifications entries (matching Maven pom.xml).
Updated Javadoc improvements.

1.6.1 Maintenance release Release date 2015-06-13 Download

New Added a length() method to CachedInputStream.
Fixed Fix NullPointerException when passing a date array containing null values in Properties#datesToStringArray(Date...).
Fixed Fix TextReader#readText(...) which could sometimes take forever to return (if ever).
Updated Library update: Apache Commons Lang 3.4.

1.6.0 Feature release Release date 2015-03-27 Download

New New TimeIdGenerator class for generating time-based unique IDs that are guaranteed to be ordered and unique within a JVM.
New New TextReader class for reading large text files, one chunk at a time, splitting text wisely at paragraphs/sentences/words when possible.
New New ByteArrayOutputStream class derived from the Apache IO class of the same name, modified to offer methods to access subsets of bytes ranging form zero to the total number of bytes written so far.
New New method IOUtil#toBufferedReader(Reader) that ensures to return either a BufferedReader wrapping original reader, or the reader itself if it already implements BufferedReader.
New New method IOUtil#toBufferedInputStream(InputStream) that ensures to return either a BufferedInputStream wrapping original InputStream, or the input stream itself if it already implements BufferedInputStream.
New New method IOUtil#startsWith(InputStream, byte[]) that returns true if given input stream starts the specified bytes array. (must support mark).
New New method IOUtil#borrowBytes(InputStream, int) that gets and resets the specified number of bytes from the input stream (must support mark).
Updated CachedInputStream now supports mark(int). Mark value is always unlimited (argument is ignored).
Updated ContentType and ContentFamily now support for BIG2 and Quattro Pro content types.
Updated ConfigurationUtil#newInstance(...) now throws an ConfigurationExceptions upon error when no default value is supplied.
Updated Added SonaType snapshot repository to pom.xml.
Updated Updated several maven plugins and added SonarQube maven plugin.
Updated Javadoc improvements.
Updated Upgraded depending libraries to the following: JUnit 4.12, Apache Commons Logging 1.2, Apache Commons Lang 3.3.2,

1.5.0 Feature release Release date 2014-11-24 Download

New New pipeline-related classes for a very simple pipeline framework for encapsulating executable tasks.
New New CachedInputStream for caching input streams for re-use. Swaps memory overflow to file.
New New CachedOutputStream for caching output streams for re-use as InputStream. Swaps memory overflow to file.
New New ByteBufferInputStream for reading a ByteBuffer as an InputStream.
New New EnhancedXMLStreamWriter class to facilitate writing of primitives and other types.
New New MemoryUtil class to quickly obtain free JVM memory.
New New methods on EqualsUtil for String equality: #equalsAnyIgnoreCase(...) #equalsAllIgnoreCase(...), and #equalsNoneIgnoreCase(...).
New Added content-type mappings for Content Family.
New New #valuesOf(String...) method on ContentType.
Updated Now licensed under The Apache License, Version 2.0.
Updated Properties default content delimiter is now more unique.
Updated Deprecated ConfigurationLoader#loadXML(Reader) in favor of ConfigurationUtil#newXMLConfiguration(Reader).
Updated FileUtil#deleteEmptyDirs(File) now forces directory deletion using FileUtil#delete(File)
Updated ConfigurationUtil and ConfigurationLoader now ensure full disabling in all methods of value splitting in attributes and elements.
Updated FileUtil#head(File, int) now uses UTF-8 as default encoding.
Updated FilteredInputStream now uses UTF-8 as default encoding, and now offers an additional constructor accepting a character encoding.
Updated StreamGobbler now uses UTF-8 as default encoding, and now offers an additional constructor accepting a character encoding. Also added #getType(), #getEncoding(), and #getStreamListeners()
Updated IOUtil#tail(InputStream, lineQty) now uses UTF-8 as default encoding, and now offers an overloaded method accepting a character encoding: IOUtil#tail(InputStream, String, lineQty)
Updated IOUtil#head(InputStream, lineQty) now uses UTF-8 as default encoding, and now offers an overloaded method accepting a character encoding: IOUtil#head(InputStream, String, lineQty)
Updated IXMLConfigurable no longer extends Serializable.
Fixed Fixed content type display name for application/ccxml+xml not being mapped properly.
Fixed FileUtil#visitAllFiles(...) method now goes beyond 1 level deep when browsing recursively.

1.4.0 Feature release Release date 2014-07-09 Download

New New ClassFinder#findSubTypes(Class) method for finding subtypes in classpath using classpath roots.
New New DataUnit class to perform data unit (KB, MB, GB, etc) conversions much like Java TimeUnit class.
New New PercentFormatter to format fraction values as percentage string.
New New DataUnitFormatter to format any data unit ot a human-readable format taking into account locale and decimals.
New New ContentType class to represent a file media/MIME type and obtain its usual name, content family, and file extension(s).
New New ContentFamily class to represent a group of files of similar content types. Useful for content categorization.
New Added new classes for listening to java.util.Map changes: ObservableMap, MapChangeSupport, IMapChangeListener, and MapChangeEvent.
Updated Deprecation of FileUtil#deleteFile(File) in favour of FileUtil#delete(File).
Updated FileUtil#delete(File) now invokes System.gc() upon deletion failure to fix a known java bug when trying to delete files on windows.
Updated Properties now uses UTF-8 to load and store itself.
Updated FileMonitor, FileUtil, IFileChangeListener, IFileVisitor are now found under the com.norconex.commons.lang.file package. Classes have been deprecated in former location.
Updated Now requires Java 7 or higher.
Updated Refactored Properties to extend ObservableMap so changes can optionally be tracked.
Updated URLNormalizer no longer rejects URLs with spaces in them. It will now convert spaces to %20 and log a warning.
Updated Deprecation of ClassFinder#findImplementors(XXX) in favour of ClassFinder#findSubTypes(XXX).
Fixed Fix FileUtil#tail(...) method when the file has less lines than the amount requested.
Fixed Fix junit Properties.load to use the whole delimiter.
Fixed Fix Properties.remove to return null if key is non existent.
Fixed Fix junit test for converting IP to domain. Was failing due to wikipedia IP change.

1.3.2 Maintenance release Release date 2014-06-16 Download

Updated URLNormalizer no longer rejects URLs with spaces in them. It will now convert spaces to %20 and log a warning.
Fixed Fix junit test for converting IP to domain. Was failing due to wikipedia IP change.

1.3.1 Maintenance release Release date 2014-03-06 Download

Fixed Fixed missing localized text for DurationUtil.

1.3.0 Feature release Release date 2014-03-05 Download

New New YearMonthDay class for a local date without time.
New New YearMonthDayInterval (and unit test) class for a local date range without time.
New New FileMonitor and IFileChangeListener to be notified of file changes.
New New methods on FileUtil: #visitEmptyDirs(File, IFileVisitor) #visitEmptyDirs(File, IFileVisitor, FileFilter) #visitAllDirs(File, IFileVisitor, FileFilter) #deleteEmptyDirs(File, Date)
Updated Upgraded Apache HttpClient to version 4.3.2, Apache Commons Configuration to 1.10, and Apache Commons Lang to 3.2.1. Refactored affected code.

1.2.0 Minor release Release date 2014-01-10 Download

New New getter and setter for URL "path" on HttpURL.
Updated Javadoc improvements.
Fixed HttpURL#getLastPathSegment() no longer returns the query string with it.
Fixed Jars are now closed properly in ClassFinder.
Fixed ClassFinder#findImplementors(...) now only returns concrete classes.

1.1.0 Minor release Release date 2013-08-19 Download

New New #toSafeFileName and #fromSafeFileName method on FileUtil for creating OS friendly file names out of any strings.
New New DurationUtil class for nice and easy formatting of time durations.
Fixed Fixed NullPointerException in FileUtil when deleting empty directories.

1.0.0 Open Source release Release date 2013-06-04 Download

New Starting with this release, Norconex Commons Lang is open-source under GPL3.