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;