ThreadLocal is not guaranteed to be garbage collected if the thread
keeps running. This can lead to a memory leak in applications with
long-living threads.
Fixes#303
Since we don't have any convention for how to use @version it's best to
avoid it completely. As for the @author tag, it is considered redundant
nowadays because this information is in the version control system.
Dual-licensing allows us to choose any of the licenses. Since the rest
of the project is licensed under the Apache license it makes sense to
remove LGPL altogether.
`CustomTagImpl.java` and `DurationTest.java` didn't have Apache license
header, but I assume they were supposed to, judging from Robert's email
from 5 Aug 2010 on the Rome dev mailing list: "Well, all those files are
things I moved from my other project. If the license headers weren't
changed, it was simply because of an oversight on my part".
Parsing of a malformed or empty duration resulted in an uncaught
exception that was breaking feed parsing completely. We already catch
exceptions when parsing other fields, e.g. href attribute of the image
tag. Also, it's more user-friendly to handle malformed data instead of
failing everything.
Fixes bug introduced in 2bc58a0. The call to `XMLReader::setFeature`
is used to check if the feature is supported and must happen before
`SAXBuilder::setFeature`. Otherwise XML parsing throws an exception.
The change is not tested, because it is exceptionally cumbersome to
test unsupported features. Possible ways to do it include using an
existing XML library that is known to not support features that the
code is trying to set, or implementing a mock XML parser that doesn't
support any features at all. It's hard to include an XML library
without interfering with other tests and it's hard to implement a mock
XML parser.
Fixes#294
Original code had a copyright notice and no license header. Completely
rewriting the code is one of the ways to make sure the code is licensed
under Apache license.