From 17bf0d2a469c01815aa8c997ff04610585f6090f Mon Sep 17 00:00:00 2001 From: Antonio Date: Sat, 11 May 2024 00:45:17 +0200 Subject: [PATCH 1/2] improving SyndContent as #689 requested Signed-off-by: Antonio --- .../com/rometools/rome/feed/atom/Content.java | 23 ++++++++++++++ .../rometools/rome/feed/synd/SyndContent.java | 18 +++++++++++ .../rome/feed/synd/SyndContentImpl.java | 30 +++++++++++++++++++ .../feed/synd/impl/ConverterForAtom10.java | 1 + .../rometools/rome/io/impl/Atom10Parser.java | 2 ++ .../rome/io/impl/Atom10ParserTest.java | 14 +++++++++ 6 files changed, 88 insertions(+) diff --git a/rome/src/main/java/com/rometools/rome/feed/atom/Content.java b/rome/src/main/java/com/rometools/rome/feed/atom/Content.java index 0519b9660..bf10a06eb 100644 --- a/rome/src/main/java/com/rometools/rome/feed/atom/Content.java +++ b/rome/src/main/java/com/rometools/rome/feed/atom/Content.java @@ -36,6 +36,7 @@ public class Content implements Cloneable, Serializable { private String type; private String value; private String src; + private String xmlBase; /** @since Atom 1.0 */ public static final String TEXT = "text"; @@ -219,4 +220,26 @@ public String getSrc() { public void setSrc(final String src) { this.src = src; } + + /** + * Returns the xmlBase + + * + * @return Returns the xmlBase. + * @since Atom 1.0 + */ + public String getXmlBase() { + return xmlBase; + } + + /** + * Set the xmlBase + + * + * @param xmlBase The xmlBase to set. + * @since Atom 1.0 + */ + public void setXmlBase(final String xmlBase) { + this.xmlBase = xmlBase; + } } diff --git a/rome/src/main/java/com/rometools/rome/feed/synd/SyndContent.java b/rome/src/main/java/com/rometools/rome/feed/synd/SyndContent.java index c5ec591a7..ac44b373e 100644 --- a/rome/src/main/java/com/rometools/rome/feed/synd/SyndContent.java +++ b/rome/src/main/java/com/rometools/rome/feed/synd/SyndContent.java @@ -78,6 +78,24 @@ public interface SyndContent extends Cloneable, CopyFrom { */ void setValue(String value); + /** + * Returns the content xmlBase. + *

+ * + * @return the content xmlBase, null if none. + * + */ + String getXmlBase(); + + /** + * Sets the content xmlBase. + *

+ * + * @param xmlBase the content xmlBase to set, null if none. + * + */ + void setXmlBase(String xmlBase); + /** * Creates a deep clone of the object. *

diff --git a/rome/src/main/java/com/rometools/rome/feed/synd/SyndContentImpl.java b/rome/src/main/java/com/rometools/rome/feed/synd/SyndContentImpl.java index d257e1052..11653b6b9 100644 --- a/rome/src/main/java/com/rometools/rome/feed/synd/SyndContentImpl.java +++ b/rome/src/main/java/com/rometools/rome/feed/synd/SyndContentImpl.java @@ -39,6 +39,7 @@ public class SyndContentImpl implements Serializable, SyndContent { private String type; private String value; private String mode; + private String xmlBase; static { final Map> basePropInterfaceMap = new HashMap>(); @@ -179,6 +180,35 @@ public void setValue(final String value) { this.value = value; } + /** + * Returns the content xmlBase. + *

+ * + * @return the content xmlBase, null if none. + * + */ + @Override + public String getXmlBase() { + return this.xmlBase; + } + + /** + * Sets the content xmlBase. + *

+ * + * @param xmlBase the content xmlBase to set, null if none. + * + */ + @Override + public void setXmlBase(final String xmlBase) { + this.xmlBase = xmlBase; + } + + /** + * Return the Class interface + * + * @return the class interface. + */ @Override public Class getInterface() { return SyndContent.class; diff --git a/rome/src/main/java/com/rometools/rome/feed/synd/impl/ConverterForAtom10.java b/rome/src/main/java/com/rometools/rome/feed/synd/impl/ConverterForAtom10.java index 2142d682c..c2bcbfc02 100644 --- a/rome/src/main/java/com/rometools/rome/feed/synd/impl/ConverterForAtom10.java +++ b/rome/src/main/java/com/rometools/rome/feed/synd/impl/ConverterForAtom10.java @@ -449,6 +449,7 @@ protected SyndContent createSyndContent(final Content content) { final SyndContent sContent = new SyndContentImpl(); sContent.setType(content.getType()); sContent.setValue(content.getValue()); + sContent.setXmlBase(content.getXmlBase()); return sContent; } diff --git a/rome/src/main/java/com/rometools/rome/io/impl/Atom10Parser.java b/rome/src/main/java/com/rometools/rome/io/impl/Atom10Parser.java index 02d4ef8ca..d73550a2a 100644 --- a/rome/src/main/java/com/rometools/rome/io/impl/Atom10Parser.java +++ b/rome/src/main/java/com/rometools/rome/io/impl/Atom10Parser.java @@ -333,11 +333,13 @@ private Content parseContent(final Element e) { final String value = parseTextConstructToString(e); final String src = getAttributeValue(e, "src"); final String type = getAttributeValue(e, "type"); + final String xmlBase = e.getAttributeValue("base", Namespace.XML_NAMESPACE); final Content content = new Content(); content.setSrc(src); content.setType(type); content.setValue(value); + content.setXmlBase(xmlBase); return content; } diff --git a/rome/src/test/java/com/rometools/rome/io/impl/Atom10ParserTest.java b/rome/src/test/java/com/rometools/rome/io/impl/Atom10ParserTest.java index 1f07e9b72..dbe462741 100644 --- a/rome/src/test/java/com/rometools/rome/io/impl/Atom10ParserTest.java +++ b/rome/src/test/java/com/rometools/rome/io/impl/Atom10ParserTest.java @@ -13,7 +13,11 @@ import org.junit.Test; import com.rometools.rome.feed.atom.Entry; +import com.rometools.rome.feed.synd.SyndEntry; +import com.rometools.rome.feed.synd.SyndFeed; import com.rometools.rome.io.FeedException; +import com.rometools.rome.io.SyndFeedInput; +import com.rometools.rome.io.XmlReader; public class Atom10ParserTest { @@ -41,4 +45,14 @@ public void testParseEntryCatchingXxe() throws IllegalArgumentException, JDOMExc } + @Test + public void testIssue689() throws Exception { + String url = "http://feeds.kottke.org/main"; + SyndFeed feed = new SyndFeedInput().build(new XmlReader(new java.net.URL(url))); + for (SyndEntry e : feed.getEntries()) { + assertEquals("https://kottke.org/", e.getContents().iterator().next().getXmlBase()); + } + + } + } From e5cc26f7ebdf1d713120e1f409a11e7c219ca464 Mon Sep 17 00:00:00 2001 From: Antonio Date: Sun, 12 May 2024 00:28:39 +0200 Subject: [PATCH 2/2] improving Atom10Generator as #689 requested Signed-off-by: Antonio --- .../java/com/rometools/rome/io/impl/Atom10Generator.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rome/src/main/java/com/rometools/rome/io/impl/Atom10Generator.java b/rome/src/main/java/com/rometools/rome/io/impl/Atom10Generator.java index f8db783fe..d53c46bd1 100644 --- a/rome/src/main/java/com/rometools/rome/io/impl/Atom10Generator.java +++ b/rome/src/main/java/com/rometools/rome/io/impl/Atom10Generator.java @@ -502,6 +502,12 @@ protected void fillContentElement(final Element contentElement, final Content co } } + + final String xmlBase = content.getXmlBase(); + if (xmlBase != null) { + final Attribute xmlBaseAttribute = new Attribute("base", xmlBase, Namespace.XML_NAMESPACE); + contentElement.setAttribute(xmlBaseAttribute); + } } protected Element generateGeneratorElement(final Generator generator) {