UploadPackageClient.java

From AgileApps Support Wiki
Revision as of 22:27, 16 December 2010 by imported>Aeric
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
<syntaxhighlight lang="java" enclose="div">

import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.InvocationTargetException;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; 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; import org.apache.commons.httpclient.params.HttpMethodParams;

public class UploadPackageClient {

 public static final String REST_SERVICE = 
   "https://{domainName}/networking/RESTService";
 public static final String USER_NAME = "jim@acme.com";
 public static final String PASSWORD = "jimacme";
 
 public static String login() throws Exception
 {
   String sessionId = null;
   StringBuilder loginRequestXML = 
     new StringBuilder("<?xml version=\"1.0\" ?>") 
           .append("    <longjump ver=\"2.0\">")
           .append("      <login_request>")   
           .append("        <login>").append(USER_NAME).append("</login>")   
           .append("        <password>").append(PASSWORD).append("</password>")
           .append("      </login_request>")
           .append("    </longjump>");
   
     // Create an instance of HttpClient.
     HttpClient client = new HttpClient();
     
     //Create GET method
     PostMethod method = new PostMethod(REST_SERVICE);
     
     //add to Request
     method.addParameter("xml_data", loginRequestXML.toString());
      // Provide custom retry handler (necessary)
     method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
         new DefaultHttpMethodRetryHandler(3, false));
     try 
     {
         // Execute the method.
         int statusCode = client.executeMethod(method);
         if (statusCode != HttpStatus.SC_OK) 
         {
           System.err.println("Method failed: " + method.getStatusLine());
         }
     
         // Read the response body.
         byte[] responseBody = method.getResponseBody();
         String file = new String(responseBody);
         int indexOfXMLStart = 
             file.indexOf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
         int indexOfXMLEnd = file.indexOf("</longjump>");        
         String xmlPartOfResponse = 
             file.substring(indexOfXMLStart, indexOfXMLEnd + 11);
         
         if(xmlPartOfResponse.contains("<session_id>"))
         {
           int sessionIdBeginTagIndx = xmlPartOfResponse.indexOf("<session_id>");
           int sessionIdEndTagIndx = xmlPartOfResponse.indexOf("</session_id>") 
                                   + "</session_id>".length();
           
           sessionId = 
             (xmlPartOfResponse.substring(sessionIdBeginTagIndx, sessionIdEndTagIndx))
                 .replace("<session_id>", "")
                 .replace("</session_id>", "")
                 .trim();
         }
         else if (xmlPartOfResponse.contains("<error>"))
         {
           int messageBeginTagIndx = xmlPartOfResponse.indexOf("<message>");
           int messageEndTagIndx = xmlPartOfResponse.indexOf("</message>") 
                                 + "</message>".length();
           String message = 
             (xmlPartOfResponse.substring(messageBeginTagIndx, messageEndTagIndx))
                 .replace("<message>", "")
                 .replace("</message>", "")
                 .trim();
           throw new Exception(message);
         }          
     }
     catch (HttpException e) 
     {
         e.printStackTrace();
         throw new InvocationTargetException(e, 
             "Fatal protocol violation: " + e.getMessage());
   } 
     catch (IOException e) 
     {
         e.printStackTrace();
         throw new InvocationTargetException(e, 
             "Fatal transport error: " + e.getMessage());
   } 
     catch (Exception e)
     {
       e.printStackTrace();
       throw new InvocationTargetException(e, e.getMessage());
     }
     finally 
     {
         // Release the connection.
         method.releaseConnection();
         return sessionId;
     }
 }
 
 public static void pushPackageToRemoteServer(
     String userName, String password, 
     String url, String packageFileToUpload)
 {
   String sessionId = null;
   try
   {
     sessionId =login();
   }
   catch(Exception e)
   {
     System.out.println(e.getMessage());
   }
   
   File targetFile = new File(packageFileToUpload);    
   StringBuilder uploadPackageXML = 
     new StringBuilder("<?xml version=\"1.0\" ?>") 
           .append("  <longjump ver=\"2.0\">")
           .append("    <resource_upload_request>")
           .append("      <session_id>").append(sessionId).append("</session_id>")
           .append("        <type>upload_package</type>")
           .append("    </resource_upload_request>")
           .append("  </longjump>");
   
   // Create an instance of HttpClient.
   HttpClient client = new HttpClient();
     
   //Create GET method
   PostMethod method = new PostMethod(url);
     
   FilePart fp = null;
     
   StringPart sp = null;
     
   try 
   {
     fp = new FilePart(targetFile.getName(), targetFile);
   } 
     catch (FileNotFoundException e1) 
   {
     // TODO Auto-generated catch block
     System.out.println(e1.getMessage());
   }  
   sp= new StringPart("xml_data", uploadPackageXML.toString());
               
   //add to Request
   Part[] parts = {fp,sp};
     
   method.setRequestEntity(
     (RequestEntity)new MultipartRequestEntity(parts,method.getParams()));
     
     // Provide custom retry handler is necessary
     method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
         new DefaultHttpMethodRetryHandler(3, false));
     try 
     {
         // Execute the method.
         int statusCode = client.executeMethod(method);
         if (statusCode != HttpStatus.SC_OK) 
         {
           throw new Exception("Method failed: " + method.getStatusLine());
         }
     
         // Read the response body.
         byte[] responseBody = method.getResponseBody();
         String file = new String(responseBody);
         int indexOfXMLStart = 
             file.indexOf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
         int indexOfXMLEnd = file.indexOf("</longjump>");
         String xmlPartOfResponse = 
             file.substring(indexOfXMLStart, indexOfXMLEnd + 11);
         
         int messageBeginTagIndx = xmlPartOfResponse.indexOf("<message>");
         int messageEndTagIndx = xmlPartOfResponse.indexOf("</message>") 
                               + "</message>".length();
         String message = 
           (xmlPartOfResponse.substring(messageBeginTagIndx, messageEndTagIndx))
               .replace("<message>", "")
               .replace("</message>", "")
               .trim();
         if(xmlPartOfResponse.contains("<success>"))
         {
           System.out.println(message);
         }
         else
         {
           throw new Exception(message);
         }
     }
     catch (HttpException e) 
     {
       System.out.println(e.getMessage());
     } 
     catch (IOException e) 
     {
       System.out.println(e.getMessage());
     } 
     catch (Exception e)
     {
       System.out.println(e.getMessage());
     }
     finally 
     {
         // Release the connection.
         method.releaseConnection();
     }
 }
 
 public static void main(String args[])
 {
   UploadPackageClient upc = new UploadPackageClient();
   String packageLocation ="C:\\myPackage.zip";
   try
   {
     upc.pushPackageToRemoteServer(USER_NAME, PASSWORD,
                                   REST_SERVICE,packageLocation);
     
   }
   catch(Exception e)
   {
     System.out.println(e.getMessage());
   }
 }

} </syntaxhighlight>