1) Consuming Atom Documents:
Apache Abdera
| Apache Wink
|
---|
Code Block |
---|
Abdera abdera = new Abdera();
Parser parser = abdera.getParser();
URL url = new URL("http://alexharden.org/blog/atom.xml");
Document<Feed> doc = parser.parse(url.openStream());
Feed feed = doc.getRoot();
System.out.println(feed.getTitle());
for (Entry entry : feed.getEntries()) {
System.out.println("\t" + entry.getTitle());
}
|
|
Code Block |
---|
RestClient client = new RestClient();
Resource resource = client.resource("http://alexharden.org/blog/atom.xml");
AtomFeed feed = resource.accept(MediaType.APPLICATION_ATOM_XML).get(AtomFeed.class);
System.out.println(feed.getTitle().getValue());
for (AtomEntry entry : feed.getEntries()) {
System.out.println("\t" + entry.getTitle().getValue());
}
|
|
|
ConsumeAtomUsingAbdera.java | ConsumeAtomUsingWink.java |
2) a) Producing Atom Documents:
Apache Abdera | Apache Wink |
---|
Code Block |
---|
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Abdera abdera = new Abdera();
Feed feed = abdera.newFeed();
feed.setId("tag:example.org,2007:/foo");
feed.setTitle("Test Feed");
feed.setSubtitle("Feed subtitle");
feed.setUpdated(new Date());
feed.addAuthor("Shiva HR");
feed.addLink("http://example.com");
feed.addLink("http://example.com/foo", "self");
Entry entry = feed.addEntry();
entry.setId("tag:example.org,2007:/foo/entries/1");
entry.setTitle("Entry title");
entry.setSummaryAsHtml("<p>This is the entry title</p>");
entry.setUpdated(new Date());
entry.setPublished(new Date());
entry.addLink("http://example.com/foo/entries/1");
feed.getDocument().writeTo(response.getWriter());
} |
|
Code Block |
---|
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
AtomFeed feed = new AtomFeed();
feed.setId("tag:example.org,2007:/foo");
feed.setTitle(new AtomText("Test Feed"));
feed.setSubtitle(new AtomText("Feed subtitle"));
feed.setUpdated(new Date());
AtomPerson person = new AtomPerson();
person.setName("Shiva HR");
feed.getAuthors().add(person);
AtomLink link1 = new AtomLink();
link1.setHref("http://example.com");
feed.getLinks().add(link1);
AtomLink link2 = new AtomLink();
link2.setHref("http://example.com/foo");
link2.setRel("self");
feed.getLinks().add(link2);
AtomEntry entry = new AtomEntry();
entry.setId("tag:example.org,2007:/foo/entries/1");
entry.setTitle(new AtomText("Entry title"));
AtomText summary = new AtomText();
summary.setType(AtomTextType.html);
summary.setValue("<p>This is the entry title</p>");
entry.setSummary(summary);
entry.setUpdated(new Date());
entry.setPublished(new Date());
AtomLink link3 = new AtomLink();
link3.setHref("http://example.com/foo/entries/1");
entry.getLinks().add(link3);
feed.getEntries().add(entry);
AtomFeed.marshal(feed, response.getOutputStream());
}
|
|
|
ProduceAtomUsingAbdera.java ProduceAtomUsingAbdera_web.xml | ProduceAtomUsingWink.java ProduceAtomUsingWink_web.xml |
2) b) A more elegant way of producing Atom documents using Apache Wink (the JAX-RS way):
- Inside Eclipse: Create a Dynamic Web Project.
- Add Wink & its dependent JARs into Java Build Path and Java EE Module Dependencies.
- Create a POJO class and a method that creates Atom feed document. Annotate the class & its methods with required JAX-RS annotations as below:
ProduceAtom.java - Add org.apache.wink.server.internal.servlet.RestServlet into web.xml and specify the path of above Resource class in it's init-param.
See ProduceAtomWinkElegant_web.xml and application - Deploy the web-application and access it using the url http://localhost:8080/ProduceAtom_Wink_Elegant/rest/getAtom
Final WAR -> ProduceAtom_Wink_Elegant.zip (add Wink & its dependent JARs under ProduceAtom_Wink_Elegant\WEB-INF\lib and re-zip it as WAR).
Apache Abdera
| Apache Wink
|
---|
Code Block |
---|
public static void main(String[] args) throws ParseException, IOException {
System.out.println("Consuming RSS Documents using Abdera...\n");
Abdera abdera = new Abdera();
Parser parser = abdera.getParser();
URL url = new URL("http://www.rssboard.org/files/sample-rss-2.xml");
Document<RssFeed> doc = parser.parse(url.openStream());
RssFeed rssFeed = doc.getRoot();
System.out.println("Title: " + rssFeed.getTitle());
System.out.println("Description: " + rssFeed.getSubtitle() + "\n");
int itemCount = 0;
for (Entry entry : rssFeed.getEntries()) {
System.out.println("Item " + ++itemCount + ":");
System.out.println("\tTitle: " + entry.getTitle());
System.out.println("\tPublish Date: " + entry.getPublished());
System.out.println("\tDescription: " + entry.getContent());
}
} |
|
Code Block |
---|
public static void main(String[] args) {
System.out.println("Consuming RSS Documents using Apache Wink...\n");
RestClient client = new RestClient();
String url = "http://www.rssboard.org/files/sample-rss-2.xml";
Resource resource = client.resource(url);
RssFeed rss = resource.accept(MediaType.APPLICATION_XML).get(RssFeed.class);
RssChannel channel = rss.getChannel();
System.out.println("Title: " + channel.getTitle());
System.out.println("Description: " + channel.getDescription() + "\n");
int itemCount = 0;
for (RssItem item : channel.getItems()) {
System.out.println("Item " + ++itemCount + ":");
System.out.println("\tTitle: " + item.getTitle());
System.out.println("\tPublish Date: " + item.getPubDate());
System.out.println("\tDescription: " + item.getDescription());
}
}
|
|
|
ConsumeRssUsingAbdera.java | ConsumeRssUsingWink.java |
Apache Abdera
| Apache Wink
|
---|
As of v0.4 Abdera has no support for RSS write.
| Same as in 2)a) or 2)b). The resource method now returns an RssFeed object instead of AtomFeed object.
Code Block |
---|
@Path("/getRss")
public class ProduceRss {
@GET
@Produces(MediaType.APPLICATION_XML)
public Rss getRss() {
RssFeed rss = new RssFeed();
RssChannel channel = new RssChannel();
channel.setTitle("Liftoff News");
channel.setLink("http://liftoff.msfc.nasa.gov");
channel.setDescription("Liftoff to Space Exploration.");
channel.setPubDate(new Date().toString());
RssItem item = new RssItem();
item.setTitle("Star City");
item.setLink("http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp");
item.setDescription("How do Americans get ready to work with Russians aboard the International Space Station?");
channel.getItem().add(item);
rss.setChannel(channel);
return rss;
}
} |
|
|
| ProduceRss_Wink_Elegant.zip |
5) Writing Atom Publishing Protocol (APP) Server:
6) Writing Atom Publishing Protocol (APP) Client:
8) Comparison of Object Models for Atom Publishing Protocol (APP)