How to create ATOM web feed

The feed output is empty because:

java.lang.ClassCastException: java.lang.String cannot be cast to com.sun.syndication.feed.synd.SyndPerson
  at com.sun.syndication.feed.synd.impl.ConverterForAtom03.createAtomPersons(ConverterForAtom03.java:350)
  at com.sun.syndication.feed.synd.impl.ConverterForAtom10.createAtomEntry(ConverterForAtom10.java:536)
  at com.sun.syndication.feed.synd.impl.ConverterForAtom10.createAtomEntries(ConverterForAtom10.java:419)
  at com.sun.syndication.feed.synd.impl.ConverterForAtom10.createRealFeed(ConverterForAtom10.java:400)
  at com.sun.syndication.feed.synd.SyndFeedImpl.createWireFeed(SyndFeedImpl.java:229)
  at com.sun.syndication.feed.synd.SyndFeedImpl.createWireFeed(SyndFeedImpl.java:211)
  at com.sun.syndication.io.SyndFeedOutput.output(SyndFeedOutput.java:134)
  at com.xpn.xwiki.plugin.feed.FeedPlugin.getFeedOutput(FeedPlugin.java:1098)
  at com.xpn.xwiki.plugin.feed.FeedPluginApi.getFeedOutput(FeedPluginApi.java:834)

The Java code that creates the feed based on the query results sets the contributors of each feed entry as a list of Strings (contributor names) rather than a list of SyndPerson. This works for RSS but not for Atom unfortunately, as indicated by the Javadoc of getContributors

For Atom feeds, this returns the contributors as a list of SyndPerson objects

See http://grepcode.com/file/repo1.maven.org/maven2/rome/rome/1.0/com/sun/syndication/feed/synd/SyndEntry.java#SyndEntry.getContributors() . The only workaround I can think of is to clear the list of contributors after creating the feed:

...
#set ($feed = $xwiki.feed.getWebFeed($queryObject.execute()))
#foreach ($entry in $feed.entries)
  ## Clear the list of contributors. Ideally we should convert the String to a SyndPerson object but we can't do this from Velocity.
  #set ($discard = $entry.setContributors([]))
#end
...

Hope this helps,
Marius