Author: supun
Date: Tue Dec 21 15:10:58 2010
New Revision: 1051519

URL: http://svn.apache.org/viewvc?rev=1051519&view=rev
Log:
fixing issue AXIS2-4840

Modified:
    
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java

Modified: 
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java?rev=1051519&r1=1051518&r2=1051519&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java
 Tue Dec 21 15:10:58 2010
@@ -55,16 +55,13 @@ import org.apache.commons.httpclient.par
 import org.apache.commons.httpclient.protocol.Protocol;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.http.protocol.HTTP;
 
 import javax.xml.namespace.QName;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.zip.GZIPInputStream;
 
 public abstract class AbstractHTTPSender {
@@ -599,6 +596,34 @@ public abstract class AbstractHTTPSender
             }
         }
 
+        // we have to consider the TRANSPORT_HEADERS map as well
+        Map transportHeaders = (Map) 
msgContext.getProperty(MessageContext.TRANSPORT_HEADERS);
+        if (transportHeaders != null) {
+            removeUnwantedHeaders(msgContext);
+
+            Set headerEntries = transportHeaders.entrySet();
+
+            for (Object headerEntry : headerEntries) {
+                if (headerEntry instanceof Map.Entry) {
+                    Header[] headers = method.getRequestHeaders();
+
+                    boolean headerAdded = false;
+                    for (Header header : headers) {
+                        if (header.getName() != null &&                        
         
+                                header.getName().equals(((Map.Entry) 
headerEntry).getKey())) {
+                            headerAdded = true;
+                            break;
+                        }
+                    }
+
+                    if (!headerAdded) {
+                        method.addRequestHeader(((Map.Entry) 
headerEntry).getKey().toString(),
+                                ((Map.Entry) 
headerEntry).getValue().toString());
+                    }
+                }
+            }
+        }
+
         if (!isCustomUserAgentSet) {
             String userAgentString = getUserAgent(msgContext);
             method.setRequestHeader(HTTPConstants.HEADER_USER_AGENT, 
userAgentString);
@@ -606,6 +631,34 @@ public abstract class AbstractHTTPSender
 
     }
 
+
+    /**
+     * Remove unwanted headers from the transport headers map of outgoing 
request. These are headers which
+     * should be dictated by the transport and not the user. We remove these 
as these may get
+     * copied from the request messages
+     *
+     * @param msgContext the Axis2 Message context from which these headers 
should be removed
+     */
+    private void removeUnwantedHeaders(MessageContext msgContext) {
+        Map headers = (Map) 
msgContext.getProperty(MessageContext.TRANSPORT_HEADERS);
+
+        if (headers == null || headers.isEmpty()) {
+            return;
+        }
+
+        Iterator iter = headers.keySet().iterator();
+        while (iter.hasNext()) {
+            String headerName = (String) iter.next();
+            if (HTTP.CONN_DIRECTIVE.equalsIgnoreCase(headerName) ||
+                HTTP.TRANSFER_ENCODING.equalsIgnoreCase(headerName) ||
+                HTTP.DATE_HEADER.equalsIgnoreCase(headerName) ||
+                HTTP.CONTENT_TYPE.equalsIgnoreCase(headerName) ||
+                HTTP.CONTENT_LEN.equalsIgnoreCase(headerName)) {
+                iter.remove();
+            }
+        }
+    }
+
     private String getUserAgent(MessageContext messageContext) {
         String userAgentString = "Axis2";
         boolean locked = false;


Reply via email to