Fixes #12 (NullPointerException in MediaRSS module: Scheme and value

cannot be null)
This commit is contained in:
Patrick Gotthard 2014-04-18 20:03:07 +02:00
parent 98a364431e
commit 8608efd489
3 changed files with 38 additions and 5 deletions

View file

@ -313,19 +313,25 @@ public class MediaModuleParser implements ModuleParser {
} }
// ratings // ratings
{ {
final List<Element> ratings = e.getChildren("rating", getNS());
final ArrayList<Rating> values = new ArrayList<Rating>(); final ArrayList<Rating> values = new ArrayList<Rating>();
for (int i = 0; ratings != null && i < ratings.size(); i++) { final List<Element> ratings = e.getChildren("rating", getNS());
for (final Element ratingElement : ratings) {
try { try {
final Element rat = ratings.get(i); final String ratingText = ratingElement.getText();
values.add(new Rating(rat.getAttributeValue("scheme"), rat.getText())); String ratingScheme = Strings.trimToNull(ratingElement.getAttributeValue("scheme"));
if (ratingScheme == null) {
ratingScheme = "urn:simple";
}
final Rating rating = new Rating(ratingScheme, ratingText);
values.add(rating);
} catch (final Exception ex) { } catch (final Exception ex) {
LOG.warn("Exception parsing rating tag.", ex); LOG.warn("Exception parsing rating tag.", ex);
} }
} }
md.setRatings(values.toArray(new Rating[values.size()])); md.setRatings(values.toArray(new Rating[values.size()]));
} }
// text // text
{ {

View file

@ -22,6 +22,7 @@ import junit.framework.TestSuite;
import org.rometools.feed.module.AbstractTestCase; import org.rometools.feed.module.AbstractTestCase;
import org.rometools.feed.module.mediarss.types.MediaContent; import org.rometools.feed.module.mediarss.types.MediaContent;
import org.rometools.feed.module.mediarss.types.Rating;
import org.rometools.feed.module.mediarss.types.Thumbnail; import org.rometools.feed.module.mediarss.types.Thumbnail;
import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndEntry;
@ -90,7 +91,7 @@ public class MediaModuleTest extends AbstractTestCase {
} }
/** /**
* test url with whitespace in media element * tests parsing thubnails with empty dimensions
* (https://github.com/rometools/rome-modules/issues/7). * (https://github.com/rometools/rome-modules/issues/7).
* *
* @throws IOException if file not found or not accessible * @throws IOException if file not found or not accessible
@ -108,6 +109,24 @@ public class MediaModuleTest extends AbstractTestCase {
} }
/**
* tests parsing rating without scheme (https://github.com/rometools/rome-modules/issues/12).
*
* @throws IOException if file not found or not accessible
* @throws FeedException when the feed can't be parsed
*
*/
public void testParseRatingWithoutScheme() throws FeedException, IOException {
final SyndFeed feed = getSyndFeed("org/rometools/feed/module/mediarss/issue-12.xml");
final SyndEntry entry = feed.getEntries().get(0);
final MediaEntryModule module = (MediaEntryModule) entry.getModule(MediaEntryModule.URI);
final Rating[] ratings = module.getMetadata().getRatings();
assertThat(ratings, is(notNullValue()));
}
/** /**
* test url with whitespace in media element * test url with whitespace in media element
* (https://github.com/rometools/rome-modules/issues/20). * (https://github.com/rometools/rome-modules/issues/20).

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<item>
<media:rating>adult</media:rating>
</item>
</channel>
</rss>