REST API:Login

From AgileApps Support Wiki
Revision as of 00:17, 14 January 2011 by imported>Aeric
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
This code from the BaseClient sample program uses the Apache wink RestClient to make a REST login request and get a sessionId. It uses uses the Apache Wink client to post the login request, and calls a utility method defined in the BaseUtil] class to extract the sessionId from the response.
package demo.rest;

//HTTP Classes
import org.apache.wink.client.RestClient;
import org.apache.wink.client.Resource;
import org.apache.wink.client.ClientResponse;
import org.apache.commons.httpclient.HttpStatus;

// Utility Classes
import java.io.InputStream;

/*
 * A base client that handles login and logout and provides utility
 * methods for programs that use REST APIs.
 * 
 * Note:
 * This class uses the Apache wink RestClient, which makes it
 * pretty easy to make requests and handle responses. 
 */
public class BaseClient {
  
  String sessionId;
  RestClient client;
  
  String baseUrl = "http://{domain}";
  String username = "yourName";
  String password = "yourPassword";
  
  public String login()
  { 
    String url = baseUrl + "/networking/rest/login";
    String xml = "<platform>"
        + "<login>"
            + "<userName>"+username+"</userName>"
            + "<password>"+password+"</password>"
        + "</login>"
        + "</platform>";
    try
    {
      System.out.println("Logging in");
      this.client = new RestClient();
      Resource resource = client.resource(url);
      resource.contentType("application/xml");
      resource.accept("application/xml");
      ClientResponse response = resource.post(xml);
      String responseXml = response.getEntity(String.class);    
      this.sessionId = getValue("/platform/login/sessionId", responseXml);
      return this.sessionId;
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
    return null;
  }

  /*
   * Get a value from XML returned in a response.
   * 
   * @param xpath_expr  An XPATH expression. 
   *                    For example: "/platform/login/sessionId"
   *                    
   * @param xml The XML string to be parsed. Generally obtained using
   *        ClientResponse.getEntity(String.class) --Apache wink RestClient
   *        httpMethod.getResponseBodyAsString()   --Apache HttpClient
   */
  public static String getValue(String xpath_expr, String xml) 
  { 
    return XmlUtil.xpath_result(xpath_expr, xml);
  }

  // ...Other utility methods used by subclasses...

  public static void main(String args[])
  {
    BaseClient client = new BaseClient();
    String sessionId = client.login();
    System.out.println("SessionId is: " + sessionId);
    client.logout();
  }