Display RSS Feed in OpenCms Template
Since this is a very common feature for many websites, here's a useful snippet I usually use when displaying RSS feeds in an OpenCms template. For example you want to display an Atom RSS feed from a WordPress blog on your OpenCms based website. My approach is usually:
The OpenCms schema has a OpenCmsString input field (named BlogRssUrl in my case), which is mapped to the property BlogRssUrl as well. <xsd:complexType name="OpenCmsMySchema">
...
<xsd:element name="BlogRssUrl" type="OpenCmsString" minOccurs="0" maxOccurs="1" />
...
</xsd:complexType> <mappings>
<mapping element="BlogRssUrl" mapto="property:BlogRssUrl" />
</mappings> For fetching the RSS feed, I recommend the ROME Fetcher subproject library at https://rome.dev.java.net/, which only depends on the JDOM parser (jdom.jar). So you will end up deploying three additional jars:
- jdom.jar
- rome-1.0RC2.jar (or newer version)
- rome-fetcher-0.9.jar (or newer version)
Below is the scriplet then for the OpenCms jsp template: <%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
<%@ page session="false" import="org.opencms.jsp.*,java.util.*,org.opencms.file.*,java.net.URL,com.sun.syndication.feed.synd.*,com.sun.syndication.fetcher.*,com.sun.syndication.fetcher.impl.*" %>
<%
CmsJspActionElement cms = new CmsJspActionElement(pageContext, request, response);
String filename = cms.getRequestContext().getUri(); // === RSS Feed Fetching ===
FeedFetcherCache feedInfoCache = HashMapFeedInfoCache.getInstance();
FeedFetcher feedFetcher = new HttpURLFeedFetcher(feedInfoCache);
CmsObject cmso = cms.getCmsObject();
String blogRssUrl = cmso.readProperty(filename, "BlogRssUrl");
SyndFeed feed = null;
if (blogRssUrl!=null && !"".equals(blogRssUrl)) feed = feedFetcher.retrieveFeed(new URL(blogRssUrl));
%>
and then display the output on the page:
<% if (feed!=null) { %>
<ul>
<%
// === RSS feed output ===
for (Iterator<SyndEntry> iter= feed.getEntries().iterator(); iter.hasNext();) {
SyndEntry entry = iter.next();
%>
<li>[a href="<%=entry.getUri()%>"]<%=entry.getTitle()%>[/a]</li>
<%
}
%>
</ul>
<% } %>

