Difference between revisions of "REST API:StaticResourceUploadClient"

From LongJump Support Wiki
imported>Aeric
 
imported>Aeric
Line 105: Line 105:
:''Notes:''
:''Notes:''
:* '''[1,2]''' - Change these lines to update an existing resource
:* '''[1,2]''' - Change these lines to update an existing resource
:* '''[3]''' - Use the [{{DOCHOST}}/samples/demo/rest/XmlUtil#mediaType(String_filename) XmlUtil mediaType] method to automatically set the content type appropriate for the file.
:* '''[3]''' - Use the [{{DOCHOST}}/samples/demo/rest/BaseUtil#mediaType(String_filename) XmlUtil mediaType] method to automatically set the content type appropriate for the file.
<noinclude>
<noinclude>
[[Category:REST API|static resource client]]
[[Category:REST API|static resource client]]
</noinclude>
</noinclude>

Revision as of 18:51, 30 September 2011

The StaticResourceUploadClient demo program extends the REST API:BaseClient class to upload a static resource. With a couple of modifications, it can be used to do updates or load arbitrary file types.

Thumbsup.gif

Tip: The REST_samples.zip file contains BaseClient, the utility class it uses, and extensions like this one that demonstrate REST operations.

package demo.rest;

import java.io.File;
import javax.ws.rs.core.MediaType;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.PutMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;

/**
 * Load a static resource file.
 * Load a static resource file. This program extends demo.rest.BaseClient.java
 * which in turn makes use of demo.rest.BaseUtil.java.
 * <p>
 * Note:<br/>
 * This class uses the Apache commons HttpClient.
 * The Apache wink RestClient is generally more straightforward,
 * but multipart requests currently do not work when made using that client.
 */
public class StaticResourceUploadClient extends BaseClient
{
  	
  public void execute(String sessionId) 
  {
    String url = baseUrl + "/staticResource";
    //Use this for an update:
    // String url = baseUrl + "/staticResource/{id}";     // <--[1]
    String xml = "<platform>"
               + "<staticResource>"
                  + "<name>TestFile</name>"
                  + "<description>Test resource.</description>"
               + "</staticResource>"
               + "</platform>";
    
    try
    {
      // File part
      File file = new File("C:/testfiles/test.txt"); 
      FilePart fp = new FilePart("file_part", file);
      fp.setContentType(MediaType.TEXT_PLAIN);            // <--[3]
         //Use BaseUtil.mediaType() to set type based on file extension    
 
      // XML part
      StringPart sp = new StringPart("xml_part", xml);
      sp.setContentType(MediaType.APPLICATION_XML);        

      // Multipart wrapper
      final Part[] part = {fp, sp};        

      // Make the request
      HttpClient httpClient = new HttpClient();
      PostMethod httpMethod = new PostMethod(url);        // <--[2]
        // Use PutMethod for an update      

      httpMethod.setRequestHeader("SESSION_ID", sessionId);
      httpMethod.addRequestHeader("Accept", MediaType.APPLICATION_XML);
      httpMethod.addRequestHeader("Cookie", "JSESSIONID="+sessionId);
      httpMethod.setRequestEntity(
        new MultipartRequestEntity(part, httpMethod.getParams())
      );
 
      // Check status & echo response
      int status  = httpClient.executeMethod(httpMethod); 
      String responseXml = httpMethod.getResponseBodyAsString();
      if ((status == 200) || (status == 201))
      {
        // 200=Successful GET, PUT, or DELETE. 201=Successful POST.       
        echoResponse(httpMethod.getResponseBodyAsStream());
      }
      else
      {
        echoStatus(status, responseXml);
      }
    }
    catch (ClientWebException webException)
    {
        echoResponse(webException);
    }
    catch (Exception e)
    {
      System.out.println(e.getMessage());
      e.printStackTrace();
    }
  }
	
  public static void main(String[] args) 
  {
    StaticResourceUploadClient client = new StaticResourceUploadClient();
    String sessionID = client.login();
    client.execute(sessionID);
    client.logout();
  }	
}
Notes:
  • [1,2] - Change these lines to update an existing resource
  • [3] - Use the XmlUtil mediaType method to automatically set the content type appropriate for the file.