From 9f9338ddb4233abd2fa4f2b073a23221262870e1 Mon Sep 17 00:00:00 2001
From: Mihai Soloi <mihai.soloi@gmail.com>
Date: Mon, 24 Dec 2012 22:36:16 +0100
Subject: [PATCH] MAILET-89: upgraded http-client to 4.2.2 branch because it is
 OSGi ready

---
 pom.xml                                            |  9 ++-
 standard/pom.xml                                   |  4 +-
 .../mailet/standard/mailets/HeadersToHTTP.java     | 62 ++++++++++-----------
 .../mailet/standard/mailets/SerialiseToHTTP.java   | 64 +++++++++++-----------
 4 files changed, 69 insertions(+), 70 deletions(-)

diff --git a/pom.xml b/pom.xml
index 74f4447..f7296df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,6 @@
         <groupId>org.apache.james</groupId>
         <artifactId>james-project</artifactId>
         <version>1.8.1</version>
-        <relativePath />
     </parent>
 
     <groupId>org.apache.james</groupId>
@@ -47,7 +46,7 @@
         <activation.version>1.1.1</activation.version>
         <bcmail-jdk16.version>1.46</bcmail-jdk16.version>
         <commons-collections.version>3.2.1</commons-collections.version>
-        <commons-httpclient.version>3.1</commons-httpclient.version>
+        <httpclient-osgi.version>4.2.2</httpclient-osgi.version>
         <!-- maven-mailetdocs-plugin artifacts -->
         <maven-artifact.version>3.0-alpha-1</maven-artifact.version>
         <maven-plugin-api.version>3.0.4</maven-plugin-api.version>
@@ -119,9 +118,9 @@
                 <version>${commons-collections.version}</version>
             </dependency>
             <dependency>
-                <groupId>commons-httpclient</groupId>
-                <artifactId>commons-httpclient</artifactId>
-                <version>${commons-httpclient.version}</version>
+                <groupId>org.apache.httpcomponents</groupId>
+                <artifactId>httpclient-osgi</artifactId>
+                <version>${httpclient-osgi.version}</version>
             </dependency>
             <dependency>
                 <groupId>com.thoughtworks.qdox</groupId>
diff --git a/standard/pom.xml b/standard/pom.xml
index 55dda5f..9b2bf6b 100644
--- a/standard/pom.xml
+++ b/standard/pom.xml
@@ -45,8 +45,8 @@
             <artifactId>mail</artifactId>
         </dependency>
         <dependency>
-            <groupId>commons-httpclient</groupId>
-            <artifactId>commons-httpclient</artifactId>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient-osgi</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.james</groupId>
diff --git a/standard/src/main/java/org/apache/james/mailet/standard/mailets/HeadersToHTTP.java b/standard/src/main/java/org/apache/james/mailet/standard/mailets/HeadersToHTTP.java
index 76f9714..ee67fa0 100644
--- a/standard/src/main/java/org/apache/james/mailet/standard/mailets/HeadersToHTTP.java
+++ b/standard/src/main/java/org/apache/james/mailet/standard/mailets/HeadersToHTTP.java
@@ -18,22 +18,25 @@
  ****************************************************************/
 package org.apache.james.mailet.standard.mailets;
 
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.params.BasicHttpParams;
+import org.apache.http.params.HttpParams;
+import org.apache.mailet.Mail;
+import org.apache.mailet.base.GenericMailet;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.HashSet;
 
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpException;
-import org.apache.commons.httpclient.NameValuePair;
-import org.apache.commons.httpclient.methods.PostMethod;
-import org.apache.mailet.Mail;
-import org.apache.mailet.base.GenericMailet;
-
 /**
  * Serialise the email and pass it to an HTTP call
  * 
@@ -96,8 +99,6 @@ public class HeadersToHTTP extends GenericMailet {
 	 * @param mail
 	 *            the mail being processed
 	 * 
-	 * @throws MessagingException
-	 *             if an error arises during message processing
 	 */
 	public void service(Mail mail) {
 		try {
@@ -133,29 +134,28 @@ public class HeadersToHTTP extends GenericMailet {
 		}
 	}
 
-	private String httpPost(HashSet<NameValuePair> pairs) throws HttpException, IOException {
+	private String httpPost(HashSet<NameValuePair> pairs) throws IOException {
 
-		HttpClient client = new HttpClient();
-		PostMethod post = new PostMethod(url);
+		HttpClient client = new DefaultHttpClient();
+		HttpPost post = new HttpPost(url);
 
-		post.setRequestBody(setToArray(pairs));
+		post.setParams(extractParams(pairs));
 		
-		int statusCode = client.executeMethod(post);
-		String result = statusCode + ": " + post.getStatusLine().toString();
+		HttpResponse clientResponse = client.execute(post);
+		String result = clientResponse.getStatusLine().getStatusCode() + ": " + clientResponse.getStatusLine();
 		log("HeadersToHTTP: " + result);
-		
+
+        client.getConnectionManager().shutdown();
 		return result;
 		
 	}
 
-	private NameValuePair[] setToArray(HashSet<NameValuePair> pairs) {
-		NameValuePair[] r =  new NameValuePair[pairs.size()];
-		int i = 0;
+	private HttpParams extractParams(HashSet<NameValuePair> pairs) {
+		HttpParams params =  new BasicHttpParams();
 		for(NameValuePair p : pairs) {
-			r[i] = p;
-			i = i + 1;
+			params.setParameter(p.getName(),p.getValue());
 		}
-		return r;
+		return params;
 	}
 	
 	private HashSet<NameValuePair> getNameValuePairs(MimeMessage message) throws UnsupportedEncodingException, MessagingException {
@@ -169,21 +169,21 @@ public class HeadersToHTTP extends GenericMailet {
 		
     	if (message!=null) {
 	    	if (message.getSender()!=null) {
-	    		pairs.add( new NameValuePair( "from", message.getSender().toString() ) );
+	    		pairs.add( new BasicNameValuePair( "from", message.getSender().toString() ) );
 	    	}
 	    	if (message.getReplyTo()!=null) {
-	    		pairs.add( new NameValuePair( "reply_to", message.getReplyTo().toString() ) );
+	    		pairs.add( new BasicNameValuePair( "reply_to", message.getReplyTo().toString() ) );
 	    	}
 	    	if (message.getMessageID()!=null) {
-	    		pairs.add( new NameValuePair( "message_id", message.getMessageID() ) );
+	    		pairs.add( new BasicNameValuePair( "message_id", message.getMessageID() ) );
 	    	}
 	    	if (message.getSubject()!=null) {
-	    		pairs.add( new NameValuePair( "subject", message.getSubject() ) );
+	    		pairs.add( new BasicNameValuePair( "subject", message.getSubject() ) );
 	    	}
-	    	pairs.add( new NameValuePair( "size", Integer.toString(message.getSize()) ) );
+	    	pairs.add( new BasicNameValuePair( "size", Integer.toString(message.getSize()) ) );
 	    }
 
-		pairs.add( new NameValuePair( parameterKey, parameterValue) );
+		pairs.add( new BasicNameValuePair( parameterKey, parameterValue) );
     			
     	return pairs;
     }
diff --git a/standard/src/main/java/org/apache/james/mailet/standard/mailets/SerialiseToHTTP.java b/standard/src/main/java/org/apache/james/mailet/standard/mailets/SerialiseToHTTP.java
index 1e38ac8..5b4bad9 100644
--- a/standard/src/main/java/org/apache/james/mailet/standard/mailets/SerialiseToHTTP.java
+++ b/standard/src/main/java/org/apache/james/mailet/standard/mailets/SerialiseToHTTP.java
@@ -18,24 +18,27 @@
  ****************************************************************/
 package org.apache.james.mailet.standard.mailets;
 
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.params.BasicHttpParams;
+import org.apache.http.params.HttpParams;
+import org.apache.mailet.Mail;
+import org.apache.mailet.base.GenericMailet;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.MalformedURLException;
 import java.net.URL;
 
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpException;
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.httpclient.NameValuePair;
-import org.apache.commons.httpclient.methods.PostMethod;
-
-import org.apache.mailet.base.GenericMailet;
-import org.apache.mailet.Mail;
-
 /**
  * Serialise the email and pass it to an HTTP call
  * 
@@ -106,9 +109,7 @@ public class SerialiseToHTTP extends GenericMailet {
 	 * 
 	 * @param mail
 	 *            the mail being processed
-	 * 
-	 * @throws MessagingException
-	 *             if an error arises during message processing
+	 *
 	 */
 	public void service(Mail mail) {
 		try {
@@ -152,27 +153,25 @@ public class SerialiseToHTTP extends GenericMailet {
 
 	private String httpPost(NameValuePair[] data) {
 
-		String response = null;
-		HttpClient client = new HttpClient();
-		PostMethod post = new PostMethod(url);
-
+        String response = null;
+		HttpClient client = new DefaultHttpClient();
+		HttpPost post = new HttpPost(url);
+        HttpParams params = new BasicHttpParams();
 		if( data.length>1 && data[1]!=null ) {
+            params.setParameter(data[1].getName(),data[1].getValue());
 			log( data[1].getName() + "::" + data[1].getValue() );
 		}
-		post.setRequestBody(data);
+		post.setParams(params);
 
 		try {
-			int statusCode = client.executeMethod(post);
+			HttpResponse clientResponse = client.execute(post);
 
-			if (statusCode != HttpStatus.SC_OK) {
-				log("POST failed: " + post.getStatusLine());
-				response = post.getStatusLine().toString();
-			}// else {
-			//	byte[] responseBody = post.getResponseBody();
-			//	response = new String(responseBody);
-			//}
+			if (clientResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
+				log("POST failed: " + clientResponse.getStatusLine());
+				response = clientResponse.getStatusLine().toString();
+			}
 
-		} catch (HttpException e) {
+		} catch (ClientProtocolException e) {
 			log("Fatal protocol violation: " + e.getMessage());
 			response = "Fatal protocol violation: " + e.getMessage();
 		} catch (IOException e) {
@@ -182,6 +181,7 @@ public class SerialiseToHTTP extends GenericMailet {
 			post.releaseConnection();
 		}
 
+        client.getConnectionManager().shutdown();
 		return response;
 	}
 
@@ -192,10 +192,10 @@ public class SerialiseToHTTP extends GenericMailet {
     		l = 2;
     	}
     	
-    	NameValuePair[] data = new NameValuePair[l];
-    	data[0] = new NameValuePair( messageKeyName, message);
+    	NameValuePair[] data = new BasicNameValuePair[l];
+    	data[0] = new BasicNameValuePair( messageKeyName, message);
     	if (l==2) {
-    		data[1] = new NameValuePair( parameterKey, parameterValue);
+    		data[1] = new BasicNameValuePair( parameterKey, parameterValue);
     	}
     	
     	return data;
-- 
1.8.0.2

