diff --git a/CHANGELOG b/CHANGELOG index 8c691735..5579d75f 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -8,6 +8,7 @@ v 2.0.2 - software version in user-agent when fetching feeds is no longer hardcoded - admin settings page is now read only, settings are configured in config.yml - added link to metrics on the admin settings page + - Rome (rss library) upgrade to 1.5.0 v 2.0.1 - the redis pool no longer throws an exception when it is unable to aquire a new connection v2.0.0 diff --git a/pom.xml b/pom.xml index 9cf89a09..11b11656 100644 --- a/pom.xml +++ b/pom.xml @@ -197,9 +197,9 @@ 2.4 - commons-collections - commons-collections - 3.2.1 + org.apache.commons + commons-collections4 + 4.0 commons-codec @@ -222,31 +222,14 @@ 1.5.2 - net.java.dev.rome + com.rometools rome - 1.0.0 - - - jdom - jdom - - + 1.5.0 - org.rometools + com.rometools rome-opml - 1.0 - - - rome - rome - - - - - org.jdom - jdom - 1.1.3 + 1.5.0 org.jsoup diff --git a/src/main/java/com/commafeed/backend/feed/FeedFetcher.java b/src/main/java/com/commafeed/backend/feed/FeedFetcher.java index 7a6e34c5..6bb6b7eb 100644 --- a/src/main/java/com/commafeed/backend/feed/FeedFetcher.java +++ b/src/main/java/com/commafeed/backend/feed/FeedFetcher.java @@ -17,7 +17,7 @@ import com.commafeed.backend.HttpGetter; import com.commafeed.backend.HttpGetter.HttpResult; import com.commafeed.backend.HttpGetter.NotModifiedException; import com.commafeed.backend.model.Feed; -import com.sun.syndication.io.FeedException; +import com.rometools.rome.io.FeedException; @Slf4j @AllArgsConstructor diff --git a/src/main/java/com/commafeed/backend/feed/FeedParser.java b/src/main/java/com/commafeed/backend/feed/FeedParser.java index 549abedd..eba18969 100644 --- a/src/main/java/com/commafeed/backend/feed/FeedParser.java +++ b/src/main/java/com/commafeed/backend/feed/FeedParser.java @@ -9,8 +9,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.SystemUtils; -import org.jdom.Element; -import org.jdom.Namespace; +import org.jdom2.Element; +import org.jdom2.Namespace; import org.xml.sax.InputSource; import com.commafeed.backend.model.Feed; @@ -19,14 +19,14 @@ import com.commafeed.backend.model.FeedEntryContent; import com.google.common.base.Function; import com.google.common.collect.Collections2; import com.google.common.collect.Iterables; -import com.sun.syndication.feed.synd.SyndContent; -import com.sun.syndication.feed.synd.SyndEnclosure; -import com.sun.syndication.feed.synd.SyndEntry; -import com.sun.syndication.feed.synd.SyndFeed; -import com.sun.syndication.feed.synd.SyndLink; -import com.sun.syndication.feed.synd.SyndLinkImpl; -import com.sun.syndication.io.FeedException; -import com.sun.syndication.io.SyndFeedInput; +import com.rometools.rome.feed.synd.SyndContent; +import com.rometools.rome.feed.synd.SyndEnclosure; +import com.rometools.rome.feed.synd.SyndEntry; +import com.rometools.rome.feed.synd.SyndFeed; +import com.rometools.rome.feed.synd.SyndLink; +import com.rometools.rome.feed.synd.SyndLinkImpl; +import com.rometools.rome.io.FeedException; +import com.rometools.rome.io.SyndFeedInput; @Slf4j public class FeedParser { @@ -38,12 +38,12 @@ public class FeedParser { private static final Date END = new Date(1000l * Integer.MAX_VALUE - 86400000); private static final Function CONTENT_TO_STRING = new Function() { + @Override public String apply(SyndContent content) { return content.getValue(); } }; - @SuppressWarnings("unchecked") public FetchedFeed parse(String feedUrl, byte[] xml) throws FeedException { FetchedFeed fetchedFeed = new FetchedFeed(); Feed feed = fetchedFeed.getFeed(); @@ -81,7 +81,7 @@ public class FeedParser { entry.setGuid(FeedUtils.truncate(guid, 2048)); entry.setUpdated(validateDate(getEntryUpdateDate(item), true)); entry.setUrl(FeedUtils.truncate(FeedUtils.toAbsoluteUrl(item.getLink(), feed.getLink(), feed.getUrlAfterRedirect()), 2048)); - + // if link is empty but guid is used as url if (StringUtils.isBlank(entry.getUrl()) && StringUtils.startsWith(entry.getGuid(), "http")) { entry.setUrl(entry.getGuid()); @@ -91,7 +91,7 @@ public class FeedParser { content.setContent(getContent(item)); content.setTitle(getTitle(item)); content.setAuthor(StringUtils.trimToNull(item.getAuthor())); - SyndEnclosure enclosure = (SyndEnclosure) Iterables.getFirst(item.getEnclosures(), null); + SyndEnclosure enclosure = Iterables.getFirst(item.getEnclosures(), null); if (enclosure != null) { content.setEnclosureUrl(FeedUtils.truncate(enclosure.getUrl(), 2048)); content.setEnclosureType(enclosure.getType()); @@ -121,24 +121,17 @@ public class FeedParser { /** * Adds atom links for rss feeds */ - @SuppressWarnings({ "unchecked", "rawtypes" }) private void handleForeignMarkup(SyndFeed feed) { - Object foreignMarkup = feed.getForeignMarkup(); + List foreignMarkup = feed.getForeignMarkup(); if (foreignMarkup == null) { return; } - if (foreignMarkup instanceof List) { - List elements = (List) foreignMarkup; - for (Object object : elements) { - if (object instanceof Element) { - Element element = (Element) object; - if ("link".equals(element.getName()) && ATOM_10_NS.equals(element.getNamespace())) { - SyndLink link = new SyndLinkImpl(); - link.setRel(element.getAttributeValue("rel")); - link.setHref(element.getAttributeValue("href")); - feed.getLinks().add(link); - } - } + for (Element element : foreignMarkup) { + if ("link".equals(element.getName()) && ATOM_10_NS.equals(element.getNamespace())) { + SyndLink link = new SyndLinkImpl(); + link.setRel(element.getAttributeValue("rel")); + link.setHref(element.getAttributeValue("href")); + feed.getLinks().add(link); } } } @@ -169,7 +162,6 @@ public class FeedParser { return date; } - @SuppressWarnings("unchecked") private String getContent(SyndEntry item) { String content = null; if (item.getContents().isEmpty()) { @@ -193,9 +185,8 @@ public class FeedParser { return StringUtils.trimToNull(title); } - @SuppressWarnings("unchecked") private String findHub(SyndFeed feed) { - for (SyndLink l : (List) feed.getLinks()) { + for (SyndLink l : feed.getLinks()) { if ("hub".equalsIgnoreCase(l.getRel())) { log.debug("found hub {} for feed {}", l.getHref(), feed.getLink()); return l.getHref(); @@ -204,9 +195,8 @@ public class FeedParser { return null; } - @SuppressWarnings("unchecked") private String findSelf(SyndFeed feed) { - for (SyndLink l : (List) feed.getLinks()) { + for (SyndLink l : feed.getLinks()) { if ("self".equalsIgnoreCase(l.getRel())) { log.debug("found self {} for feed {}", l.getHref(), feed.getLink()); return l.getHref(); diff --git a/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java b/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java index 09f6088c..872ca8fa 100644 --- a/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java +++ b/src/main/java/com/commafeed/backend/feed/FeedRefreshUpdater.java @@ -12,7 +12,7 @@ import java.util.concurrent.locks.Lock; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateUtils; import org.hibernate.SessionFactory; diff --git a/src/main/java/com/commafeed/backend/opml/OPMLExporter.java b/src/main/java/com/commafeed/backend/opml/OPMLExporter.java index 93287580..385a4ea4 100644 --- a/src/main/java/com/commafeed/backend/opml/OPMLExporter.java +++ b/src/main/java/com/commafeed/backend/opml/OPMLExporter.java @@ -10,9 +10,9 @@ import com.commafeed.backend.dao.FeedSubscriptionDAO; import com.commafeed.backend.model.FeedCategory; import com.commafeed.backend.model.FeedSubscription; import com.commafeed.backend.model.User; -import com.sun.syndication.feed.opml.Attribute; -import com.sun.syndication.feed.opml.Opml; -import com.sun.syndication.feed.opml.Outline; +import com.rometools.opml.feed.opml.Attribute; +import com.rometools.opml.feed.opml.Opml; +import com.rometools.opml.feed.opml.Outline; @AllArgsConstructor public class OPMLExporter { @@ -20,7 +20,6 @@ public class OPMLExporter { private final FeedCategoryDAO feedCategoryDAO; private final FeedSubscriptionDAO feedSubscriptionDAO; - @SuppressWarnings("unchecked") public Opml export(User user) { Opml opml = new Opml(); opml.setFeedType("opml_1.1"); @@ -48,7 +47,6 @@ public class OPMLExporter { } - @SuppressWarnings("unchecked") private Outline buildCategoryOutline(FeedCategory cat, List subscriptions) { Outline outline = new Outline(); outline.setText(cat.getName()); @@ -66,7 +64,6 @@ public class OPMLExporter { return outline; } - @SuppressWarnings("unchecked") private Outline buildSubscriptionOutline(FeedSubscription sub) { Outline outline = new Outline(); outline.setText(sub.getTitle()); diff --git a/src/main/java/com/commafeed/backend/opml/OPMLImporter.java b/src/main/java/com/commafeed/backend/opml/OPMLImporter.java index 7dd8e30c..11233b7c 100644 --- a/src/main/java/com/commafeed/backend/opml/OPMLImporter.java +++ b/src/main/java/com/commafeed/backend/opml/OPMLImporter.java @@ -5,7 +5,7 @@ import java.util.List; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import com.commafeed.backend.cache.CacheService; @@ -15,9 +15,9 @@ import com.commafeed.backend.model.FeedCategory; import com.commafeed.backend.model.User; import com.commafeed.backend.service.FeedSubscriptionService; import com.commafeed.backend.service.FeedSubscriptionService.FeedSubscriptionException; -import com.sun.syndication.feed.opml.Opml; -import com.sun.syndication.feed.opml.Outline; -import com.sun.syndication.io.WireFeedInput; +import com.rometools.opml.feed.opml.Opml; +import com.rometools.opml.feed.opml.Outline; +import com.rometools.rome.io.WireFeedInput; @Slf4j public class OPMLImporter { @@ -33,7 +33,6 @@ public class OPMLImporter { this.cache = cache; } - @SuppressWarnings("unchecked") public void importOpml(User user, String xml) { xml = xml.substring(xml.indexOf('<')); WireFeedInput input = new WireFeedInput(); @@ -49,7 +48,6 @@ public class OPMLImporter { } - @SuppressWarnings("unchecked") private void handleOutline(User user, Outline outline, FeedCategory parent) { List children = outline.getChildren(); if (CollectionUtils.isNotEmpty(children)) { diff --git a/src/main/java/com/commafeed/backend/rome/OPML11Generator.java b/src/main/java/com/commafeed/backend/rome/OPML11Generator.java index 371bfc5d..4bfc44af 100644 --- a/src/main/java/com/commafeed/backend/rome/OPML11Generator.java +++ b/src/main/java/com/commafeed/backend/rome/OPML11Generator.java @@ -1,19 +1,20 @@ package com.commafeed.backend.rome; -import org.jdom.Element; +import org.jdom2.Element; -import com.sun.syndication.feed.opml.Opml; +import com.rometools.opml.feed.opml.Opml; /** * Add missing title to the generated OPML * */ -public class OPML11Generator extends com.sun.syndication.io.impl.OPML10Generator { +public class OPML11Generator extends com.rometools.opml.io.impl.OPML10Generator { public OPML11Generator() { super("opml_1.1"); } + @Override protected Element generateHead(Opml opml) { Element head = new Element("head"); addNotNullSimpleElement(head, "title", opml.getTitle()); diff --git a/src/main/java/com/commafeed/backend/rome/OPML11Parser.java b/src/main/java/com/commafeed/backend/rome/OPML11Parser.java index c297e74d..995baa1b 100644 --- a/src/main/java/com/commafeed/backend/rome/OPML11Parser.java +++ b/src/main/java/com/commafeed/backend/rome/OPML11Parser.java @@ -1,9 +1,9 @@ package com.commafeed.backend.rome; -import org.jdom.Document; -import org.jdom.Element; +import org.jdom2.Document; +import org.jdom2.Element; -import com.sun.syndication.io.impl.OPML10Parser; +import com.rometools.opml.io.impl.OPML10Parser; /** * Support for OPML 1.1 parsing diff --git a/src/main/java/com/commafeed/backend/rome/RSS090DescriptionConverter.java b/src/main/java/com/commafeed/backend/rome/RSS090DescriptionConverter.java index 4ab01ab6..c2154565 100644 --- a/src/main/java/com/commafeed/backend/rome/RSS090DescriptionConverter.java +++ b/src/main/java/com/commafeed/backend/rome/RSS090DescriptionConverter.java @@ -1,10 +1,10 @@ package com.commafeed.backend.rome; -import com.sun.syndication.feed.rss.Description; -import com.sun.syndication.feed.rss.Item; -import com.sun.syndication.feed.synd.SyndContentImpl; -import com.sun.syndication.feed.synd.SyndEntry; -import com.sun.syndication.feed.synd.impl.ConverterForRSS090; +import com.rometools.rome.feed.rss.Description; +import com.rometools.rome.feed.rss.Item; +import com.rometools.rome.feed.synd.SyndContentImpl; +import com.rometools.rome.feed.synd.SyndEntry; +import com.rometools.rome.feed.synd.impl.ConverterForRSS090; /** * Support description tag for RSS09 diff --git a/src/main/java/com/commafeed/backend/rome/RSS090DescriptionParser.java b/src/main/java/com/commafeed/backend/rome/RSS090DescriptionParser.java index 567ec755..d30f82dc 100644 --- a/src/main/java/com/commafeed/backend/rome/RSS090DescriptionParser.java +++ b/src/main/java/com/commafeed/backend/rome/RSS090DescriptionParser.java @@ -1,10 +1,12 @@ package com.commafeed.backend.rome; -import org.jdom.Element; +import java.util.Locale; -import com.sun.syndication.feed.rss.Description; -import com.sun.syndication.feed.rss.Item; -import com.sun.syndication.io.impl.RSS090Parser; +import org.jdom2.Element; + +import com.rometools.rome.feed.rss.Description; +import com.rometools.rome.feed.rss.Item; +import com.rometools.rome.io.impl.RSS090Parser; /** * Support description tag for RSS09 @@ -13,9 +15,8 @@ import com.sun.syndication.io.impl.RSS090Parser; public class RSS090DescriptionParser extends RSS090Parser { @Override - protected Item parseItem(Element rssRoot, Element eItem) { - Item item = super.parseItem(rssRoot, eItem); - + protected Item parseItem(Element rssRoot, Element eItem, Locale locale) { + Item item = super.parseItem(rssRoot, eItem, locale); Element e = eItem.getChild("description", getRSSNamespace()); if (e != null) { Description desc = new Description(); @@ -25,5 +26,4 @@ public class RSS090DescriptionParser extends RSS090Parser { return item; } - } diff --git a/src/main/java/com/commafeed/backend/rome/RSSRDF10Parser.java b/src/main/java/com/commafeed/backend/rome/RSSRDF10Parser.java index 45995237..e8db9961 100644 --- a/src/main/java/com/commafeed/backend/rome/RSSRDF10Parser.java +++ b/src/main/java/com/commafeed/backend/rome/RSSRDF10Parser.java @@ -2,13 +2,13 @@ package com.commafeed.backend.rome; import java.util.List; -import org.apache.commons.collections.CollectionUtils; -import org.jdom.Document; -import org.jdom.Element; -import org.jdom.Namespace; +import org.apache.commons.collections4.CollectionUtils; +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.Namespace; import com.google.common.collect.Lists; -import com.sun.syndication.io.impl.RSS10Parser; +import com.rometools.rome.io.impl.RSS10Parser; public class RSSRDF10Parser extends RSS10Parser { @@ -19,14 +19,13 @@ public class RSSRDF10Parser extends RSS10Parser { super("rss_1.0", RSS_NS); } - @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public boolean isMyType(Document document) { boolean ok = false; Element rssRoot = document.getRootElement(); Namespace defaultNS = rssRoot.getNamespace(); - List additionalNSs = Lists.newArrayList(rssRoot.getAdditionalNamespaces()); + List additionalNSs = Lists.newArrayList(rssRoot.getAdditionalNamespaces()); List children = rssRoot.getChildren(); if (CollectionUtils.isNotEmpty(children)) { Element child = children.get(0); diff --git a/src/main/java/com/commafeed/frontend/model/Entry.java b/src/main/java/com/commafeed/frontend/model/Entry.java index b9d28d3a..52705fbb 100644 --- a/src/main/java/com/commafeed/frontend/model/Entry.java +++ b/src/main/java/com/commafeed/frontend/model/Entry.java @@ -14,9 +14,10 @@ import com.commafeed.backend.model.FeedEntryStatus; import com.commafeed.backend.model.FeedEntryTag; import com.commafeed.backend.model.FeedSubscription; import com.google.common.collect.Lists; -import com.sun.syndication.feed.synd.SyndContentImpl; -import com.sun.syndication.feed.synd.SyndEntry; -import com.sun.syndication.feed.synd.SyndEntryImpl; +import com.rometools.rome.feed.synd.SyndContent; +import com.rometools.rome.feed.synd.SyndContentImpl; +import com.rometools.rome.feed.synd.SyndEntry; +import com.rometools.rome.feed.synd.SyndEntryImpl; import com.wordnik.swagger.annotations.ApiModel; import com.wordnik.swagger.annotations.ApiModelProperty; @@ -72,7 +73,7 @@ public class Entry implements Serializable { SyndContentImpl content = new SyndContentImpl(); content.setValue(getContent()); - entry.setContents(Arrays.asList(content)); + entry.setContents(Arrays. asList(content)); entry.setLink(getUrl()); entry.setPublishedDate(getDate()); return entry; diff --git a/src/main/java/com/commafeed/frontend/resource/CategoryREST.java b/src/main/java/com/commafeed/frontend/resource/CategoryREST.java index 2c4d31e4..c537a97c 100644 --- a/src/main/java/com/commafeed/frontend/resource/CategoryREST.java +++ b/src/main/java/com/commafeed/frontend/resource/CategoryREST.java @@ -24,7 +24,7 @@ import javax.ws.rs.core.Response.Status; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; @@ -56,10 +56,10 @@ import com.commafeed.frontend.model.request.MarkRequest; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; -import com.sun.syndication.feed.synd.SyndEntry; -import com.sun.syndication.feed.synd.SyndFeed; -import com.sun.syndication.feed.synd.SyndFeedImpl; -import com.sun.syndication.io.SyndFeedOutput; +import com.rometools.rome.feed.synd.SyndEntry; +import com.rometools.rome.feed.synd.SyndFeed; +import com.rometools.rome.feed.synd.SyndFeedImpl; +import com.rometools.rome.io.SyndFeedOutput; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.ApiOperation; import com.wordnik.swagger.annotations.ApiParam; diff --git a/src/main/java/com/commafeed/frontend/resource/FeedREST.java b/src/main/java/com/commafeed/frontend/resource/FeedREST.java index b7aa2367..7d42770d 100644 --- a/src/main/java/com/commafeed/frontend/resource/FeedREST.java +++ b/src/main/java/com/commafeed/frontend/resource/FeedREST.java @@ -70,13 +70,13 @@ import com.commafeed.frontend.model.request.SubscribeRequest; import com.google.common.base.Preconditions; import com.google.common.base.Throwables; import com.google.common.collect.Lists; +import com.rometools.opml.feed.opml.Opml; +import com.rometools.rome.feed.synd.SyndEntry; +import com.rometools.rome.feed.synd.SyndFeed; +import com.rometools.rome.feed.synd.SyndFeedImpl; +import com.rometools.rome.io.SyndFeedOutput; +import com.rometools.rome.io.WireFeedOutput; import com.sun.jersey.multipart.FormDataParam; -import com.sun.syndication.feed.opml.Opml; -import com.sun.syndication.feed.synd.SyndEntry; -import com.sun.syndication.feed.synd.SyndFeed; -import com.sun.syndication.feed.synd.SyndFeedImpl; -import com.sun.syndication.io.SyndFeedOutput; -import com.sun.syndication.io.WireFeedOutput; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.ApiOperation; import com.wordnik.swagger.annotations.ApiParam;