Finally, I have a working version of the code to access the Xwiki RESTful
API.
It worked smooth on a Tomcat 6.0.14 + JDK 1.5 machine. But had to make
certain changes to the bootstrap files for JDK 1.6 as I mentioned in the
previous post. I have used the Apache HTTP HTTPClient 3.1 jar files here but
soon will upgrade that to Apache HTTPClient 4.0. The only change in the code
from the one posted at
http://platform.xwiki.org/xwiki/bin/view/Features/XWikiRESTfulAPI are the
lines Unmarshaller un = context.createUnmarshaller(); and the line Page page
= (Page) ((JAXBElement)
un.unmarshal(getMethod.getResponseBodyAsStream())).getValue();
The default object that getMethod returns turned out to be a JAXBElement
rather than a Page object. Hence, had to do some class casting.
A big thanks to Fabio Mancinelli & Sergiu Dumitriu for helping me out on
this one.
Just one more request though. Do we cast the
getMethod.getResponseBodyAsStream() to Tags class (if we want to retrieve a
list of pages based on their tags) or the SearchResults class (if we want to
retrieve pages returned through a page search). Even though, I cast the
getMethod.getResponseBodyAsStream to the tags class, my compiler still
throws an error for class cast exception : org.xwiki.Pages. Could someone
please post a snippet to access pages with specific tags or any other
complex querying using classes in the org.xwiki classes. Any help on this
would be greatly appreciated friends.
/*
JDK: 1.5
Tomcat: 6.0.14 (Xwiki server)
Libraries: Apache HTTPClient 3.1, JAXB 2.1, Apache Commons Logging 1.1.1 &
Apache Commons Codec 1.4
Class File Dependencies: org.xwiki package of class files generated from the
XSD file at
http://svn.xwiki.org/svnroot/xwiki/platform/core/trunk/xwiki-rest/src/main/r
esources/xwiki.rest.model.xsd with the help of the XJC compiler available in
the JAXB 2.1 distribution
*/
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.xwiki.Page;
public class Main {
public static void main(String[] args) throws JAXBException,
HttpException, IOException {
HttpClient httpClient = new HttpClient();
JAXBContext context = JAXBContext.newInstance("org.xwiki");
Unmarshaller un = context.createUnmarshaller();
GetMethod getMethod = new
GetMethod("http://localhost:8080/xwiki/rest/wikis/xwiki/spaces/Main/pages/We
bHome");
getMethod.addRequestHeader("Accept", "application/xml");
httpClient.executeMethod(getMethod);
Page page = (Page) ((JAXBElement)
un.unmarshal(getMethod.getResponseBodyAsStream())).getValue();
System.out.println(page.getCreator());
System.out.println(page.getCreated());
System.out.println(page.getFullName());
System.out.println(page.getXwikiAbsoluteUrl());
}
}