Catch itunes duration parsing exceptions
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.
This commit is contained in:
parent
94861b0532
commit
943c0db298
5 changed files with 56 additions and 3 deletions
|
@ -147,8 +147,12 @@ public class ITunesParser implements ModuleParser {
|
|||
final Element duration = element.getChild("duration", ns);
|
||||
|
||||
if (duration != null && duration.getValue() != null) {
|
||||
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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
|
||||
<channel>
|
||||
<item>
|
||||
<itunes:duration>00:00:00:01</itunes:duration>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
|
||||
<channel>
|
||||
<item>
|
||||
<itunes:duration/>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
|
||||
<channel>
|
||||
<item>
|
||||
<itunes:duration>00:00:01</itunes:duration>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
Loading…
Reference in a new issue