From 74b85d9a2c95cb135c6e40a9fc7a562462ebf4e5 Mon Sep 17 00:00:00 2001 From: Jeremie Panzer Date: Tue, 10 Mar 2015 08:27:59 +0100 Subject: [PATCH 1/6] add header if at least one element is set --- .../opml/io/impl/OPML10Generator.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/rometools/opml/io/impl/OPML10Generator.java b/src/main/java/com/rometools/opml/io/impl/OPML10Generator.java index 707b4c5..e9af30b 100644 --- a/src/main/java/com/rometools/opml/io/impl/OPML10Generator.java +++ b/src/main/java/com/rometools/opml/io/impl/OPML10Generator.java @@ -110,23 +110,23 @@ public class OPML10Generator extends BaseWireFeedGenerator implements WireFeedGe boolean hasHead = false; if (opml.getCreated() != null) { - hasHead = addNotNullSimpleElement(head, "dateCreated", DateParser.formatRFC822(opml.getCreated(), Locale.US)); + hasHead |= addNotNullSimpleElement(head, "dateCreated", DateParser.formatRFC822(opml.getCreated(), Locale.US)); } - hasHead = addNotNullSimpleElement(head, "expansionState", intArrayToCsvString(opml.getExpansionState())); + hasHead |= addNotNullSimpleElement(head, "expansionState", intArrayToCsvString(opml.getExpansionState())); if (opml.getModified() != null) { - hasHead = addNotNullSimpleElement(head, "dateModified", DateParser.formatRFC822(opml.getModified(), Locale.US)); + hasHead |= addNotNullSimpleElement(head, "dateModified", DateParser.formatRFC822(opml.getModified(), Locale.US)); } - hasHead = addNotNullSimpleElement(head, "ownerEmail", opml.getOwnerEmail()); - hasHead = addNotNullSimpleElement(head, "ownerName", opml.getOwnerName()); - hasHead = addNotNullSimpleElement(head, "title", opml.getTitle()); - hasHead = addNotNullSimpleElement(head, "vertScrollState", opml.getVerticalScrollState()); - hasHead = addNotNullSimpleElement(head, "windowBottom", opml.getWindowBottom()); - hasHead = addNotNullSimpleElement(head, "windowLeft", opml.getWindowLeft()); - hasHead = addNotNullSimpleElement(head, "windowRight", opml.getWindowRight()); - hasHead = addNotNullSimpleElement(head, "windowTop", opml.getWindowTop()); + hasHead |= addNotNullSimpleElement(head, "ownerEmail", opml.getOwnerEmail()); + hasHead |= addNotNullSimpleElement(head, "ownerName", opml.getOwnerName()); + hasHead |= addNotNullSimpleElement(head, "title", opml.getTitle()); + hasHead |= addNotNullSimpleElement(head, "vertScrollState", opml.getVerticalScrollState()); + hasHead |= addNotNullSimpleElement(head, "windowBottom", opml.getWindowBottom()); + hasHead |= addNotNullSimpleElement(head, "windowLeft", opml.getWindowLeft()); + hasHead |= addNotNullSimpleElement(head, "windowRight", opml.getWindowRight()); + hasHead |= addNotNullSimpleElement(head, "windowTop", opml.getWindowTop()); if (hasHead) { return head; From c47ec5fa9e6212518ad6a3432ce46216f837de02 Mon Sep 17 00:00:00 2001 From: Jeremie Panzer Date: Tue, 10 Mar 2015 08:28:26 +0100 Subject: [PATCH 2/6] set the docs url as the content of the element instead of its namespace --- src/main/java/com/rometools/opml/io/impl/OPML20Generator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/rometools/opml/io/impl/OPML20Generator.java b/src/main/java/com/rometools/opml/io/impl/OPML20Generator.java index 68dacb9..c87dbfe 100644 --- a/src/main/java/com/rometools/opml/io/impl/OPML20Generator.java +++ b/src/main/java/com/rometools/opml/io/impl/OPML20Generator.java @@ -67,7 +67,8 @@ public class OPML20Generator extends OPML10Generator { retValue = super.generateHead(opml); - final Element docs = new Element("docs", opml.getDocs()); + final Element docs = new Element("docs"); + docs.setText(opml.getDocs()); retValue.addContent(docs); return retValue; From b015f3ae0cb4a259ce2db37880ef07ff0150c699 Mon Sep 17 00:00:00 2001 From: Jeremie Panzer Date: Tue, 10 Mar 2015 08:44:33 +0100 Subject: [PATCH 3/6] test serialization to and from jdom documents --- pom.xml | 6 ++++ .../java/com/rometools/opml/FeedOpsTest.java | 30 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/pom.xml b/pom.xml index 4c225b2..e58c56b 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,12 @@ junit test + + xmlunit + xmlunit + 1.6 + test + diff --git a/src/test/java/com/rometools/opml/FeedOpsTest.java b/src/test/java/com/rometools/opml/FeedOpsTest.java index 122bc1d..5eb5f61 100644 --- a/src/test/java/com/rometools/opml/FeedOpsTest.java +++ b/src/test/java/com/rometools/opml/FeedOpsTest.java @@ -6,9 +6,18 @@ import java.io.File; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import org.custommonkey.xmlunit.Diff; +import org.custommonkey.xmlunit.ElementNameAndAttributeQualifier; +import org.custommonkey.xmlunit.XMLAssert; +import org.custommonkey.xmlunit.XMLUnit; +import org.jdom2.Document; +import org.jdom2.output.Format; +import org.jdom2.output.XMLOutputter; + import com.rometools.rome.feed.WireFeed; import com.rometools.rome.feed.synd.SyndFeed; import com.rometools.rome.feed.synd.SyndFeedImpl; +import com.rometools.rome.io.WireFeedOutput; /** * @@ -64,6 +73,27 @@ public abstract class FeedOpsTest extends FeedTest { assertTrue(feed1.equals(feed2)); } + // 1.5 + public void testWireFeedJDOMSerialization() throws Exception { + Document inputDoc = getCachedJDomDoc(); + + final WireFeed feed = getCachedWireFeed(); + WireFeedOutput output = new WireFeedOutput(); + Document outputDoc = output.outputJDom(feed); + + XMLOutputter outputter = new XMLOutputter(Format.getCompactFormat()); + String inputString = outputter.outputString(inputDoc); + String outputString = outputter.outputString(outputDoc); + + XMLUnit.setIgnoreWhitespace(true); + XMLUnit.setIgnoreAttributeOrder(true); + Diff diff = XMLUnit.compareXML(inputString, outputString); + // ignore elements order + diff.overrideElementQualifier(new ElementNameAndAttributeQualifier()); + + XMLAssert.assertXMLEqual(diff, true); + } + // 1.6 public void testWireFeedSyndFeedConversion() throws Exception { final SyndFeed sFeed1 = getCachedSyndFeed(); From 3fe096365cd528a5c9a35e91f2a30370c83cb1f7 Mon Sep 17 00:00:00 2001 From: Jeremie Panzer Date: Tue, 10 Mar 2015 08:58:06 +0100 Subject: [PATCH 4/6] remove warning about reader not closed --- src/test/java/com/rometools/opml/TestXmlReader.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/com/rometools/opml/TestXmlReader.java b/src/test/java/com/rometools/opml/TestXmlReader.java index d2e8ff9..a7137a0 100644 --- a/src/test/java/com/rometools/opml/TestXmlReader.java +++ b/src/test/java/com/rometools/opml/TestXmlReader.java @@ -51,14 +51,17 @@ public class TestXmlReader extends TestCase { InputStream is = getXmlStream("no-bom", "xml", encoding, encoding); XmlReader xmlReader = new XmlReader(is, false); assertEquals(xmlReader.getEncoding(), "UTF-8"); + xmlReader.close(); is = getXmlStream("no-bom", "xml-prolog", encoding, encoding); xmlReader = new XmlReader(is); assertEquals(xmlReader.getEncoding(), "UTF-8"); + xmlReader.close(); is = getXmlStream("no-bom", "xml-prolog-encoding", encoding, encoding); xmlReader = new XmlReader(is); assertEquals(xmlReader.getEncoding(), encoding); + xmlReader.close(); } From 86dc04fcd902253771d813086d9e956ceb4ae92d Mon Sep 17 00:00:00 2001 From: Jeremie Panzer Date: Tue, 10 Mar 2015 09:02:45 +0100 Subject: [PATCH 5/6] set opml version for OPML 1.0 generator --- src/main/java/com/rometools/opml/io/impl/OPML10Generator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/rometools/opml/io/impl/OPML10Generator.java b/src/main/java/com/rometools/opml/io/impl/OPML10Generator.java index e9af30b..dfb0368 100644 --- a/src/main/java/com/rometools/opml/io/impl/OPML10Generator.java +++ b/src/main/java/com/rometools/opml/io/impl/OPML10Generator.java @@ -67,6 +67,7 @@ public class OPML10Generator extends BaseWireFeedGenerator implements WireFeedGe final Opml opml = (Opml) feed; final Document doc = new Document(); final Element root = new Element("opml"); + root.setAttribute("version", "1.0"); doc.addContent(root); final Element head = generateHead(opml); From 1a09f86736d101e351343b8ab1c8218dd75689d9 Mon Sep 17 00:00:00 2001 From: Jeremie Panzer Date: Wed, 3 Jun 2015 15:48:13 +0200 Subject: [PATCH 6/6] fix exception when head is null --- .../rometools/opml/io/impl/OPML10Parser.java | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/rometools/opml/io/impl/OPML10Parser.java b/src/main/java/com/rometools/opml/io/impl/OPML10Parser.java index 7d4f7d6..576182e 100644 --- a/src/main/java/com/rometools/opml/io/impl/OPML10Parser.java +++ b/src/main/java/com/rometools/opml/io/impl/OPML10Parser.java @@ -106,61 +106,61 @@ public class OPML10Parser extends BaseWireFeedParser implements WireFeedParser { opml.setOwnerName(head.getChildTextTrim("ownerName")); opml.setOwnerEmail(head.getChildTextTrim("ownerEmail")); opml.setVerticalScrollState(readInteger(head.getChildText("vertScrollState"))); - } - try { - opml.setWindowBottom(readInteger(head.getChildText("windowBottom"))); - } catch (final NumberFormatException nfe) { - LOG.warn("Unable to parse windowBottom", nfe); + try { + opml.setWindowBottom(readInteger(head.getChildText("windowBottom"))); + } catch (final NumberFormatException nfe) { + LOG.warn("Unable to parse windowBottom", nfe); - if (validate) { - throw new FeedException("Unable to parse windowBottom", nfe); + if (validate) { + throw new FeedException("Unable to parse windowBottom", nfe); + } } - } - try { - opml.setWindowLeft(readInteger(head.getChildText("windowLeft"))); - } catch (final NumberFormatException nfe) { - LOG.warn("Unable to parse windowLeft", nfe); - } - - try { - opml.setWindowRight(readInteger(head.getChildText("windowRight"))); - } catch (final NumberFormatException nfe) { - LOG.warn("Unable to parse windowRight", nfe); - - if (validate) { - throw new FeedException("Unable to parse windowRight", nfe); + try { + opml.setWindowLeft(readInteger(head.getChildText("windowLeft"))); + } catch (final NumberFormatException nfe) { + LOG.warn("Unable to parse windowLeft", nfe); } - } - try { - opml.setWindowLeft(readInteger(head.getChildText("windowLeft"))); - } catch (final NumberFormatException nfe) { - LOG.warn("Unable to parse windowLeft", nfe); + try { + opml.setWindowRight(readInteger(head.getChildText("windowRight"))); + } catch (final NumberFormatException nfe) { + LOG.warn("Unable to parse windowRight", nfe); - if (validate) { - throw new FeedException("Unable to parse windowLeft", nfe); + if (validate) { + throw new FeedException("Unable to parse windowRight", nfe); + } } - } - try { - opml.setWindowTop(readInteger(head.getChildText("windowTop"))); - } catch (final NumberFormatException nfe) { - LOG.warn("Unable to parse windowTop", nfe); + try { + opml.setWindowLeft(readInteger(head.getChildText("windowLeft"))); + } catch (final NumberFormatException nfe) { + LOG.warn("Unable to parse windowLeft", nfe); - if (validate) { - throw new FeedException("Unable to parse windowTop", nfe); + if (validate) { + throw new FeedException("Unable to parse windowLeft", nfe); + } } - } - try { - opml.setExpansionState(readIntArray(head.getChildText("expansionState"))); - } catch (final NumberFormatException nfe) { - LOG.warn("Unable to parse expansionState", nfe); + try { + opml.setWindowTop(readInteger(head.getChildText("windowTop"))); + } catch (final NumberFormatException nfe) { + LOG.warn("Unable to parse windowTop", nfe); - if (validate) { - throw new FeedException("Unable to parse expansionState", nfe); + if (validate) { + throw new FeedException("Unable to parse windowTop", nfe); + } + } + + try { + opml.setExpansionState(readIntArray(head.getChildText("expansionState"))); + } catch (final NumberFormatException nfe) { + LOG.warn("Unable to parse expansionState", nfe); + + if (validate) { + throw new FeedException("Unable to parse expansionState", nfe); + } } }