Difference between revisions of "REST API:StaticResourceUploadClient"
From LongJump Support Wiki
imported>Aeric |
imported>Aeric |
||
Line 30: | Line 30: | ||
{ | { | ||
public void execute(String | public void execute(String cookieString) | ||
{ | { | ||
String url = baseUrl + "/staticResource"; | String url = baseUrl + "/staticResource"; | ||
Line 37: | Line 37: | ||
String xml = "<platform>" | String xml = "<platform>" | ||
+ "<staticResource>" | + "<staticResource>" | ||
+ "<name> | + "<name>upload_test</name>" | ||
+ "<description>Test | + "<description>Test an API-driven upload</description>" | ||
+ "</staticResource>" | + "</staticResource>" | ||
+ "</platform>"; | + "</platform>"; | ||
Line 57: | Line 57: | ||
final Part[] part = {fp, sp}; | final Part[] part = {fp, sp}; | ||
// | // Create the request | ||
HttpClient httpClient = new HttpClient(); | HttpClient httpClient = new HttpClient(); | ||
PostMethod httpMethod = new PostMethod(url); // <--[2] | PostMethod httpMethod = new PostMethod(url); // <--[2] | ||
// Use PutMethod for an update | // Use PutMethod for an update | ||
httpMethod. | // Set the response type (xml) and the session cookie. | ||
//(Had we logged in with HttpClient, the cookie would be handled | |||
// automatically. But since we let BaseClient do the log in and log out, | |||
// we need to tack on the cookie string here.) | |||
httpMethod.addRequestHeader("Cookie", cookieString); | |||
httpMethod.addRequestHeader("Accept", MediaType.APPLICATION_XML); | httpMethod.addRequestHeader("Accept", MediaType.APPLICATION_XML); | ||
httpMethod.setRequestEntity( | httpMethod.setRequestEntity( | ||
new MultipartRequestEntity(part, httpMethod.getParams()) | new MultipartRequestEntity(part, httpMethod.getParams()) | ||
Line 96: | Line 99: | ||
{ | { | ||
StaticResourceUploadClient client = new StaticResourceUploadClient(); | StaticResourceUploadClient client = new StaticResourceUploadClient(); | ||
String | String cookieString = client.login(); | ||
client.execute( | client.execute(cookieString); | ||
client.logout(); | client.logout(); | ||
} | } |
Revision as of 20:15, 3 February 2012
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.
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 cookieString) { String url = baseUrl + "/staticResource"; //Use this for an update: // String url = baseUrl + "/staticResource/{id}"; // <--[1] String xml = "<platform>" + "<staticResource>" + "<name>upload_test</name>" + "<description>Test an API-driven upload</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}; // Create the request HttpClient httpClient = new HttpClient(); PostMethod httpMethod = new PostMethod(url); // <--[2] // Use PutMethod for an update // Set the response type (xml) and the session cookie. //(Had we logged in with HttpClient, the cookie would be handled // automatically. But since we let BaseClient do the log in and log out, // we need to tack on the cookie string here.) httpMethod.addRequestHeader("Cookie", cookieString); httpMethod.addRequestHeader("Accept", MediaType.APPLICATION_XML); 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 cookieString = client.login(); client.execute(cookieString); client.logout(); } }
- Notes:
- [1,2] - Change these lines to update an existing resource
- [3] - Use the BaseUtil mediaType() method to automatically set the content type appropriate for the file.