Tak na szybko... przy pomocy Xstream'a
1. Klasa, na podstawie której generowany będzie feed:
3. Dodanie resource do aplikacji Wicket
4. Dodanie linkow na stronach
...i w html
1. Klasa, na podstawie której generowany będzie feed:
@XStreamAlias("rss") public class Atom { @XStreamAsAttribute @XStreamAlias("xmlns:atom") String xmlns="http://www.w3.org/2005/Atom"; @XStreamAsAttribute String version="2.0"; public channel channel=new channel(); public static class channel { public String title; public String subtitle; public String link; @XStreamAlias("atom:link") public AtomLink atomLink; public String language; public Date lastBuildDate; @XStreamImplicit(itemFieldName = "item") public Listentries=new ArrayList (); } public static class AtomLink { @XStreamAsAttribute public String href; @XStreamAsAttribute public String rel="self"; } public static class Entry { public String title; public String link; public String description; public Date pubDate; } }
2. Wicket WebResource class:
public class AtomWebResource extends WebResource { public static Logger log = LoggerFactory.getLogger(AtomWebResource.class); @Override protected int getCacheDuration() { return 0; } @Override public IResourceStream getResourceStream() { return new AbstractResourceStreamWriter() { public String getContentType() { return "text/xml; charset=UTF-8"; } public void write(OutputStream output) { try { BufferedWriter bufferedWriter = new BufferedWriter(new PrintWriter(output)); bufferedWriter.write(getAtom()); bufferedWriter.flush(); bufferedWriter.close(); } catch (IOException e) { log.error("",e); } } }; } // w celu optymalizacji, zamiast tworzyć feeda na nowo można go cache'ować private String getAtom() { Atom a=new Atom(); a.title="Tytul"; //... tu wypełniamy wszystkie entry return xstream.toXML(); } }
public void init() { getSharedResources().add(AtomWebResource.class.getName(), new AtomWebResource()); mountSharedResource("feed", Application.class.getName()+"/"+AtomWebResource.class.getName()); }
add(new ResourceLink("rssLink",new ResourceReference(AtomWebResource.class.getName())));