diff --git a/rome-modules/src/main/java/com/rometools/modules/itunes/io/ITunesParser.java b/rome-modules/src/main/java/com/rometools/modules/itunes/io/ITunesParser.java index 1986df7..3a8381a 100644 --- a/rome-modules/src/main/java/com/rometools/modules/itunes/io/ITunesParser.java +++ b/rome-modules/src/main/java/com/rometools/modules/itunes/io/ITunesParser.java @@ -147,8 +147,12 @@ public class ITunesParser implements ModuleParser { final Element duration = element.getChild("duration", ns); if (duration != null && duration.getValue() != null) { - final Duration dur = new Duration(duration.getValue().trim()); - entryInfo.setDuration(dur); + try { + final Duration dur = new Duration(duration.getValue().trim()); + entryInfo.setDuration(dur); + } catch (Exception e) { + LOG.warn("Failed to parse duration: {}", duration.getValue()); + } } final Element closedCaptioned = element.getChild("isClosedCaptioned", ns); @@ -216,7 +220,7 @@ public class ITunesParser implements ModuleParser { final URL imageURL = new URL(image.getAttributeValue("href").trim()); module.setImage(imageURL); } catch (final MalformedURLException e) { - LOG.debug("Malformed URL Exception reading itunes:image tag: {}", image.getAttributeValue("href")); + LOG.warn("Malformed URL Exception reading itunes:image tag: {}", image.getAttributeValue("href")); } } } diff --git a/rome-modules/src/test/java/com/rometools/modules/itunes/ITunesParserTest.java b/rome-modules/src/test/java/com/rometools/modules/itunes/ITunesParserTest.java index 1ded481..8460563 100644 --- a/rome-modules/src/test/java/com/rometools/modules/itunes/ITunesParserTest.java +++ b/rome-modules/src/test/java/com/rometools/modules/itunes/ITunesParserTest.java @@ -34,6 +34,7 @@ import com.rometools.modules.itunes.AbstractITunesObject; import com.rometools.modules.itunes.EntryInformationImpl; import com.rometools.modules.itunes.FeedInformationImpl; import com.rometools.modules.itunes.io.ITunesGenerator; +import com.rometools.modules.itunes.types.Duration; import com.rometools.rome.feed.module.Module; import com.rometools.rome.feed.synd.SyndEntry; import com.rometools.rome.feed.synd.SyndFeed; @@ -133,4 +134,28 @@ public class ITunesParserTest extends AbstractTestCase { assertEquals(Integer.valueOf(2), entryInfo.getOrder()); assertEquals("http://example.org/image.png", entryInfo.getImage().toString()); } + + public void testDuration() throws Exception { + SyndFeed feed = new SyndFeedInput().build(new XmlReader(getClass().getResource("duration.xml"))); + SyndEntry entry = feed.getEntries().get(0); + EntryInformationImpl module = (EntryInformationImpl) entry.getModule(AbstractITunesObject.URI); + + assertEquals(1000, module.getDuration().getMilliseconds()); + } + + public void testDurationEmpty() throws Exception { + SyndFeed feed = new SyndFeedInput().build(new XmlReader(getClass().getResource("duration-empty.xml"))); + SyndEntry entry = feed.getEntries().get(0); + EntryInformationImpl module = (EntryInformationImpl) entry.getModule(AbstractITunesObject.URI); + + assertNull(module.getDuration()); + } + + public void testDurationBad() throws Exception { + SyndFeed feed = new SyndFeedInput().build(new XmlReader(getClass().getResource("duration-bad.xml"))); + SyndEntry entry = feed.getEntries().get(0); + EntryInformationImpl module = (EntryInformationImpl) entry.getModule(AbstractITunesObject.URI); + + assertNull(module.getDuration()); + } } diff --git a/rome-modules/src/test/resources/com/rometools/modules/itunes/duration-bad.xml b/rome-modules/src/test/resources/com/rometools/modules/itunes/duration-bad.xml new file mode 100644 index 0000000..f8b8a33 --- /dev/null +++ b/rome-modules/src/test/resources/com/rometools/modules/itunes/duration-bad.xml @@ -0,0 +1,8 @@ + + + + + 00:00:00:01 + + + diff --git a/rome-modules/src/test/resources/com/rometools/modules/itunes/duration-empty.xml b/rome-modules/src/test/resources/com/rometools/modules/itunes/duration-empty.xml new file mode 100644 index 0000000..85bde04 --- /dev/null +++ b/rome-modules/src/test/resources/com/rometools/modules/itunes/duration-empty.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/rome-modules/src/test/resources/com/rometools/modules/itunes/duration.xml b/rome-modules/src/test/resources/com/rometools/modules/itunes/duration.xml new file mode 100644 index 0000000..fcbaa88 --- /dev/null +++ b/rome-modules/src/test/resources/com/rometools/modules/itunes/duration.xml @@ -0,0 +1,8 @@ + + + + + 00:00:01 + + +