Merge branch '1040-rss-feed-illegal-argument-exception' into 'master'

Catch IllegalArgumentException when parsing RSS feed

Closes #1040

See merge request !588
This commit is contained in:
Torsten Grote
2017-09-18 14:38:22 +00:00

View File

@@ -161,12 +161,7 @@ class FeedManagerImpl implements FeedManager, Client, EventListener,
@Override @Override
public void addFeed(String url) throws DbException, IOException { public void addFeed(String url) throws DbException, IOException {
// fetch syndication feed to get its metadata // fetch syndication feed to get its metadata
SyndFeed f; SyndFeed f = fetchSyndFeed(url);
try {
f = fetchSyndFeed(url);
} catch (FeedException e) {
throw new IOException(e);
}
Feed feed = feedFactory.createFeed(url, f); Feed feed = feedFactory.createFeed(url, f);
@@ -183,12 +178,7 @@ class FeedManagerImpl implements FeedManager, Client, EventListener,
} }
// fetch feed again and post entries // fetch feed again and post entries
Feed updatedFeed; Feed updatedFeed = fetchFeed(feed);
try {
updatedFeed = fetchFeed(feed);
} catch (FeedException e) {
throw new IOException(e);
}
// store feed again to also store last added entry // store feed again to also store last added entry
txn = db.startTransaction(false); txn = db.startTransaction(false);
@@ -314,10 +304,6 @@ class FeedManagerImpl implements FeedManager, Client, EventListener,
for (Feed feed : feeds) { for (Feed feed : feeds) {
try { try {
newFeeds.add(fetchFeed(feed)); newFeeds.add(fetchFeed(feed));
} catch (FeedException e) {
if (LOG.isLoggable(WARNING))
LOG.log(WARNING, e.toString(), e);
newFeeds.add(feed);
} catch (IOException e) { } catch (IOException e) {
if (LOG.isLoggable(WARNING)) if (LOG.isLoggable(WARNING))
LOG.log(WARNING, e.toString(), e); LOG.log(WARNING, e.toString(), e);
@@ -339,15 +325,14 @@ class FeedManagerImpl implements FeedManager, Client, EventListener,
LOG.info("Done updating RSS feeds"); LOG.info("Done updating RSS feeds");
} }
private SyndFeed fetchSyndFeed(String url) private SyndFeed fetchSyndFeed(String url) throws IOException {
throws FeedException, IOException {
// fetch feed // fetch feed
InputStream stream = getFeedInputStream(url); InputStream stream = getFeedInputStream(url);
SyndFeed f = getSyndFeed(stream); SyndFeed f = getSyndFeed(stream);
stream.close(); stream.close();
if (f.getEntries().size() == 0) if (f.getEntries().size() == 0)
throw new FeedException("Feed has no entries"); throw new IOException("Feed has no entries");
// clean title // clean title
String title = String title =
@@ -371,8 +356,7 @@ class FeedManagerImpl implements FeedManager, Client, EventListener,
return f; return f;
} }
private Feed fetchFeed(Feed feed) private Feed fetchFeed(Feed feed) throws IOException, DbException {
throws FeedException, IOException, DbException {
// fetch and clean feed // fetch and clean feed
SyndFeed f = fetchSyndFeed(feed.getUrl()); SyndFeed f = fetchSyndFeed(feed.getUrl());
@@ -402,11 +386,16 @@ class FeedManagerImpl implements FeedManager, Client, EventListener,
throw new IOException("Empty response body"); throw new IOException("Empty response body");
} }
private SyndFeed getSyndFeed(InputStream stream) private SyndFeed getSyndFeed(InputStream stream) throws IOException {
throws IOException, FeedException {
SyndFeedInput input = new SyndFeedInput(); SyndFeedInput input = new SyndFeedInput();
return input.build(new XmlReader(stream)); try {
return input.build(new XmlReader(stream));
} catch (IllegalArgumentException e) {
throw new IOException(e);
} catch (FeedException e) {
throw new IOException(e);
}
} }
private long postFeedEntries(Feed feed, List<SyndEntry> entries) private long postFeedEntries(Feed feed, List<SyndEntry> entries)