Migration from Apache Abdera to Apache Wink
TBD
This section contains the following topics:
- Consuming Atom Documents
- Producing Atom Documents
- Producing Atom Documents Using Apache Wink the JAX-RS Way
- Consuming RSS Documents
- Creating RSS Documents
- Writing Atom Publishing Protocol (APP) Server
- Writing Atom Publishing Protocol (APP) Client
- Object Models Comparison for Atom Syndication Format (ASF)
- Object Models Comparison for Atom Publishing Protocol (APP)
- Object Models Comparison for RSS (Really Simple Syndication)
Consuming Atom Documents
TBD
Apache Abdera - Click on link to Download - ConsumeAtomUsingAbdera.java |
---|
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()); } |
TBD
Apache Wink - Click on link to Download - ConsumeAtomUsingWink.java |
---|
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()); } |
Producing Atom Documents
TBD
Apache Abdera - Click on links to Download - ProduceAtomUsingAbdera.java ProduceAtomUsingAbdera_web.xml |
---|
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()); } |
TBD
Apache Wink - Click on links to Download - ProduceAtomUsingWink.java ProduceAtomUsingWink_web.xml |
---|
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()); } |
Producing Atom Documents Using Apache Wink the JAX-RS Way
In order to produce an Atom document according to the JAX-RS specification using Apache Wink perform the following steps:
- Open the Eclipse development environment and then 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 the 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).
Consuming RSS Documents
TBD
Apache Abdera - Click on link to Download - ConsumeRssUsingAbdera.java |
---|
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()); } } |
TBD
Apache Wink - Click on link to Download - ConsumeRssUsingWink.java |
---|
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()); } } |
Creating RSS Documents
TBD
Apache Abdera
As of v0.4 Abdera has no support for RSS write. TBD
Apache Wink
Same as in 2)a) or 2)b). The resource method now returns an RssFeed object instead of AtomFeed object.
Apache Wink - Click on link to Download - ProduceRss_Wink_Elegant.zip |
---|
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()); } } |
Writing Atom Publishing Protocol (APP) Server
TBD
Scenario: Let us implement an APP server as described in the following beautiful article by James Snell:http://www.ibm.com/developerworks/library/x-atompp1/
Apache Abdera |
---|
|
Final WAR -> APP_Server_Abdera.zip (add Apache Abdera & its dependent JARs under APP_Server_Abdera\WEB-INF\lib and re-zip it as WAR). |
Apache Wink |
---|
|
Final WAR -> APP_Server_Wink.zip (add Apache Wink & its dependent JARs under APP_Server_Wink\WEB-INF\lib and re-zip it as WAR). |
References:
- Apache Wink's "SimpleDefects" example: http://svn.apache.org/repos/asf/incubator/wink/tags/wink-0.1-incubating/wink-examples/apps/SimpleDefects/src/main/java/org/apache/wink/example/simpledefects/resources/DefectsResource.java
- Abdera Feed Sample shipped with IBM WebSphere Feature Pack for Web 2.0 http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.ajax.feed.samples.help/docs/GettingStarted_useage.html
- Abdera Server Implementation Guide -> http://cwiki.apache.org/ABDERA/server-implementation-guide.html
- Abdera Collection Adapter Implementation Guide -> http://cwiki.apache.org/ABDERA/collection-adapter-implementation-guide.html
Writing Atom Publishing Protocol (APP) Client
TBD
Note: Make sure APP_Server_Abdera.war and APP_Server_Wink.war (given above) are deployed before running this example.
Apache Abdera - Click on link to Download - APP_Client_Abdera.java |
---|
a) Acessing Service Document: Document<Service> introspection = abderaClient.get(SERVICE_URL).getDocument(); Service service = introspection.getRoot(); List<Workspace> workspaces = service.getWorkspaces(); for (Workspace workspace : workspaces) { System.out.println("\t" + workspace.getTitle()); List<Collection> collections = workspace.getCollections(); for (Collection collection : collections) { System.out.println("\t" + collection.getTitle() + "\t:\t" + collection.getHref()); } System.out.print("\n"); } |
b) Getting a Feed RequestOptions opts = new RequestOptions(); opts.setContentType("application/atom+xml;type=feed"); ClientResponse response = abderaClient.get(FEED_URL, opts); Feed feed = (Feed)response.getDocument().getRoot(); |
c) Posting an entry to a Feed RequestOptions opts = new RequestOptions(); opts.setContentType("application/atom+xml;type=entry"); ClientResponse response = abderaClient.post(FEED_URL, newEntry, opts); |
d) Putting a change to an Entry RequestOptions opts = new RequestOptions(); opts.setContentType("application/atom+xml;type=entry"); ClientResponse response = abderaClient.put(ENTRY_URL, changedEntry.getDocument(), opts); |
e) Getting an Entry RequestOptions opts = new RequestOptions(); opts.setContentType("application/atom+xml;type=entry"); ClientResponse response = abderaClient.get(ENTRY_URL, opts); Entry entry = (Entry)response.getDocument().getRoot(); |
f) Deleting an Entry ClientResponse response = abderaClient.delete(ENTRY_URL); |
Apache Wink - Click on link to Download - APP_Client_Wink.java |
---|
a) Acessing Service Document: Resource resource = restClient.resource(SERVICE_URL); AppService service = resource.accept(MediaTypeUtils.ATOM_SERVICE_DOCUMENT).get(AppService.class); List<AppWorkspace> workspaces = service.getWorkspace(); for (AppWorkspace workspace : workspaces) { System.out.println("\t" + workspace.getTitle().getValue()); List<AppCollection> collections = workspace.getCollection(); for (AppCollection collection : collections) { System.out.println("\t" + collection.getTitle().getValue() + "\t:\t" + collection.getHref()); } System.out.print("\n"); } |
b) Getting a Feed Resource feedResource = restClient.resource(FEED_URL); AtomFeed feed = feedResource.accept(MediaType.APPLICATION_ATOM_XML).get(AtomFeed.class); |
c) Posting an entry to a Feed Resource feedResource = restClient.resource(FEED_URL); ClientResponse response = feedResource.contentType(MediaType.APPLICATION_ATOM_XML).post(newEntry); |
d) Putting a change to an Entry Resource feedResource = restClient.resource(ENTRY_URL); ClientResponse response = feedResource.contentType(MediaType.APPLICATION_ATOM_XML).put(changedEntry); |
e) Getting an Entry Resource feedResource = restClient.resource(ENTRY_URL); AtomEntry atomEntry = feedResource.accept(MediaType.APPLICATION_ATOM_XML).get(AtomEntry.class); |
f) Deleting an Entry Resource feedResource = restClient.resource(ENTRY_URL); ClientResponse response = feedResource.delete(); |
Object Models Comparison for Atom Syndication Format (ASF)
TBD
Object Models Comparison for Atom Publishing Protocol (APP)
TBD
Object Models Comparison for RSS (Really Simple Syndication)
TBD