added locale to parser to allow locale dependent date parsing (fixes

rometools/rome-modules#22)
This commit is contained in:
Martin Kurz 2013-10-13 16:14:23 +02:00
parent ed18ac115b
commit c3288555ab
33 changed files with 189 additions and 148 deletions

View file

@ -16,6 +16,8 @@
*/ */
package com.sun.syndication.io; package com.sun.syndication.io;
import java.util.Locale;
import org.jdom2.Element; import org.jdom2.Element;
import com.sun.syndication.feed.module.Module; import com.sun.syndication.feed.module.Module;
@ -52,5 +54,5 @@ public interface ModuleParser {
* information. * information.
* *
*/ */
public Module parse(Element element); public Module parse(Element element, Locale locale);
} }

View file

@ -20,6 +20,7 @@ import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.Reader; import java.io.Reader;
import java.util.Locale;
import org.jdom2.Document; import org.jdom2.Document;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
@ -47,7 +48,7 @@ public class SyndFeedInput {
* *
*/ */
public SyndFeedInput() { public SyndFeedInput() {
this(false); this(false, Locale.US);
} }
/** /**
@ -58,8 +59,8 @@ public class SyndFeedInput {
* IMPLEMENTED YET (validation does not happen) * IMPLEMENTED YET (validation does not happen)
* *
*/ */
public SyndFeedInput(final boolean validate) { public SyndFeedInput(final boolean validate, final Locale locale) {
feedInput = new WireFeedInput(validate); feedInput = new WireFeedInput(validate, locale);
} }
/** /**

View file

@ -23,6 +23,7 @@ import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.io.Reader; import java.io.Reader;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.WeakHashMap; import java.util.WeakHashMap;
@ -86,6 +87,7 @@ public class WireFeedInput {
private final boolean validate; private final boolean validate;
private boolean xmlHealerOn; private boolean xmlHealerOn;
private final Locale locale;
/** /**
* Returns the list of supported input feed types. * Returns the list of supported input feed types.
@ -106,7 +108,7 @@ public class WireFeedInput {
* *
*/ */
public WireFeedInput() { public WireFeedInput() {
this(false); this(false, Locale.US);
} }
/** /**
@ -117,9 +119,10 @@ public class WireFeedInput {
* IMPLEMENTED YET (validation does not happen) * IMPLEMENTED YET (validation does not happen)
* *
*/ */
public WireFeedInput(final boolean validate) { public WireFeedInput(final boolean validate, final Locale locale) {
this.validate = false; // TODO FIX THIS THINGY this.validate = false; // TODO FIX THIS THINGY
xmlHealerOn = true; xmlHealerOn = true;
this.locale = locale;
} }
/** /**
@ -297,7 +300,7 @@ public class WireFeedInput {
if (parser == null) { if (parser == null) {
throw new IllegalArgumentException("Invalid document"); throw new IllegalArgumentException("Invalid document");
} }
return parser.parse(document, validate); return parser.parse(document, validate, locale);
} }
/** /**

View file

@ -16,6 +16,8 @@
*/ */
package com.sun.syndication.io; package com.sun.syndication.io;
import java.util.Locale;
import org.jdom2.Document; import org.jdom2.Document;
import com.sun.syndication.feed.WireFeed; import com.sun.syndication.feed.WireFeed;
@ -73,6 +75,6 @@ public interface WireFeedParser {
* XML document (JDOM). * XML document (JDOM).
* *
*/ */
public WireFeed parse(Document document, boolean validate) throws IllegalArgumentException, FeedException; public WireFeed parse(Document document, boolean validate, final Locale locale) throws IllegalArgumentException, FeedException;
} }

View file

@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
import java.io.StringReader; import java.io.StringReader;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Attribute; import org.jdom2.Attribute;
import org.jdom2.Document; import org.jdom2.Document;
@ -171,7 +172,7 @@ public class Atom03Generator extends BaseWireFeedGenerator {
if (feed.getModified() != null) { if (feed.getModified() != null) {
final Element modifiedElement = new Element("modified", getFeedNamespace()); final Element modifiedElement = new Element("modified", getFeedNamespace());
modifiedElement.addContent(DateParser.formatW3CDateTime(feed.getModified())); modifiedElement.addContent(DateParser.formatW3CDateTime(feed.getModified(), Locale.US));
eFeed.addContent(modifiedElement); eFeed.addContent(modifiedElement);
} }
} }
@ -210,19 +211,19 @@ public class Atom03Generator extends BaseWireFeedGenerator {
if (entry.getModified() != null) { if (entry.getModified() != null) {
final Element modifiedElement = new Element("modified", getFeedNamespace()); final Element modifiedElement = new Element("modified", getFeedNamespace());
modifiedElement.addContent(DateParser.formatW3CDateTime(entry.getModified())); modifiedElement.addContent(DateParser.formatW3CDateTime(entry.getModified(), Locale.US));
eEntry.addContent(modifiedElement); eEntry.addContent(modifiedElement);
} }
if (entry.getIssued() != null) { if (entry.getIssued() != null) {
final Element issuedElement = new Element("issued", getFeedNamespace()); final Element issuedElement = new Element("issued", getFeedNamespace());
issuedElement.addContent(DateParser.formatW3CDateTime(entry.getIssued())); issuedElement.addContent(DateParser.formatW3CDateTime(entry.getIssued(), Locale.US));
eEntry.addContent(issuedElement); eEntry.addContent(issuedElement);
} }
if (entry.getCreated() != null) { if (entry.getCreated() != null) {
final Element createdElement = new Element("created", getFeedNamespace()); final Element createdElement = new Element("created", getFeedNamespace());
createdElement.addContent(DateParser.formatW3CDateTime(entry.getCreated())); createdElement.addContent(DateParser.formatW3CDateTime(entry.getCreated(), Locale.US));
eEntry.addContent(createdElement); eEntry.addContent(createdElement);
} }

View file

@ -19,6 +19,7 @@ package com.sun.syndication.io.impl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Document; import org.jdom2.Document;
import org.jdom2.Element; import org.jdom2.Element;
@ -61,12 +62,12 @@ public class Atom03Parser extends BaseWireFeedParser {
} }
@Override @Override
public WireFeed parse(final Document document, final boolean validate) throws IllegalArgumentException, FeedException { public WireFeed parse(final Document document, final boolean validate, final Locale locale) throws IllegalArgumentException, FeedException {
if (validate) { if (validate) {
validateFeed(document); validateFeed(document);
} }
final Element rssRoot = document.getRootElement(); final Element rssRoot = document.getRootElement();
return parseFeed(rssRoot); return parseFeed(rssRoot, locale);
} }
protected void validateFeed(final Document document) throws FeedException { protected void validateFeed(final Document document) throws FeedException {
@ -79,7 +80,7 @@ public class Atom03Parser extends BaseWireFeedParser {
// otherwise will have to check the document elements by hand. // otherwise will have to check the document elements by hand.
} }
protected WireFeed parseFeed(final Element eFeed) { protected WireFeed parseFeed(final Element eFeed, final Locale locale) {
final Feed feed = new Feed(getType()); final Feed feed = new Feed(getType());
feed.setStyleSheet(getStyleSheet(eFeed.getDocument())); feed.setStyleSheet(getStyleSheet(eFeed.getDocument()));
@ -142,14 +143,14 @@ public class Atom03Parser extends BaseWireFeedParser {
e = eFeed.getChild("modified", getAtomNamespace()); e = eFeed.getChild("modified", getAtomNamespace());
if (e != null) { if (e != null) {
feed.setModified(DateParser.parseDate(e.getText())); feed.setModified(DateParser.parseDate(e.getText(), locale));
} }
feed.setModules(parseFeedModules(eFeed)); feed.setModules(parseFeedModules(eFeed, locale));
eList = eFeed.getChildren("entry", getAtomNamespace()); eList = eFeed.getChildren("entry", getAtomNamespace());
if (eList.size() > 0) { if (eList.size() > 0) {
feed.setEntries(parseEntries(eList)); feed.setEntries(parseEntries(eList, locale));
} }
final List<Element> foreignMarkup = extractForeignMarkup(eFeed, feed, getAtomNamespace()); final List<Element> foreignMarkup = extractForeignMarkup(eFeed, feed, getAtomNamespace());
@ -278,10 +279,10 @@ public class Atom03Parser extends BaseWireFeedParser {
} }
// List(Elements) -> List(Entries) // List(Elements) -> List(Entries)
private List<Entry> parseEntries(final List<Element> eEntries) { private List<Entry> parseEntries(final List<Element> eEntries, final Locale locale) {
final List<Entry> entries = new ArrayList<Entry>(); final List<Entry> entries = new ArrayList<Entry>();
for (int i = 0; i < eEntries.size(); i++) { for (int i = 0; i < eEntries.size(); i++) {
entries.add(parseEntry(eEntries.get(i))); entries.add(parseEntry(eEntries.get(i), locale));
} }
if (entries.size() > 0) { if (entries.size() > 0) {
return entries; return entries;
@ -290,7 +291,7 @@ public class Atom03Parser extends BaseWireFeedParser {
} }
} }
private Entry parseEntry(final Element eEntry) { private Entry parseEntry(final Element eEntry, final Locale locale) {
final Entry entry = new Entry(); final Entry entry = new Entry();
Element e = eEntry.getChild("title", getAtomNamespace()); Element e = eEntry.getChild("title", getAtomNamespace());
@ -321,17 +322,17 @@ public class Atom03Parser extends BaseWireFeedParser {
e = eEntry.getChild("modified", getAtomNamespace()); e = eEntry.getChild("modified", getAtomNamespace());
if (e != null) { if (e != null) {
entry.setModified(DateParser.parseDate(e.getText())); entry.setModified(DateParser.parseDate(e.getText(), locale));
} }
e = eEntry.getChild("issued", getAtomNamespace()); e = eEntry.getChild("issued", getAtomNamespace());
if (e != null) { if (e != null) {
entry.setIssued(DateParser.parseDate(e.getText())); entry.setIssued(DateParser.parseDate(e.getText(), locale));
} }
e = eEntry.getChild("created", getAtomNamespace()); e = eEntry.getChild("created", getAtomNamespace());
if (e != null) { if (e != null) {
entry.setCreated(DateParser.parseDate(e.getText())); entry.setCreated(DateParser.parseDate(e.getText(), locale));
} }
e = eEntry.getChild("summary", getAtomNamespace()); e = eEntry.getChild("summary", getAtomNamespace());
@ -348,7 +349,7 @@ public class Atom03Parser extends BaseWireFeedParser {
entry.setContents(content); entry.setContents(content);
} }
entry.setModules(parseItemModules(eEntry)); entry.setModules(parseItemModules(eEntry, locale));
final List<Element> foreignMarkup = extractForeignMarkup(eEntry, entry, getAtomNamespace()); final List<Element> foreignMarkup = extractForeignMarkup(eEntry, entry, getAtomNamespace());
if (foreignMarkup.size() > 0) { if (foreignMarkup.size() > 0) {

View file

@ -21,6 +21,7 @@ import java.io.StringReader;
import java.io.Writer; import java.io.Writer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Attribute; import org.jdom2.Attribute;
import org.jdom2.Document; import org.jdom2.Document;
@ -203,7 +204,7 @@ public class Atom10Generator extends BaseWireFeedGenerator {
if (feed.getUpdated() != null) { if (feed.getUpdated() != null) {
final Element updatedElement = new Element("updated", getFeedNamespace()); final Element updatedElement = new Element("updated", getFeedNamespace());
updatedElement.addContent(DateParser.formatW3CDateTime(feed.getUpdated())); updatedElement.addContent(DateParser.formatW3CDateTime(feed.getUpdated(), Locale.US));
eFeed.addContent(updatedElement); eFeed.addContent(updatedElement);
} }
} }
@ -257,13 +258,13 @@ public class Atom10Generator extends BaseWireFeedGenerator {
if (entry.getUpdated() != null) { if (entry.getUpdated() != null) {
final Element updatedElement = new Element("updated", getFeedNamespace()); final Element updatedElement = new Element("updated", getFeedNamespace());
updatedElement.addContent(DateParser.formatW3CDateTime(entry.getUpdated())); updatedElement.addContent(DateParser.formatW3CDateTime(entry.getUpdated(), Locale.US));
eEntry.addContent(updatedElement); eEntry.addContent(updatedElement);
} }
if (entry.getPublished() != null) { if (entry.getPublished() != null) {
final Element publishedElement = new Element("published", getFeedNamespace()); final Element publishedElement = new Element("published", getFeedNamespace());
publishedElement.addContent(DateParser.formatW3CDateTime(entry.getPublished())); publishedElement.addContent(DateParser.formatW3CDateTime(entry.getPublished(), Locale.US));
eEntry.addContent(publishedElement); eEntry.addContent(publishedElement);
} }

View file

@ -22,6 +22,7 @@ import java.net.MalformedURLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.jdom2.Attribute; import org.jdom2.Attribute;
@ -85,12 +86,12 @@ public class Atom10Parser extends BaseWireFeedParser {
} }
@Override @Override
public WireFeed parse(final Document document, final boolean validate) throws IllegalArgumentException, FeedException { public WireFeed parse(final Document document, final boolean validate, final Locale locale) throws IllegalArgumentException, FeedException {
if (validate) { if (validate) {
validateFeed(document); validateFeed(document);
} }
final Element rssRoot = document.getRootElement(); final Element rssRoot = document.getRootElement();
return parseFeed(rssRoot); return parseFeed(rssRoot, locale);
} }
protected void validateFeed(final Document document) throws FeedException { protected void validateFeed(final Document document) throws FeedException {
@ -103,7 +104,7 @@ public class Atom10Parser extends BaseWireFeedParser {
// otherwise will have to check the document elements by hand. // otherwise will have to check the document elements by hand.
} }
protected WireFeed parseFeed(final Element eFeed) throws FeedException { protected WireFeed parseFeed(final Element eFeed, final Locale locale) throws FeedException {
String baseURI = null; String baseURI = null;
try { try {
@ -112,7 +113,7 @@ public class Atom10Parser extends BaseWireFeedParser {
throw new FeedException("ERROR while finding base URI of feed", e); throw new FeedException("ERROR while finding base URI of feed", e);
} }
final Feed feed = parseFeedMetadata(baseURI, eFeed); final Feed feed = parseFeedMetadata(baseURI, eFeed, locale);
feed.setStyleSheet(getStyleSheet(eFeed.getDocument())); feed.setStyleSheet(getStyleSheet(eFeed.getDocument()));
final String xmlBase = eFeed.getAttributeValue("base", Namespace.XML_NAMESPACE); final String xmlBase = eFeed.getAttributeValue("base", Namespace.XML_NAMESPACE);
@ -120,11 +121,11 @@ public class Atom10Parser extends BaseWireFeedParser {
feed.setXmlBase(xmlBase); feed.setXmlBase(xmlBase);
} }
feed.setModules(parseFeedModules(eFeed)); feed.setModules(parseFeedModules(eFeed, locale));
final List<Element> eList = eFeed.getChildren("entry", getAtomNamespace()); final List<Element> eList = eFeed.getChildren("entry", getAtomNamespace());
if (eList.size() > 0) { if (eList.size() > 0) {
feed.setEntries(parseEntries(feed, baseURI, eList)); feed.setEntries(parseEntries(feed, baseURI, eList, locale));
} }
final List<Element> foreignMarkup = extractForeignMarkup(eFeed, feed, getAtomNamespace()); final List<Element> foreignMarkup = extractForeignMarkup(eFeed, feed, getAtomNamespace());
@ -134,7 +135,7 @@ public class Atom10Parser extends BaseWireFeedParser {
return feed; return feed;
} }
private Feed parseFeedMetadata(final String baseURI, final Element eFeed) { private Feed parseFeedMetadata(final String baseURI, final Element eFeed, final Locale locale) {
final com.sun.syndication.feed.atom.Feed feed = new com.sun.syndication.feed.atom.Feed(getType()); final com.sun.syndication.feed.atom.Feed feed = new com.sun.syndication.feed.atom.Feed(getType());
Element e = eFeed.getChild("title", getAtomNamespace()); Element e = eFeed.getChild("title", getAtomNamespace());
@ -154,12 +155,12 @@ public class Atom10Parser extends BaseWireFeedParser {
eList = eFeed.getChildren("author", getAtomNamespace()); eList = eFeed.getChildren("author", getAtomNamespace());
if (eList.size() > 0) { if (eList.size() > 0) {
feed.setAuthors(parsePersons(baseURI, eList)); feed.setAuthors(parsePersons(baseURI, eList, locale));
} }
eList = eFeed.getChildren("contributor", getAtomNamespace()); eList = eFeed.getChildren("contributor", getAtomNamespace());
if (eList.size() > 0) { if (eList.size() > 0) {
feed.setContributors(parsePersons(baseURI, eList)); feed.setContributors(parsePersons(baseURI, eList, locale));
} }
e = eFeed.getChild("subtitle", getAtomNamespace()); e = eFeed.getChild("subtitle", getAtomNamespace());
@ -207,7 +208,7 @@ public class Atom10Parser extends BaseWireFeedParser {
e = eFeed.getChild("updated", getAtomNamespace()); e = eFeed.getChild("updated", getAtomNamespace());
if (e != null) { if (e != null) {
feed.setUpdated(DateParser.parseDate(e.getText())); feed.setUpdated(DateParser.parseDate(e.getText(), locale));
} }
return feed; return feed;
@ -281,7 +282,7 @@ public class Atom10Parser extends BaseWireFeedParser {
} }
} }
private Person parsePerson(final String baseURI, final Element ePerson) { private Person parsePerson(final String baseURI, final Element ePerson, final Locale locale) {
final Person person = new Person(); final Person person = new Person();
Element e = ePerson.getChild("name", getAtomNamespace()); Element e = ePerson.getChild("name", getAtomNamespace());
if (e != null) { if (e != null) {
@ -298,15 +299,15 @@ public class Atom10Parser extends BaseWireFeedParser {
if (e != null) { if (e != null) {
person.setEmail(e.getText()); person.setEmail(e.getText());
} }
person.setModules(parsePersonModules(ePerson)); person.setModules(parsePersonModules(ePerson, locale));
return person; return person;
} }
// List(Elements) -> List(Persons) // List(Elements) -> List(Persons)
private List<SyndPerson> parsePersons(final String baseURI, final List<Element> ePersons) { private List<SyndPerson> parsePersons(final String baseURI, final List<Element> ePersons, final Locale locale) {
final List<SyndPerson> persons = new ArrayList<SyndPerson>(); final List<SyndPerson> persons = new ArrayList<SyndPerson>();
for (int i = 0; i < ePersons.size(); i++) { for (int i = 0; i < ePersons.size(); i++) {
persons.add(parsePerson(baseURI, ePersons.get(i))); persons.add(parsePerson(baseURI, ePersons.get(i), locale));
} }
if (persons.size() > 0) { if (persons.size() > 0) {
return persons; return persons;
@ -355,10 +356,10 @@ public class Atom10Parser extends BaseWireFeedParser {
} }
// List(Elements) -> List(Entries) // List(Elements) -> List(Entries)
protected List<Entry> parseEntries(final Feed feed, final String baseURI, final List<Element> eEntries) { protected List<Entry> parseEntries(final Feed feed, final String baseURI, final List<Element> eEntries, final Locale locale) {
final List<Entry> entries = new ArrayList<Entry>(); final List<Entry> entries = new ArrayList<Entry>();
for (int i = 0; i < eEntries.size(); i++) { for (int i = 0; i < eEntries.size(); i++) {
entries.add(this.parseEntry(feed, eEntries.get(i), baseURI)); entries.add(this.parseEntry(feed, eEntries.get(i), baseURI, locale));
} }
if (entries.size() > 0) { if (entries.size() > 0) {
return entries; return entries;
@ -367,7 +368,7 @@ public class Atom10Parser extends BaseWireFeedParser {
} }
} }
protected Entry parseEntry(final Feed feed, final Element eEntry, final String baseURI) { protected Entry parseEntry(final Feed feed, final Element eEntry, final String baseURI, final Locale locale) {
final Entry entry = new Entry(); final Entry entry = new Entry();
final String xmlBase = eEntry.getAttributeValue("base", Namespace.XML_NAMESPACE); final String xmlBase = eEntry.getAttributeValue("base", Namespace.XML_NAMESPACE);
@ -389,12 +390,12 @@ public class Atom10Parser extends BaseWireFeedParser {
eList = eEntry.getChildren("author", getAtomNamespace()); eList = eEntry.getChildren("author", getAtomNamespace());
if (eList.size() > 0) { if (eList.size() > 0) {
entry.setAuthors(parsePersons(baseURI, eList)); entry.setAuthors(parsePersons(baseURI, eList, locale));
} }
eList = eEntry.getChildren("contributor", getAtomNamespace()); eList = eEntry.getChildren("contributor", getAtomNamespace());
if (eList.size() > 0) { if (eList.size() > 0) {
entry.setContributors(parsePersons(baseURI, eList)); entry.setContributors(parsePersons(baseURI, eList, locale));
} }
e = eEntry.getChild("id", getAtomNamespace()); e = eEntry.getChild("id", getAtomNamespace());
@ -404,12 +405,12 @@ public class Atom10Parser extends BaseWireFeedParser {
e = eEntry.getChild("updated", getAtomNamespace()); e = eEntry.getChild("updated", getAtomNamespace());
if (e != null) { if (e != null) {
entry.setUpdated(DateParser.parseDate(e.getText())); entry.setUpdated(DateParser.parseDate(e.getText(), locale));
} }
e = eEntry.getChild("published", getAtomNamespace()); e = eEntry.getChild("published", getAtomNamespace());
if (e != null) { if (e != null) {
entry.setPublished(DateParser.parseDate(e.getText())); entry.setPublished(DateParser.parseDate(e.getText(), locale));
} }
e = eEntry.getChild("summary", getAtomNamespace()); e = eEntry.getChild("summary", getAtomNamespace());
@ -435,10 +436,10 @@ public class Atom10Parser extends BaseWireFeedParser {
// TODO: SHOULD handle Atom entry source element // TODO: SHOULD handle Atom entry source element
e = eEntry.getChild("source", getAtomNamespace()); e = eEntry.getChild("source", getAtomNamespace());
if (e != null) { if (e != null) {
entry.setSource(parseFeedMetadata(baseURI, e)); entry.setSource(parseFeedMetadata(baseURI, e, locale));
} }
entry.setModules(parseItemModules(eEntry)); entry.setModules(parseItemModules(eEntry, locale));
final List<Element> foreignMarkup = extractForeignMarkup(eEntry, entry, getAtomNamespace()); final List<Element> foreignMarkup = extractForeignMarkup(eEntry, entry, getAtomNamespace());
if (foreignMarkup.size() > 0) { if (foreignMarkup.size() > 0) {
@ -659,7 +660,7 @@ public class Atom10Parser extends BaseWireFeedParser {
/** /**
* Parse entry from reader. * Parse entry from reader.
*/ */
public static Entry parseEntry(final Reader rd, final String baseURI) throws JDOMException, IOException, IllegalArgumentException, FeedException { public static Entry parseEntry(final Reader rd, final String baseURI, final Locale locale) throws JDOMException, IOException, IllegalArgumentException, FeedException {
// Parse entry into JDOM tree // Parse entry into JDOM tree
final SAXBuilder builder = new SAXBuilder(); final SAXBuilder builder = new SAXBuilder();
final Document entryDoc = builder.build(rd); final Document entryDoc = builder.build(rd);
@ -678,7 +679,7 @@ public class Atom10Parser extends BaseWireFeedParser {
feedDoc.getRootElement().setAttribute("base", baseURI, Namespace.XML_NAMESPACE); feedDoc.getRootElement().setAttribute("base", baseURI, Namespace.XML_NAMESPACE);
} }
final WireFeedInput input = new WireFeedInput(); final WireFeedInput input = new WireFeedInput(false, locale);
final Feed parsedFeed = (Feed) input.build(feedDoc); final Feed parsedFeed = (Feed) input.build(feedDoc);
return parsedFeed.getEntries().get(0); return parsedFeed.getEntries().get(0);
} }

View file

@ -3,6 +3,7 @@ package com.sun.syndication.io.impl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Attribute; import org.jdom2.Attribute;
import org.jdom2.Content; import org.jdom2.Content;
@ -67,16 +68,16 @@ public abstract class BaseWireFeedParser implements WireFeedParser {
return type; return type;
} }
protected List<Module> parseFeedModules(final Element feedElement) { protected List<Module> parseFeedModules(final Element feedElement, final Locale locale) {
return feedModuleParsers.parseModules(feedElement); return feedModuleParsers.parseModules(feedElement, locale);
} }
protected List<Module> parseItemModules(final Element itemElement) { protected List<Module> parseItemModules(final Element itemElement, final Locale locale) {
return itemModuleParsers.parseModules(itemElement); return itemModuleParsers.parseModules(itemElement, locale);
} }
protected List<Module> parsePersonModules(final Element itemElement) { protected List<Module> parsePersonModules(final Element itemElement, final Locale locale) {
return personModuleParsers.parseModules(itemElement); return personModuleParsers.parseModules(itemElement, locale);
} }
protected List<Element> extractForeignMarkup(final Element e, final Extendable ext, final Namespace basens) { protected List<Element> extractForeignMarkup(final Element e, final Extendable ext, final Namespace basens) {

View file

@ -21,6 +21,7 @@ import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Set; import java.util.Set;
import org.jdom2.Attribute; import org.jdom2.Attribute;
@ -124,7 +125,7 @@ public class DCModuleGenerator implements ModuleGenerator {
} }
if (dcModule.getDate() != null) { if (dcModule.getDate() != null) {
for (final Date date : dcModule.getDates()) { for (final Date date : dcModule.getDates()) {
element.addContent(generateSimpleElement("date", DateParser.formatW3CDateTime(date))); element.addContent(generateSimpleElement("date", DateParser.formatW3CDateTime(date, Locale.US)));
} }
} }
if (dcModule.getType() != null) { if (dcModule.getType() != null) {

View file

@ -19,6 +19,7 @@ package com.sun.syndication.io.impl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Attribute; import org.jdom2.Attribute;
import org.jdom2.Element; import org.jdom2.Element;
@ -65,10 +66,11 @@ public class DCModuleParser implements ModuleParser {
* <p> * <p>
* *
* @param dcRoot the root element containing the module elements. * @param dcRoot the root element containing the module elements.
* @param locale for date/time parsing
* @return the module parsed from the element tree, <i>null</i> if none. * @return the module parsed from the element tree, <i>null</i> if none.
*/ */
@Override @Override
public Module parse(final Element dcRoot) { public Module parse(final Element dcRoot, final Locale locale) {
boolean foundSomething = false; boolean foundSomething = false;
final DCModule dcm = new DCModuleImpl(); final DCModule dcm = new DCModuleImpl();
@ -105,7 +107,7 @@ public class DCModuleParser implements ModuleParser {
eList = dcRoot.getChildren("date", getDCNamespace()); eList = dcRoot.getChildren("date", getDCNamespace());
if (eList.size() > 0) { if (eList.size() > 0) {
foundSomething = true; foundSomething = true;
dcm.setDates(parseElementListDate(eList)); dcm.setDates(parseElementListDate(eList, locale));
} }
eList = dcRoot.getChildren("type", getDCNamespace()); eList = dcRoot.getChildren("type", getDCNamespace());
if (eList.size() > 0) { if (eList.size() > 0) {
@ -229,11 +231,11 @@ public class DCModuleParser implements ModuleParser {
* @param eList the list of elements to parse. * @param eList the list of elements to parse.
* @return the list of dates. * @return the list of dates.
*/ */
protected final List<Date> parseElementListDate(final List<Element> eList) { protected final List<Date> parseElementListDate(final List<Element> eList, final Locale locale) {
final List<Date> values = new ArrayList<Date>(); final List<Date> values = new ArrayList<Date>();
for (final Element element : eList) { for (final Element element : eList) {
final Element e = element; final Element e = element;
values.add(DateParser.parseDate(e.getText())); values.add(DateParser.parseDate(e.getText(), locale));
} }
return values; return values;

View file

@ -105,14 +105,14 @@ public class DateParser {
* the string with any of the masks. * the string with any of the masks.
* *
*/ */
private static Date parseUsingMask(final String[] masks, String sDate) { private static Date parseUsingMask(final String[] masks, String sDate, final Locale locale) {
if (sDate != null) { if (sDate != null) {
sDate = sDate.trim(); sDate = sDate.trim();
} }
ParsePosition pp = null; ParsePosition pp = null;
Date d = null; Date d = null;
for (int i = 0; d == null && i < masks.length; i++) { for (int i = 0; d == null && i < masks.length; i++) {
final DateFormat df = new SimpleDateFormat(masks[i], Locale.US); final DateFormat df = new SimpleDateFormat(masks[i], locale);
// df.setLenient(false); // df.setLenient(false);
df.setLenient(true); df.setLenient(true);
try { try {
@ -154,14 +154,14 @@ public class DateParser {
* a Date. * a Date.
* *
*/ */
public static Date parseRFC822(String sDate) { public static Date parseRFC822(String sDate, final Locale locale) {
final int utIndex = sDate.indexOf(" UT"); final int utIndex = sDate.indexOf(" UT");
if (utIndex > -1) { if (utIndex > -1) {
final String pre = sDate.substring(0, utIndex); final String pre = sDate.substring(0, utIndex);
final String post = sDate.substring(utIndex + 3); final String post = sDate.substring(utIndex + 3);
sDate = pre + " GMT" + post; sDate = pre + " GMT" + post;
} }
return parseUsingMask(RFC822_MASKS, sDate); return parseUsingMask(RFC822_MASKS, sDate, locale);
} }
/** /**
@ -186,7 +186,7 @@ public class DateParser {
* string into a Date. * string into a Date.
* *
*/ */
public static Date parseW3CDateTime(String sDate) { public static Date parseW3CDateTime(String sDate, final Locale locale) {
// if sDate has time on it, it injects 'GTM' before de TZ displacement // if sDate has time on it, it injects 'GTM' before de TZ displacement
// to // to
// allow the SimpleDateFormat parser to parse it properly // allow the SimpleDateFormat parser to parse it properly
@ -211,7 +211,7 @@ public class DateParser {
} else { } else {
sDate += "T00:00GMT"; sDate += "T00:00GMT";
} }
return parseUsingMask(W3CDATETIME_MASKS, sDate); return parseUsingMask(W3CDATETIME_MASKS, sDate, locale);
} }
/** /**
@ -225,12 +225,12 @@ public class DateParser {
* string into a Date. * string into a Date.
* *
* */ * */
public static Date parseDate(final String sDate) { public static Date parseDate(final String sDate, final Locale locale) {
Date d = parseW3CDateTime(sDate); Date d = parseW3CDateTime(sDate, locale);
if (d == null) { if (d == null) {
d = parseRFC822(sDate); d = parseRFC822(sDate, locale);
if (d == null && ADDITIONAL_MASKS.length > 0) { if (d == null && ADDITIONAL_MASKS.length > 0) {
d = parseUsingMask(ADDITIONAL_MASKS, sDate); d = parseUsingMask(ADDITIONAL_MASKS, sDate, locale);
} }
} }
return d; return d;
@ -248,8 +248,8 @@ public class DateParser {
* if it was not possible to parse the date. * if it was not possible to parse the date.
* *
*/ */
public static String formatRFC822(final Date date) { public static String formatRFC822(final Date date, final Locale locale) {
final SimpleDateFormat dateFormater = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US); final SimpleDateFormat dateFormater = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", locale);
dateFormater.setTimeZone(TimeZone.getTimeZone("GMT")); dateFormater.setTimeZone(TimeZone.getTimeZone("GMT"));
return dateFormater.format(date); return dateFormater.format(date);
} }
@ -266,8 +266,8 @@ public class DateParser {
* <b>null</b> if it was not possible to parse the date. * <b>null</b> if it was not possible to parse the date.
* *
*/ */
public static String formatW3CDateTime(final Date date) { public static String formatW3CDateTime(final Date date, final Locale locale) {
final SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); final SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", locale);
dateFormater.setTimeZone(TimeZone.getTimeZone("GMT")); dateFormater.setTimeZone(TimeZone.getTimeZone("GMT"));
return dateFormater.format(date); return dateFormater.format(date);
} }

View file

@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Element; import org.jdom2.Element;
import org.jdom2.Namespace; import org.jdom2.Namespace;
@ -42,7 +43,7 @@ public class ModuleParsers extends PluginManager<ModuleParser> {
return getKeys(); return getKeys();
} }
public List<Module> parseModules(final Element root) { public List<Module> parseModules(final Element root, final Locale locale) {
final List<ModuleParser> parsers = getPlugins(); final List<ModuleParser> parsers = getPlugins();
List<Module> modules = null; List<Module> modules = null;
for (int i = 0; i < parsers.size(); i++) { for (int i = 0; i < parsers.size(); i++) {
@ -50,7 +51,7 @@ public class ModuleParsers extends PluginManager<ModuleParser> {
final String namespaceUri = parser.getNamespaceUri(); final String namespaceUri = parser.getNamespaceUri();
final Namespace namespace = Namespace.getNamespace(namespaceUri); final Namespace namespace = Namespace.getNamespace(namespaceUri);
if (hasElementsFrom(root, namespace)) { if (hasElementsFrom(root, namespace)) {
final Module module = parser.parse(root); final Module module = parser.parse(root, locale);
if (module != null) { if (module != null) {
if (modules == null) { if (modules == null) {
modules = new ArrayList<Module>(); modules = new ArrayList<Module>();

View file

@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Document; import org.jdom2.Document;
import org.jdom2.Element; import org.jdom2.Element;
@ -76,12 +77,12 @@ public class RSS090Parser extends BaseWireFeedParser {
} }
@Override @Override
public WireFeed parse(final Document document, final boolean validate) throws IllegalArgumentException, FeedException { public WireFeed parse(final Document document, final boolean validate, final Locale locale) throws IllegalArgumentException, FeedException {
if (validate) { if (validate) {
validateFeed(document); validateFeed(document);
} }
final Element rssRoot = document.getRootElement(); final Element rssRoot = document.getRootElement();
return parseChannel(rssRoot); return parseChannel(rssRoot, locale);
} }
protected void validateFeed(final Document document) throws FeedException { protected void validateFeed(final Document document) throws FeedException {
@ -146,7 +147,7 @@ public class RSS090Parser extends BaseWireFeedParser {
* @param rssRoot the root element of the RSS document to parse. * @param rssRoot the root element of the RSS document to parse.
* @return the parsed Channel bean. * @return the parsed Channel bean.
*/ */
protected WireFeed parseChannel(final Element rssRoot) { protected WireFeed parseChannel(final Element rssRoot, final Locale locale) {
final Element eChannel = rssRoot.getChild("channel", getRSSNamespace()); final Element eChannel = rssRoot.getChild("channel", getRSSNamespace());
final Channel channel = new Channel(getType()); final Channel channel = new Channel(getType());
@ -174,8 +175,8 @@ public class RSS090Parser extends BaseWireFeedParser {
// and not inside the channel itself. So we also need to look for // and not inside the channel itself. So we also need to look for
// channel modules from the root RSS element. // channel modules from the root RSS element.
final List<Module> allFeedModules = new ArrayList<Module>(); final List<Module> allFeedModules = new ArrayList<Module>();
final List<Module> rootModules = parseFeedModules(rssRoot); final List<Module> rootModules = parseFeedModules(rssRoot, locale);
final List<Module> channelModules = parseFeedModules(eChannel); final List<Module> channelModules = parseFeedModules(eChannel, locale);
if (rootModules != null) { if (rootModules != null) {
allFeedModules.addAll(rootModules); allFeedModules.addAll(rootModules);
} }
@ -183,7 +184,7 @@ public class RSS090Parser extends BaseWireFeedParser {
allFeedModules.addAll(channelModules); allFeedModules.addAll(channelModules);
} }
channel.setModules(allFeedModules); channel.setModules(allFeedModules);
channel.setItems(parseItems(rssRoot)); channel.setItems(parseItems(rssRoot, locale));
final List<Element> foreignMarkup = extractForeignMarkup(eChannel, channel, getRSSNamespace()); final List<Element> foreignMarkup = extractForeignMarkup(eChannel, channel, getRSSNamespace());
if (foreignMarkup.size() > 0) { if (foreignMarkup.size() > 0) {
@ -267,13 +268,13 @@ public class RSS090Parser extends BaseWireFeedParser {
* items information. * items information.
* @return a list with all the parsed RSSItem beans. * @return a list with all the parsed RSSItem beans.
*/ */
protected List<Item> parseItems(final Element rssRoot) { protected List<Item> parseItems(final Element rssRoot, final Locale locale) {
final Collection<Element> eItems = getItems(rssRoot); final Collection<Element> eItems = getItems(rssRoot);
final List<Item> items = new ArrayList<Item>(); final List<Item> items = new ArrayList<Item>();
for (final Element element : eItems) { for (final Element element : eItems) {
final Element eItem = element; final Element eItem = element;
items.add(parseItem(rssRoot, eItem)); items.add(parseItem(rssRoot, eItem, locale));
} }
return items; return items;
} }
@ -289,7 +290,7 @@ public class RSS090Parser extends BaseWireFeedParser {
* @param eItem the item element to parse. * @param eItem the item element to parse.
* @return the parsed RSSItem bean. * @return the parsed RSSItem bean.
*/ */
protected Item parseItem(final Element rssRoot, final Element eItem) { protected Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
final Item item = new Item(); final Item item = new Item();
Element e = eItem.getChild("title", getRSSNamespace()); Element e = eItem.getChild("title", getRSSNamespace());
if (e != null) { if (e != null) {
@ -301,7 +302,7 @@ public class RSS090Parser extends BaseWireFeedParser {
item.setUri(e.getText()); item.setUri(e.getText());
} }
item.setModules(parseItemModules(eItem)); item.setModules(parseItemModules(eItem, locale));
final List<Element> foreignMarkup = extractForeignMarkup(eItem, item, getRSSNamespace()); final List<Element> foreignMarkup = extractForeignMarkup(eItem, item, getRSSNamespace());
// content:encoded elements are treated special, without a module, they // content:encoded elements are treated special, without a module, they

View file

@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Attribute; import org.jdom2.Attribute;
import org.jdom2.Document; import org.jdom2.Document;
@ -201,13 +202,13 @@ public class RSS091UserlandGenerator extends RSS090Generator {
final Date pubDate = channel.getPubDate(); final Date pubDate = channel.getPubDate();
if (pubDate != null) { if (pubDate != null) {
eChannel.addContent(generateSimpleElement("pubDate", DateParser.formatRFC822(pubDate))); eChannel.addContent(generateSimpleElement("pubDate", DateParser.formatRFC822(pubDate, Locale.US)));
} }
final Date lastBuildDate = channel.getLastBuildDate(); final Date lastBuildDate = channel.getLastBuildDate();
if (lastBuildDate != null) { if (lastBuildDate != null) {
eChannel.addContent(generateSimpleElement("lastBuildDate", DateParser.formatRFC822(lastBuildDate))); eChannel.addContent(generateSimpleElement("lastBuildDate", DateParser.formatRFC822(lastBuildDate, Locale.US)));
} }
final String docs = channel.getDocs(); final String docs = channel.getDocs();

View file

@ -19,6 +19,7 @@ package com.sun.syndication.io.impl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Attribute; import org.jdom2.Attribute;
import org.jdom2.Document; import org.jdom2.Document;
@ -86,8 +87,8 @@ public class RSS091UserlandParser extends RSS090Parser {
* @return the parsed Channel bean. * @return the parsed Channel bean.
*/ */
@Override @Override
protected WireFeed parseChannel(final Element rssRoot) { protected WireFeed parseChannel(final Element rssRoot, final Locale locale) {
final Channel channel = (Channel) super.parseChannel(rssRoot); final Channel channel = (Channel) super.parseChannel(rssRoot, locale);
final Element eChannel = rssRoot.getChild("channel", getRSSNamespace()); final Element eChannel = rssRoot.getChild("channel", getRSSNamespace());
@ -105,11 +106,11 @@ public class RSS091UserlandParser extends RSS090Parser {
} }
e = eChannel.getChild("pubDate", getRSSNamespace()); e = eChannel.getChild("pubDate", getRSSNamespace());
if (e != null) { if (e != null) {
channel.setPubDate(DateParser.parseDate(e.getText())); channel.setPubDate(DateParser.parseDate(e.getText(), locale));
} }
e = eChannel.getChild("lastBuildDate", getRSSNamespace()); e = eChannel.getChild("lastBuildDate", getRSSNamespace());
if (e != null) { if (e != null) {
channel.setLastBuildDate(DateParser.parseDate(e.getText())); channel.setLastBuildDate(DateParser.parseDate(e.getText(), locale));
} }
e = eChannel.getChild("docs", getRSSNamespace()); e = eChannel.getChild("docs", getRSSNamespace());
if (e != null) { if (e != null) {
@ -251,8 +252,8 @@ public class RSS091UserlandParser extends RSS090Parser {
* @return the parsed RSSItem bean. * @return the parsed RSSItem bean.
*/ */
@Override @Override
protected Item parseItem(final Element rssRoot, final Element eItem) { protected Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
final Item item = super.parseItem(rssRoot, eItem); final Item item = super.parseItem(rssRoot, eItem, locale);
final Element e = eItem.getChild("description", getRSSNamespace()); final Element e = eItem.getChild("description", getRSSNamespace());
if (e != null) { if (e != null) {
item.setDescription(parseItemDescription(rssRoot, e)); item.setDescription(parseItemDescription(rssRoot, e));

View file

@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Content; import org.jdom2.Content;
import org.jdom2.Element; import org.jdom2.Element;
@ -50,8 +51,8 @@ public class RSS092Parser extends RSS091UserlandParser {
} }
@Override @Override
protected WireFeed parseChannel(final Element rssRoot) { protected WireFeed parseChannel(final Element rssRoot, final Locale locale) {
final Channel channel = (Channel) super.parseChannel(rssRoot); final Channel channel = (Channel) super.parseChannel(rssRoot, locale);
final Element eChannel = rssRoot.getChild("channel", getRSSNamespace()); final Element eChannel = rssRoot.getChild("channel", getRSSNamespace());
final Element eCloud = eChannel.getChild("cloud", getRSSNamespace()); final Element eCloud = eChannel.getChild("cloud", getRSSNamespace());
@ -91,8 +92,8 @@ public class RSS092Parser extends RSS091UserlandParser {
} }
@Override @Override
protected Item parseItem(final Element rssRoot, final Element eItem) { protected Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
final Item item = super.parseItem(rssRoot, eItem); final Item item = super.parseItem(rssRoot, eItem, locale);
Element e = eItem.getChild("source", getRSSNamespace()); Element e = eItem.getChild("source", getRSSNamespace());
if (e != null) { if (e != null) {

View file

@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Element; import org.jdom2.Element;
@ -47,12 +48,12 @@ public class RSS093Generator extends RSS092Generator {
final Date pubDate = item.getPubDate(); final Date pubDate = item.getPubDate();
if (pubDate != null) { if (pubDate != null) {
eItem.addContent(generateSimpleElement("pubDate", DateParser.formatRFC822(pubDate))); eItem.addContent(generateSimpleElement("pubDate", DateParser.formatRFC822(pubDate, Locale.US)));
} }
final Date expirationDate = item.getExpirationDate(); final Date expirationDate = item.getExpirationDate();
if (expirationDate != null) { if (expirationDate != null) {
eItem.addContent(generateSimpleElement("expirationDate", DateParser.formatRFC822(expirationDate))); eItem.addContent(generateSimpleElement("expirationDate", DateParser.formatRFC822(expirationDate, Locale.US)));
} }
} }

View file

@ -16,6 +16,8 @@
*/ */
package com.sun.syndication.io.impl; package com.sun.syndication.io.impl;
import java.util.Locale;
import org.jdom2.Element; import org.jdom2.Element;
import com.sun.syndication.feed.rss.Item; import com.sun.syndication.feed.rss.Item;
@ -38,15 +40,15 @@ public class RSS093Parser extends RSS092Parser {
} }
@Override @Override
protected Item parseItem(final Element rssRoot, final Element eItem) { protected Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
final Item item = super.parseItem(rssRoot, eItem); final Item item = super.parseItem(rssRoot, eItem, locale);
Element e = eItem.getChild("pubDate", getRSSNamespace()); Element e = eItem.getChild("pubDate", getRSSNamespace());
if (e != null) { if (e != null) {
item.setPubDate(DateParser.parseDate(e.getText())); item.setPubDate(DateParser.parseDate(e.getText(), locale));
} }
e = eItem.getChild("expirationDate", getRSSNamespace()); e = eItem.getChild("expirationDate", getRSSNamespace());
if (e != null) { if (e != null) {
item.setExpirationDate(DateParser.parseDate(e.getText())); item.setExpirationDate(DateParser.parseDate(e.getText(), locale));
} }
e = eItem.getChild("description", getRSSNamespace()); e = eItem.getChild("description", getRSSNamespace());
if (e != null) { if (e != null) {

View file

@ -17,6 +17,7 @@
package com.sun.syndication.io.impl; package com.sun.syndication.io.impl;
import java.util.List; import java.util.List;
import java.util.Locale;
import org.jdom2.Element; import org.jdom2.Element;
@ -43,8 +44,8 @@ public class RSS094Parser extends RSS093Parser {
} }
@Override @Override
protected WireFeed parseChannel(final Element rssRoot) { protected WireFeed parseChannel(final Element rssRoot, final Locale locale) {
final Channel channel = (Channel) super.parseChannel(rssRoot); final Channel channel = (Channel) super.parseChannel(rssRoot, locale);
final Element eChannel = rssRoot.getChild("channel", getRSSNamespace()); final Element eChannel = rssRoot.getChild("channel", getRSSNamespace());
final List<Element> eCats = eChannel.getChildren("category", getRSSNamespace()); final List<Element> eCats = eChannel.getChildren("category", getRSSNamespace());
@ -67,8 +68,8 @@ public class RSS094Parser extends RSS093Parser {
} }
@Override @Override
public Item parseItem(final Element rssRoot, final Element eItem) { public Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
final Item item = super.parseItem(rssRoot, eItem); final Item item = super.parseItem(rssRoot, eItem, locale);
item.setExpirationDate(null); item.setExpirationDate(null);
Element e = eItem.getChild("author", getRSSNamespace()); Element e = eItem.getChild("author", getRSSNamespace());

View file

@ -16,6 +16,8 @@
*/ */
package com.sun.syndication.io.impl; package com.sun.syndication.io.impl;
import java.util.Locale;
import org.jdom2.Document; import org.jdom2.Document;
import org.jdom2.Element; import org.jdom2.Element;
import org.jdom2.Namespace; import org.jdom2.Namespace;
@ -96,8 +98,8 @@ public class RSS10Parser extends RSS090Parser {
* @return the parsed RSSItem bean. * @return the parsed RSSItem bean.
*/ */
@Override @Override
protected Item parseItem(final Element rssRoot, final Element eItem) { protected Item parseItem(final Element rssRoot, final Element eItem, final Locale locale) {
final Item item = super.parseItem(rssRoot, eItem); final Item item = super.parseItem(rssRoot, eItem, locale);
final Element e = eItem.getChild("description", getRSSNamespace()); final Element e = eItem.getChild("description", getRSSNamespace());
if (e != null) { if (e != null) {
item.setDescription(parseItemDescription(rssRoot, e)); item.setDescription(parseItemDescription(rssRoot, e));
@ -119,8 +121,8 @@ public class RSS10Parser extends RSS090Parser {
} }
@Override @Override
protected WireFeed parseChannel(final Element rssRoot) { protected WireFeed parseChannel(final Element rssRoot, final Locale locale) {
final Channel channel = (Channel) super.parseChannel(rssRoot); final Channel channel = (Channel) super.parseChannel(rssRoot, locale);
final Element eChannel = rssRoot.getChild("channel", getRSSNamespace()); final Element eChannel = rssRoot.getChild("channel", getRSSNamespace());
final String uri = eChannel.getAttributeValue("about", getRDFNamespace()); final String uri = eChannel.getAttributeValue("about", getRDFNamespace());

View file

@ -16,6 +16,8 @@
*/ */
package com.sun.syndication.io.impl; package com.sun.syndication.io.impl;
import java.util.Locale;
import org.jdom2.Document; import org.jdom2.Document;
import org.jdom2.Element; import org.jdom2.Element;
import org.jdom2.Namespace; import org.jdom2.Namespace;
@ -68,8 +70,8 @@ public class RSS20wNSParser extends RSS20Parser {
* *
*/ */
@Override @Override
protected WireFeed parseChannel(final Element rssRoot) { protected WireFeed parseChannel(final Element rssRoot, final Locale locale) {
final WireFeed wFeed = super.parseChannel(rssRoot); final WireFeed wFeed = super.parseChannel(rssRoot, locale);
wFeed.setFeedType("rss_2.0"); wFeed.setFeedType("rss_2.0");
return wFeed; return wFeed;
} }

View file

@ -18,6 +18,7 @@ package com.sun.syndication.io.impl;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Locale;
import java.util.Set; import java.util.Set;
import org.jdom2.Element; import org.jdom2.Element;
@ -87,7 +88,7 @@ public class SyModuleGenerator implements ModuleGenerator {
if (syModule.getUpdateBase() != null) { if (syModule.getUpdateBase() != null) {
final Element updateBaseElement = new Element("updateBase", SY_NS); final Element updateBaseElement = new Element("updateBase", SY_NS);
updateBaseElement.addContent(DateParser.formatW3CDateTime(syModule.getUpdateBase())); updateBaseElement.addContent(DateParser.formatW3CDateTime(syModule.getUpdateBase(), Locale.US));
element.addContent(updateBaseElement); element.addContent(updateBaseElement);
} }
} }

View file

@ -16,6 +16,8 @@
*/ */
package com.sun.syndication.io.impl; package com.sun.syndication.io.impl;
import java.util.Locale;
import org.jdom2.Element; import org.jdom2.Element;
import org.jdom2.Namespace; import org.jdom2.Namespace;
@ -37,7 +39,7 @@ public class SyModuleParser implements ModuleParser {
} }
@Override @Override
public Module parse(final Element syndRoot) { public Module parse(final Element syndRoot, final Locale locale) {
boolean foundSomething = false; boolean foundSomething = false;
final SyModule sm = new SyModuleImpl(); final SyModule sm = new SyModuleImpl();
@ -54,7 +56,7 @@ public class SyModuleParser implements ModuleParser {
e = syndRoot.getChild("updateBase", getDCNamespace()); e = syndRoot.getChild("updateBase", getDCNamespace());
if (e != null) { if (e != null) {
foundSomething = true; foundSomething = true;
sm.setUpdateBase(DateParser.parseDate(e.getText())); sm.setUpdateBase(DateParser.parseDate(e.getText(), locale));
} }
if (foundSomething) { if (foundSomething) {
return sm; return sm;

View file

@ -8,6 +8,7 @@ package com.sun.syndication.unittest;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndImage; import com.sun.syndication.feed.synd.SyndImage;
@ -77,7 +78,7 @@ public abstract class SyndFeedTest extends FeedTest {
*/ */
public void testPublishedDate() throws Exception { public void testPublishedDate() throws Exception {
assertEquals(DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT"), this.getCachedSyndFeed().getPublishedDate()); assertEquals(DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT", Locale.US), this.getCachedSyndFeed().getPublishedDate());
} }
// how do i get height and width? // how do i get height and width?

View file

@ -19,6 +19,7 @@ package com.sun.syndication.unittest;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone; import java.util.TimeZone;
import junit.framework.TestCase; import junit.framework.TestCase;
@ -39,7 +40,7 @@ public class TestDateParser extends TestCase {
// four-digit year // four-digit year
String sDate = "Tue, 19 Jul 2005 23:00:51 GMT"; String sDate = "Tue, 19 Jul 2005 23:00:51 GMT";
cal.setTime(DateParser.parseRFC822(sDate)); cal.setTime(DateParser.parseRFC822(sDate, Locale.US));
assertEquals(2005, cal.get(Calendar.YEAR)); assertEquals(2005, cal.get(Calendar.YEAR));
assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed
@ -51,7 +52,7 @@ public class TestDateParser extends TestCase {
// two-digit year // two-digit year
sDate = "Tue, 19 Jul 05 23:00:51 GMT"; sDate = "Tue, 19 Jul 05 23:00:51 GMT";
cal.setTime(DateParser.parseRFC822(sDate)); cal.setTime(DateParser.parseRFC822(sDate, Locale.US));
assertEquals(2005, cal.get(Calendar.YEAR)); assertEquals(2005, cal.get(Calendar.YEAR));
assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed
@ -63,7 +64,7 @@ public class TestDateParser extends TestCase {
// four-digit year // four-digit year
sDate = "Tue, 19 Jul 2005 23:00:51 UT"; sDate = "Tue, 19 Jul 2005 23:00:51 UT";
cal.setTime(DateParser.parseRFC822(sDate)); cal.setTime(DateParser.parseRFC822(sDate, Locale.US));
assertEquals(2005, cal.get(Calendar.YEAR)); assertEquals(2005, cal.get(Calendar.YEAR));
assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed
@ -75,7 +76,7 @@ public class TestDateParser extends TestCase {
// two-digit year // two-digit year
sDate = "Tue, 19 Jul 05 23:00:51 UT"; sDate = "Tue, 19 Jul 05 23:00:51 UT";
cal.setTime(DateParser.parseRFC822(sDate)); cal.setTime(DateParser.parseRFC822(sDate, Locale.US));
assertEquals(2005, cal.get(Calendar.YEAR)); assertEquals(2005, cal.get(Calendar.YEAR));
assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed assertEquals(6, cal.get(Calendar.MONTH)); // month is zero-indexed
@ -87,11 +88,11 @@ public class TestDateParser extends TestCase {
// RFC822 // RFC822
sDate = "Tue, 19 Jul 2005 23:00:51 GMT"; sDate = "Tue, 19 Jul 2005 23:00:51 GMT";
assertNotNull(DateParser.parseDate(sDate)); assertNotNull(DateParser.parseDate(sDate, Locale.US));
// RFC822 // RFC822
sDate = "Tue, 19 Jul 05 23:00:51 GMT"; sDate = "Tue, 19 Jul 05 23:00:51 GMT";
assertNotNull(DateParser.parseDate(sDate)); assertNotNull(DateParser.parseDate(sDate, Locale.US));
final Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT")); final Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
c.set(2000, Calendar.JANUARY, 01, 0, 0, 0); c.set(2000, Calendar.JANUARY, 01, 0, 0, 0);
@ -99,31 +100,31 @@ public class TestDateParser extends TestCase {
// W3C // W3C
sDate = "2000-01-01T00:00:00Z"; sDate = "2000-01-01T00:00:00Z";
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate).getTime() / 1000); assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate, Locale.US).getTime() / 1000);
// W3C // W3C
sDate = "2000-01-01T00:00Z"; sDate = "2000-01-01T00:00Z";
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate).getTime() / 1000); assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate, Locale.US).getTime() / 1000);
// W3C // W3C
sDate = "2000-01-01"; sDate = "2000-01-01";
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate).getTime() / 1000); assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate, Locale.US).getTime() / 1000);
// W3C // W3C
sDate = "2000-01"; sDate = "2000-01";
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate).getTime() / 1000); assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate, Locale.US).getTime() / 1000);
// W3C // W3C
sDate = "2000"; sDate = "2000";
assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate).getTime() / 1000); assertEquals(expectedDate.getTime() / 1000, DateParser.parseDate(sDate, Locale.US).getTime() / 1000);
// EXTRA // EXTRA
sDate = "18:10 2000/10/10"; sDate = "18:10 2000/10/10";
assertNotNull(DateParser.parseDate(sDate)); assertNotNull(DateParser.parseDate(sDate, Locale.US));
// INVALID // INVALID
sDate = "X20:10 2000-10-10"; sDate = "X20:10 2000-10-10";
assertNull(DateParser.parseDate(sDate)); assertNull(DateParser.parseDate(sDate, Locale.US));
} }
} }

View file

@ -6,6 +6,7 @@ package com.sun.syndication.unittest;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.io.impl.DateParser; import com.sun.syndication.io.impl.DateParser;
@ -48,7 +49,7 @@ public class TestSyndFeedAtom03 extends SyndFeedTest {
@Override @Override
public void testPublishedDate() throws Exception { public void testPublishedDate() throws Exception {
final Date d = DateParser.parseW3CDateTime("2000-01-01T00:00:00Z"); final Date d = DateParser.parseW3CDateTime("2000-01-01T00:00:00Z", Locale.US);
assertEquals(this.getCachedSyndFeed().getPublishedDate(), d); assertEquals(this.getCachedSyndFeed().getPublishedDate(), d);
} }
@ -58,7 +59,7 @@ public class TestSyndFeedAtom03 extends SyndFeedTest {
assertProperty(entry.getTitle(), "feed.entry[" + i + "].title"); assertProperty(entry.getTitle(), "feed.entry[" + i + "].title");
assertProperty(entry.getLink(), "feed.entry[" + i + "].link^href"); assertProperty(entry.getLink(), "feed.entry[" + i + "].link^href");
assertProperty(entry.getAuthor(), "feed.entry[" + i + "].author.name"); assertProperty(entry.getAuthor(), "feed.entry[" + i + "].author.name");
final Date d = DateParser.parseW3CDateTime("2000-0" + (i + 1) + "-01T00:00:00Z"); final Date d = DateParser.parseW3CDateTime("2000-0" + (i + 1) + "-01T00:00:00Z", Locale.US);
assertEquals(entry.getPublishedDate(), d); assertEquals(entry.getPublishedDate(), d);
assertProperty(entry.getDescription().getValue(), "feed.entry[" + i + "].summary"); assertProperty(entry.getDescription().getValue(), "feed.entry[" + i + "].summary");
assertProperty(entry.getContents().get(0).getValue(), "feed.entry[" + i + "].content[0]"); assertProperty(entry.getContents().get(0).getValue(), "feed.entry[" + i + "].content[0]");

View file

@ -8,6 +8,7 @@ package com.sun.syndication.unittest;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import com.sun.syndication.feed.module.DCModule; import com.sun.syndication.feed.module.DCModule;
import com.sun.syndication.feed.module.SyModule; import com.sun.syndication.feed.module.SyModule;
@ -67,7 +68,7 @@ public class TestSyndFeedAtom03DCSyModules extends TestSyndFeedAtom03 {
assertProperty(dc.getPublisher(), prefix + "dc:publisher"); assertProperty(dc.getPublisher(), prefix + "dc:publisher");
assertProperty(dc.getContributors().get(0), prefix + "dc:contributor[0]"); assertProperty(dc.getContributors().get(0), prefix + "dc:contributor[0]");
assertProperty(dc.getContributors().get(1), prefix + "dc:contributor[1]"); assertProperty(dc.getContributors().get(1), prefix + "dc:contributor[1]");
final Date date = DateParser.parseW3CDateTime("2000-0" + (index + 1) + "-01T00:00:00Z"); final Date date = DateParser.parseW3CDateTime("2000-0" + (index + 1) + "-01T00:00:00Z", Locale.US);
assertEquals(dc.getDate(), date); assertEquals(dc.getDate(), date);
assertProperty(dc.getType(), prefix + "dc:type"); assertProperty(dc.getType(), prefix + "dc:type");
assertProperty(dc.getFormat(), prefix + "dc:format"); assertProperty(dc.getFormat(), prefix + "dc:format");
@ -93,7 +94,7 @@ public class TestSyndFeedAtom03DCSyModules extends TestSyndFeedAtom03 {
assertNotNull(sy); assertNotNull(sy);
assertEquals(sy.getUpdatePeriod(), SyModule.HOURLY); assertEquals(sy.getUpdatePeriod(), SyModule.HOURLY);
assertEquals(sy.getUpdateFrequency(), 100); assertEquals(sy.getUpdateFrequency(), 100);
final Date date = DateParser.parseW3CDateTime("2001-01-01T01:00+00:00"); final Date date = DateParser.parseW3CDateTime("2001-01-01T01:00+00:00", Locale.US);
assertEquals(sy.getUpdateBase(), date); assertEquals(sy.getUpdateBase(), date);
} }

View file

@ -6,6 +6,7 @@ package com.sun.syndication.unittest;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import com.sun.syndication.feed.atom.Entry; import com.sun.syndication.feed.atom.Entry;
import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndEntry;
@ -68,7 +69,7 @@ public class TestSyndFeedAtom10 extends TestSyndFeedAtom03 {
@Override @Override
public void testPublishedDate() throws Exception { public void testPublishedDate() throws Exception {
final Date d = DateParser.parseW3CDateTime("2000-01-01T00:00:00Z"); final Date d = DateParser.parseW3CDateTime("2000-01-01T00:00:00Z", Locale.US);
assertEquals(this.getCachedSyndFeed().getPublishedDate(), d); assertEquals(this.getCachedSyndFeed().getPublishedDate(), d);
} }
@ -84,7 +85,7 @@ public class TestSyndFeedAtom10 extends TestSyndFeedAtom03 {
assertEquals("http://example.com/blog/entry" + (i + 1), entry.getLink()); assertEquals("http://example.com/blog/entry" + (i + 1), entry.getLink());
assertEquals(entry.getEnclosures().get(0).getUrl(), "http://example.com/blog/enclosure" + (i + 1) + ".gif"); assertEquals(entry.getEnclosures().get(0).getUrl(), "http://example.com/blog/enclosure" + (i + 1) + ".gif");
assertProperty(entry.getAuthor(), "feed.entry[" + i + "].author.name"); assertProperty(entry.getAuthor(), "feed.entry[" + i + "].author.name");
final Date d = DateParser.parseW3CDateTime("2000-0" + (i + 1) + "-01T01:00:00Z"); final Date d = DateParser.parseW3CDateTime("2000-0" + (i + 1) + "-01T01:00:00Z", Locale.US);
assertEquals(entry.getPublishedDate(), d); assertEquals(entry.getPublishedDate(), d);
assertProperty(entry.getDescription().getValue(), "feed.entry[" + i + "].summary"); assertProperty(entry.getDescription().getValue(), "feed.entry[" + i + "].summary");
assertProperty(entry.getContents().get(0).getValue(), "feed.entry[" + i + "].content[0]"); assertProperty(entry.getContents().get(0).getValue(), "feed.entry[" + i + "].content[0]");

View file

@ -6,6 +6,7 @@ package com.sun.syndication.unittest;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.io.impl.DateParser; import com.sun.syndication.io.impl.DateParser;
@ -39,7 +40,7 @@ public class TestSyndFeedRSS091N extends SyndFeedTest {
@Override @Override
public void testPublishedDate() throws Exception { public void testPublishedDate() throws Exception {
final Date d = DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT"); final Date d = DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT", Locale.US);
assertEquals(this.getCachedSyndFeed().getPublishedDate(), d); assertEquals(this.getCachedSyndFeed().getPublishedDate(), d);
} }

View file

@ -6,6 +6,7 @@ package com.sun.syndication.unittest;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.io.impl.DateParser; import com.sun.syndication.io.impl.DateParser;
@ -33,7 +34,7 @@ public class TestSyndFeedRSS093 extends TestSyndFeedRSS092 {
super.testItem(i); super.testItem(i);
final List<SyndEntry> items = this.getCachedSyndFeed().getEntries(); final List<SyndEntry> items = this.getCachedSyndFeed().getEntries();
final SyndEntry entry = items.get(i); final SyndEntry entry = items.get(i);
final Date d = DateParser.parseRFC822("Mon, 0" + (i + 1) + " Jan 2001 00:00:00 GMT"); final Date d = DateParser.parseRFC822("Mon, 0" + (i + 1) + " Jan 2001 00:00:00 GMT", Locale.US);
assertEquals(entry.getPublishedDate(), d); assertEquals(entry.getPublishedDate(), d);
testDescriptionType(entry, i); testDescriptionType(entry, i);
} }
@ -44,8 +45,8 @@ public class TestSyndFeedRSS093 extends TestSyndFeedRSS092 {
@Override @Override
public void testEntryPublishedDate() throws Exception { public void testEntryPublishedDate() throws Exception {
assertEquals(DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT"), getEntryPublishedDate(this.getCachedSyndFeed().getEntries().get(0))); assertEquals(DateParser.parseRFC822("Mon, 01 Jan 2001 00:00:00 GMT", Locale.US), getEntryPublishedDate(this.getCachedSyndFeed().getEntries().get(0)));
assertEquals(DateParser.parseRFC822("Tue, 02 Jan 2001 00:00:00 GMT"), getEntryPublishedDate(this.getCachedSyndFeed().getEntries().get(1))); assertEquals(DateParser.parseRFC822("Tue, 02 Jan 2001 00:00:00 GMT", Locale.US), getEntryPublishedDate(this.getCachedSyndFeed().getEntries().get(1)));
} }
} }

View file

@ -2,6 +2,7 @@ package com.sun.syndication.unittest;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import com.sun.syndication.feed.module.DCModule; import com.sun.syndication.feed.module.DCModule;
import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndEntry;
@ -60,7 +61,7 @@ public class TestSyndFeedRSS10DCMulti extends TestSyndFeedRSS10 {
assertProperty(dc.getContributors().get(0), prefix + "dc:contributor[0]"); assertProperty(dc.getContributors().get(0), prefix + "dc:contributor[0]");
assertProperty(dc.getContributors().get(1), prefix + "dc:contributor[1]"); assertProperty(dc.getContributors().get(1), prefix + "dc:contributor[1]");
final Date date = DateParser.parseW3CDateTime("2001-01-01T00:00+00:00"); final Date date = DateParser.parseW3CDateTime("2001-01-01T00:00+00:00", Locale.US);
assertEquals(dc.getDates().get(0), date); assertEquals(dc.getDates().get(0), date);
assertEquals(dc.getDates().get(1), date); assertEquals(dc.getDates().get(1), date);

View file

@ -8,6 +8,7 @@ package com.sun.syndication.unittest;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale;
import com.sun.syndication.feed.module.DCModule; import com.sun.syndication.feed.module.DCModule;
import com.sun.syndication.feed.module.SyModule; import com.sun.syndication.feed.module.SyModule;
@ -57,7 +58,7 @@ public class TestSyndFeedRSS10DCSyModules extends TestSyndFeedRSS10 {
assertProperty(dc.getPublisher(), prefix + "dc:publisher"); assertProperty(dc.getPublisher(), prefix + "dc:publisher");
assertProperty(dc.getContributors().get(0), prefix + "dc:contributor[0]"); assertProperty(dc.getContributors().get(0), prefix + "dc:contributor[0]");
assertProperty(dc.getContributors().get(1), prefix + "dc:contributor[1]"); assertProperty(dc.getContributors().get(1), prefix + "dc:contributor[1]");
final Date date = DateParser.parseW3CDateTime("2001-01-01T00:00+00:00"); final Date date = DateParser.parseW3CDateTime("2001-01-01T00:00+00:00", Locale.US);
assertEquals(dc.getDate(), date); assertEquals(dc.getDate(), date);
assertProperty(dc.getType(), prefix + "dc:type"); assertProperty(dc.getType(), prefix + "dc:type");
assertProperty(dc.getFormat(), prefix + "dc:format"); assertProperty(dc.getFormat(), prefix + "dc:format");
@ -74,7 +75,7 @@ public class TestSyndFeedRSS10DCSyModules extends TestSyndFeedRSS10 {
assertNotNull(sy); assertNotNull(sy);
assertEquals(sy.getUpdatePeriod(), SyModule.HOURLY); assertEquals(sy.getUpdatePeriod(), SyModule.HOURLY);
assertEquals(sy.getUpdateFrequency(), 100); assertEquals(sy.getUpdateFrequency(), 100);
final Date date = DateParser.parseW3CDateTime("2001-01-01T01:00+00:00"); final Date date = DateParser.parseW3CDateTime("2001-01-01T01:00+00:00", Locale.US);
assertEquals(sy.getUpdateBase(), date); assertEquals(sy.getUpdateBase(), date);
} }