Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Migration from Apache Abdera to Apache Wink

Apache Wink is an excellent the perfect solution for consuming and producing Atom, APP and RSS documents. The following section describes how to migrate from Apache Abdera to Apache Wink by providing a set of examples that cover most use cases.

...

This section contains the following topics:

...

Apache Wink - Click on links to Download - ProduceAtomUsingWink.java ProduceAtomUsingWink_web.xml

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());
}

2) b) Producing Atom Documents

...

- the JAX-RS

...

way

A more elegant way of producing Atom documents using Apache Wink is In order to produce an Atom document according to the JAX-RS specification using Apache Wink perform the following stepsway as described below:

  1. Open the Eclipse development environment and then create a "Dynamic Web Project".
  2. Add Apache Wink & its dependent JARs into Java Build Path and under Java EE Module Dependencies.
  3. 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
  4. 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
  5. Deploy the web-application and access it using the url http://localhost:8080/ProduceAtom_Wink_Elegant/rest/getAtom
  6. Final WAR -> ProduceAtom_Wink_Elegant.zip (add Wink & its dependent JARs under ProduceAtom_Wink_Elegant\WEB-INF\lib and re-zip it as WAR).

...

4) Producing RSS Documents

In order to create RSS documents using Apache Wink perform the following steps.

Apache Abdera

Apache Abdera version 0.4 does not support RSS write.

Apache Wink

Same as in #2) a) Producing Atom Documents or #22) b) Producing Atom Documents Using Apache Wink - the JAX-RS Wayway. However the resource method now returns an RssFeed object instead of AtomFeed object.

...

5) Writing Atom Publishing Protocol (APP) Server

In order to write and publish an APP server using Apache Abdera and Apache Wink perform the following steps:

The following scenario explains how to Implement The following steps explain how to implement an APP server as described in the following beautiful article by James Snell: http://www.ibm.com/developerworks/library/x-atompp1/

...

In order to write an Atom Publishing Protocol client refer to the following examples.

Info
titleImportant Note

Make sure that the APP_Server_Abdera.war and the APP_Server_Wink.war provided in the previous example are deployed before running this examplethese examples.

Apache Abdera - Click on link to Download - APP_Client_Abdera.java

       1. Acessing Service Document:

Code Block
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");
}

       2. Getting a Feed

Code Block
RequestOptions opts = new RequestOptions();
opts.setContentType("application/atom+xml;type=feed");
ClientResponse response = abderaClient.get(FEED_URL, opts);
Feed feed = (Feed)response.getDocument().getRoot();

       3. Posting an entry to a Feed

Code Block
RequestOptions opts = new RequestOptions();
opts.setContentType("application/atom+xml;type=entry");
ClientResponse response = abderaClient.post(FEED_URL, newEntry, opts);

       4. Putting a change to an Entry

Code Block
RequestOptions opts = new RequestOptions();
opts.setContentType("application/atom+xml;type=entry");
ClientResponse response = abderaClient.put(ENTRY_URL, changedEntry.getDocument(), opts);

       5. Getting an Entry

Code Block
RequestOptions opts = new RequestOptions();
opts.setContentType("application/atom+xml;type=entry");
ClientResponse response = abderaClient.get(ENTRY_URL, opts);
Entry entry = (Entry)response.getDocument().getRoot();

       6. Deleting an Entry

Code Block
ClientResponse response = abderaClient.delete(ENTRY_URL);

Apache Wink - Click on link to Download - APP_Client_Wink.java

       1. Acessing Service Document:

Code Block
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");
}

       2. Getting a Feed

Code Block
Resource feedResource = restClient.resource(FEED_URL);
AtomFeed feed = feedResource.accept(MediaType.APPLICATION_ATOM_XML).get(AtomFeed.class);

       3. Posting an entry to a Feed

Code Block
Resource feedResource = restClient.resource(FEED_URL);
ClientResponse response =
    feedResource.contentType(MediaType.APPLICATION_ATOM_XML).post(newEntry);

       4. Putting a change to an Entry

Code Block
Resource feedResource = restClient.resource(ENTRY_URL);
ClientResponse response =
    feedResource.contentType(MediaType.APPLICATION_ATOM_XML).put(changedEntry);

       5. Getting an Entry

Code Block
Resource feedResource = restClient.resource(ENTRY_URL);
AtomEntry atomEntry = feedResource.accept(MediaType.APPLICATION_ATOM_XML).get(AtomEntry.class);

       6. Deleting an Entry

Code Block
Resource feedResource = restClient.resource(ENTRY_URL);
ClientResponse response = feedResource.delete();

...