Mathias Lin | 林马

Healthcare Informatics, Open Source, Entrepreneur, Software Engineer (Java, Android, Mobile), HIMSS member 
Filed under

ROME

 

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>
<% } %>

Loading mentions Retweet
Filed under  //   atom   CMS   java   opencms   ROME   rss   tutorial  

Comments [0]