You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by sa...@apache.org on 2012/01/12 10:33:54 UTC

svn commit: r1230452 [1/2] - in /axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http: ./ impl/ impl/httpclient3/ util/

Author: sagara
Date: Thu Jan 12 09:33:53 2012
New Revision: 1230452

URL: http://svn.apache.org/viewvc?rev=1230452&view=rev
Log:
AXIS2-4318 -  Refactoring existing codes.  

Added:
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPAuthenticator.java   (with props)
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportConstants.java   (with props)
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportSender.java   (with props)
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/AxisRequestEntityImpl.java   (with props)
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPClient3TransportSender.java   (with props)
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPProxcyConfigurator.java   (with props)
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPSenderImpl.java   (with props)
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPTransportHeaders.java   (with props)
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HttpTransportPropertiesImpl.java   (with props)
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/RESTRequestEntity2Impl.java   (with props)
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/RESTRequestEntityImpl.java   (with props)
Modified:
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AxisRequestEntity.java
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AxisServlet.java
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/CommonsTransportHeaders.java
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HttpTransportProperties.java
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/RESTRequestEntity.java
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/RESTRequestEntity2.java
    axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/util/HTTPProxyConfigurationUtil.java

Modified: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java?rev=1230452&r1=1230451&r2=1230452&view=diff
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java (original)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPSender.java Thu Jan 12 09:33:53 2012
@@ -19,65 +19,27 @@
 
 package org.apache.axis2.transport.http;
 
-import org.apache.axiom.om.OMAttribute;
-import org.apache.axiom.om.OMElement;
+
+import java.io.IOException;
+import java.net.URL;
+
 import org.apache.axiom.om.OMOutputFormat;
 import org.apache.axis2.AxisFault;
-import org.apache.axis2.Constants;
 import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.NamedValue;
-import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.description.TransportOutDescription;
-import org.apache.axis2.i18n.Messages;
-import org.apache.axis2.transport.MessageFormatter;
-import org.apache.axis2.transport.TransportUtils;
-import org.apache.axis2.transport.http.util.HTTPProxyConfigurationUtil;
-import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.commons.httpclient.Credentials;
-import org.apache.commons.httpclient.Header;
-import org.apache.commons.httpclient.HeaderElement;
-import org.apache.commons.httpclient.HostConfiguration;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpConnectionManager;
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.HttpMethodBase;
-import org.apache.commons.httpclient.HttpState;
-import org.apache.commons.httpclient.HttpVersion;
-import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.httpclient.NTCredentials;
-import org.apache.commons.httpclient.NameValuePair;
-import org.apache.commons.httpclient.UsernamePasswordCredentials;
-import org.apache.commons.httpclient.auth.AuthPolicy;
-import org.apache.commons.httpclient.auth.AuthScope;
-import org.apache.commons.httpclient.params.HttpMethodParams;
-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.Set;
-import java.util.zip.GZIPInputStream;
+
+
 
 public abstract class AbstractHTTPSender {
-    protected static final String ANONYMOUS = "anonymous";
-    protected static final String PROXY_HOST_NAME = "proxy_host";
-    protected static final String PROXY_PORT = "proxy_port";
+    
     protected boolean chunked = false;
     protected String httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
-    private static final Log log = LogFactory.getLog(AbstractHTTPSender.class);
-
-    protected static final String PROTOCOL_HTTP = "http";
-    protected static final String PROTOCOL_HTTPS = "https";
+    
+    private static final Log log = LogFactory.getLog(AbstractHTTPSender.class);   
 
     /**
      * proxydiscription
@@ -109,638 +71,13 @@ public abstract class AbstractHTTPSender
                                 + " Can have values only HTTP/1.0 or HTTP/1.1");
             }
         }
-    }
-
-    /**
-     * Collect the HTTP header information and set them in the message context
-     *
-     * @param method HttpMethodBase from which to get information
-     * @param msgContext the MessageContext in which to place the information... OR NOT!
-     * @throws AxisFault if problems occur
-     */
-    protected void obtainHTTPHeaderInformation(HttpMethodBase method,
-                                               MessageContext msgContext) throws AxisFault {
-        // Set RESPONSE properties onto the REQUEST message context.  They will need to be copied off the request context onto
-        // the response context elsewhere, for example in the OutInOperationClient.
-        Map transportHeaders = new CommonsTransportHeaders(method.getResponseHeaders());
-        msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, transportHeaders);
-        msgContext.setProperty(HTTPConstants.MC_HTTP_STATUS_CODE, new Integer(method.getStatusCode()));
-        Header header = method.getResponseHeader(HTTPConstants.HEADER_CONTENT_TYPE);
-
-        if (header != null) {
-            HeaderElement[] headers = header.getElements();
-            MessageContext inMessageContext = msgContext.getOperationContext().getMessageContext(
-                    WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-
-            Object contentType = header.getValue();
-            Object charSetEnc = null;
-
-            for (int i = 0; i < headers.length; i++) {
-                NameValuePair charsetEnc = headers[i].getParameterByName(
-                        HTTPConstants.CHAR_SET_ENCODING);
-                if (charsetEnc != null) {
-                    charSetEnc = charsetEnc.getValue();
-                }
-            }
-
-            if (inMessageContext != null) {
-                inMessageContext
-                        .setProperty(Constants.Configuration.CONTENT_TYPE, contentType);
-                inMessageContext
-                        .setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, charSetEnc);
-            } else {
-
-                // Transport details will be stored in a HashMap so that anybody interested can
-                // retrieve them
-                HashMap transportInfoMap = new HashMap();
-                transportInfoMap.put(Constants.Configuration.CONTENT_TYPE, contentType);
-                transportInfoMap.put(Constants.Configuration.CHARACTER_SET_ENCODING, charSetEnc);
-
-                //the HashMap is stored in the outgoing message.
-                msgContext.setProperty(Constants.Configuration.TRANSPORT_INFO_MAP,
-                                       transportInfoMap);
-            }
-        }
-
-        String sessionCookie = null;
-        // Process old style headers first
-        Header[] cookieHeaders = method.getResponseHeaders(HTTPConstants.HEADER_SET_COOKIE);
-        String customCoookiId = (String) msgContext.getProperty(Constants.CUSTOM_COOKIE_ID);
-        for (int i = 0; i < cookieHeaders.length; i++) {
-            HeaderElement[] elements = cookieHeaders[i].getElements();
-            for (int e = 0; e < elements.length; e++) {
-                HeaderElement element = elements[e];
-                if (Constants.SESSION_COOKIE.equalsIgnoreCase(element.getName()) ||
-                        Constants.SESSION_COOKIE_JSESSIONID.equalsIgnoreCase(element.getName())) {
-                    sessionCookie = processCookieHeader(element);
-                }
-                if (customCoookiId != null && customCoookiId.equalsIgnoreCase(element.getName())) {
-                    sessionCookie = processCookieHeader(element);
-                }
-            }
-        }
-        // Overwrite old style cookies with new style ones if present
-        cookieHeaders = method.getResponseHeaders(HTTPConstants.HEADER_SET_COOKIE2);
-        for (int i = 0; i < cookieHeaders.length; i++) {
-            HeaderElement[] elements = cookieHeaders[i].getElements();
-            for (int e = 0; e < elements.length; e++) {
-                HeaderElement element = elements[e];
-                if (Constants.SESSION_COOKIE.equalsIgnoreCase(element.getName()) ||
-                        Constants.SESSION_COOKIE_JSESSIONID.equalsIgnoreCase(element.getName())) {
-                    sessionCookie = processCookieHeader(element);
-                }
-                if(customCoookiId!=null&&customCoookiId.equalsIgnoreCase(element.getName())){
-                    sessionCookie = processCookieHeader(element);
-                }
-            }
-        }
-
-        if (sessionCookie != null) {
-            msgContext.getServiceContext().setProperty(HTTPConstants.COOKIE_STRING, sessionCookie);
-        }
-    }
-
-    private String processCookieHeader(HeaderElement element) {
-        String cookie = element.getName() + "=" + element.getValue();
-        NameValuePair[] parameters =  element.getParameters();
-        for (int j = 0; parameters != null && j < parameters.length; j++) {
-            NameValuePair parameter = parameters[j];
-            cookie = cookie + "; " + parameter.getName() + "=" + parameter.getValue();
-        }
-        return cookie;
-    }
-
-    protected void processResponse(HttpMethodBase httpMethod,
-                                   MessageContext msgContext)
-            throws IOException {
-        obtainHTTPHeaderInformation(httpMethod, msgContext);
-
-        InputStream in = httpMethod.getResponseBodyAsStream();
-        if (in == null) {
-            throw new AxisFault(Messages.getMessage("canNotBeNull", "InputStream"));
-        }
-        Header contentEncoding =
-                httpMethod.getResponseHeader(HTTPConstants.HEADER_CONTENT_ENCODING);
-        if (contentEncoding != null) {
-            if (contentEncoding.getValue().
-                    equalsIgnoreCase(HTTPConstants.COMPRESSION_GZIP)) {
-                in = new GZIPInputStream(in);
-                // If the content-encoding is identity we can basically ignore it.
-            } else if (!"identity".equalsIgnoreCase(contentEncoding.getValue())) {
-                throw new AxisFault("HTTP :" + "unsupported content-encoding of '"
-                        + contentEncoding.getValue() + "' found");
-            }
-        }
-
-        OperationContext opContext = msgContext.getOperationContext();
-        if (opContext != null) {
-            opContext.setProperty(MessageContext.TRANSPORT_IN, in);
-        }
-    }
+    }       
 
     public abstract void send(MessageContext msgContext, URL url, String soapActionString)
-            throws IOException;
-
-    /**
-     * getting host configuration to support standard http/s, proxy and NTLM support
-     *
-     * @param client active HttpClient
-     * @param msgCtx active MessageContext
-     * @param targetURL the target URL
-     * @return a HostConfiguration set up with proxy information
-     * @throws AxisFault if problems occur
-     */
-    protected HostConfiguration getHostConfiguration(HttpClient client,
-                                                     MessageContext msgCtx,
-                                                     URL targetURL)throws AxisFault {
-
-        boolean isAuthenticationEnabled = isAuthenticationEnabled(msgCtx);
-        int port = targetURL.getPort();
-
-        String protocol = targetURL.getProtocol();
-        if (port == -1) {
-            if (PROTOCOL_HTTP.equals(protocol)) {
-                port = 80;
-            } else if (PROTOCOL_HTTPS.equals(protocol)) {
-                port = 443;
-            }
-
-        }
-
-        // to see the host is a proxy and in the proxy list - available in axis2.xml
-        HostConfiguration config = new HostConfiguration();
-
-        // one might need to set his own socket factory. Let's allow that case as well.
-        Protocol protocolHandler =
-                (Protocol)msgCtx.getOptions().getProperty(HTTPConstants.CUSTOM_PROTOCOL_HANDLER);
-
-        // setting the real host configuration
-        // I assume the 90% case, or even 99% case will be no protocol handler case.
-        if (protocolHandler == null) {
-            config.setHost(targetURL.getHost(), port, targetURL.getProtocol());
-        } else {
-            config.setHost(targetURL.getHost(), port, protocolHandler);
-        }
-
-        if (isAuthenticationEnabled) {
-            // Basic, Digest, NTLM and custom authentications.
-            this.setAuthenticationInfo(client, msgCtx, config);
-        }
-        // proxy configuration
-
-        if (HTTPProxyConfigurationUtil.isProxyEnabled(msgCtx, targetURL)) {
-            if(log.isDebugEnabled()){
-                log.debug("Configuring HTTP proxy.");
-            }
-            HTTPProxyConfigurationUtil.configure(msgCtx, client, config);
-        }
-
-        return config;
-    }
-
-    protected boolean isAuthenticationEnabled(MessageContext msgCtx) {
-        return (msgCtx.getProperty(HTTPConstants.AUTHENTICATE) != null);
-    }
-
-    /*
-    This will handle server Authentication, It could be either NTLM, Digest or Basic Authentication.
-    Apart from that user can change the priory or add a custom authentication scheme.
-    */
-    protected void setAuthenticationInfo(HttpClient agent,
-                                         MessageContext msgCtx,
-                                         HostConfiguration config) throws AxisFault {
-        HttpTransportProperties.Authenticator authenticator;
-        Object obj = msgCtx.getProperty(HTTPConstants.AUTHENTICATE);
-        if (obj != null) {
-            if (obj instanceof HttpTransportProperties.Authenticator) {
-                authenticator = (HttpTransportProperties.Authenticator) obj;
-
-                String username = authenticator.getUsername();
-                String password = authenticator.getPassword();
-                String host = authenticator.getHost();
-                String domain = authenticator.getDomain();
-
-                int port = authenticator.getPort();
-                String realm = authenticator.getRealm();
-
-                /* If retrying is available set it first */
-                isAllowedRetry = authenticator.isAllowedRetry();
-
-                Credentials creds;
-
-                HttpState tmpHttpState = null;
-                HttpState httpState = (HttpState)msgCtx.getProperty(HTTPConstants.CACHED_HTTP_STATE);
-                if (httpState != null) {
-                    tmpHttpState = httpState;
-                } else {
-                    tmpHttpState = agent.getState();
-                }
-                
-                agent.getParams()
-                        .setAuthenticationPreemptive(authenticator.getPreemptiveAuthentication());
-
-                if (host != null) {
-                    if (domain != null) {
-                        /*Credentials for NTLM Authentication*/
-                        creds = new NTCredentials(username, password, host, domain);
-                    } else {
-                        /*Credentials for Digest and Basic Authentication*/
-                        creds = new UsernamePasswordCredentials(username, password);
-                    }
-                    tmpHttpState.setCredentials(new AuthScope(host, port, realm), creds);
-                } else {
-                    if (domain != null) {
-                        /*Credentials for NTLM Authentication when host is ANY_HOST*/
-                        creds = new NTCredentials(username, password, AuthScope.ANY_HOST, domain);
-                        tmpHttpState.setCredentials(
-                                new AuthScope(AuthScope.ANY_HOST, port, realm), creds);
-                    } else {
-                        /*Credentials only for Digest and Basic Authentication*/
-                        creds = new UsernamePasswordCredentials(username, password);
-                        tmpHttpState.setCredentials(new AuthScope(AuthScope.ANY), creds);
-                    }
-                }
-                /* Customizing the priority Order */
-                List schemes = authenticator.getAuthSchemes();
-                if (schemes != null && schemes.size() > 0) {
-                    List authPrefs = new ArrayList(3);
-                    for (int i = 0; i < schemes.size(); i++) {
-                        if (schemes.get(i) instanceof AuthPolicy) {
-                            authPrefs.add(schemes.get(i));
-                            continue;
-                        }
-                        String scheme = (String) schemes.get(i);
-                        if (HttpTransportProperties.Authenticator.BASIC.equals(scheme)) {
-                            authPrefs.add(AuthPolicy.BASIC);
-                        } else if (HttpTransportProperties.Authenticator.NTLM.equals(scheme)) {
-                            authPrefs.add(AuthPolicy.NTLM);
-                        } else if (HttpTransportProperties.Authenticator.DIGEST.equals(scheme)) {
-                            authPrefs.add(AuthPolicy.DIGEST);
-                        }
-                    }
-                    agent.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY,
-                            authPrefs);
-                }
-
-            } else {
-                throw new AxisFault("HttpTransportProperties.Authenticator class cast exception");
-            }
-        }
-
-    }
-
-    /**
-     * Method used to copy all the common properties
-     *
-     * @param msgContext       - The messageContext of the request message
-     * @param url              - The target URL
-     * @param httpMethod       - The http method used to send the request
-     * @param httpClient       - The httpclient used to send the request
-     * @param soapActionString - The soap action atring of the request message
-     * @return MessageFormatter - The messageFormatter for the relavent request message
-     * @throws AxisFault - Thrown in case an exception occurs
-     */
-    protected MessageFormatter populateCommonProperties(MessageContext msgContext, URL url,
-                                                      HttpMethodBase httpMethod,
-                                                      HttpClient httpClient,
-                                                      String soapActionString)
-            throws AxisFault {
-
-        if (isAuthenticationEnabled(msgContext)) {
-            httpMethod.setDoAuthentication(true);
-        }
-
-        MessageFormatter messageFormatter = TransportUtils.getMessageFormatter(
-                msgContext);
-
-        url = messageFormatter.getTargetAddress(msgContext, format, url);
-
-        httpMethod.setPath(url.getPath());
-
-        httpMethod.setQueryString(url.getQuery());
-
-        httpMethod.setRequestHeader(HTTPConstants.HEADER_CONTENT_TYPE,
-                                    messageFormatter.getContentType(msgContext, format,
-                                                                    soapActionString));
-
-        httpMethod.setRequestHeader(HTTPConstants.HEADER_HOST, url.getHost());
-
-        if (msgContext.getOptions() != null && msgContext.getOptions().isManageSession()) {
-            // setting the cookie in the out path
-            Object cookieString = msgContext.getProperty(HTTPConstants.COOKIE_STRING);
-
-            if (cookieString != null) {
-                StringBuffer buffer = new StringBuffer();
-                buffer.append(cookieString);
-                httpMethod.setRequestHeader(HTTPConstants.HEADER_COOKIE, buffer.toString());
-            }
-        }
-
-        if (httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)) {
-            httpClient.getParams().setVersion(HttpVersion.HTTP_1_0);
-        }
-        return messageFormatter;
-    }
-
-    /**
-     * This is used to get the dynamically set time out values from the
-     * message context. If the values are not available or invalid then
-     * the default values or the values set by the configuration will be used
-     *
-     * @param msgContext the active MessageContext
-     * @param httpClient
-     */
-    protected void initializeTimeouts(MessageContext msgContext, HttpClient httpClient) {
-        // If the SO_TIMEOUT of CONNECTION_TIMEOUT is set by dynamically the
-        // override the static config
-        Integer tempSoTimeoutProperty =
-                (Integer) msgContext.getProperty(HTTPConstants.SO_TIMEOUT);
-        Integer tempConnTimeoutProperty =
-                (Integer) msgContext
-                        .getProperty(HTTPConstants.CONNECTION_TIMEOUT);
-        long timeout = msgContext.getOptions().getTimeOutInMilliSeconds();
-
-        if (tempConnTimeoutProperty != null) {
-            int connectionTimeout = tempConnTimeoutProperty.intValue();
-            // timeout for initial connection
-            httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(connectionTimeout);
-        } else {
-            // set timeout in client
-            if (timeout > 0) {
-                httpClient.getHttpConnectionManager().getParams().setConnectionTimeout((int) timeout);
-            }
-        }
-
-        if (tempSoTimeoutProperty != null) {
-            int soTimeout = tempSoTimeoutProperty.intValue();
-            // SO_TIMEOUT -- timeout for blocking reads
-            httpClient.getHttpConnectionManager().getParams().setSoTimeout(soTimeout);
-            httpClient.getParams().setSoTimeout(soTimeout);
-        } else {
-            // set timeout in client
-            if (timeout > 0) {
-                httpClient.getHttpConnectionManager().getParams().setSoTimeout((int) timeout);
-                httpClient.getParams().setSoTimeout((int) timeout);
-            }
-        }
-    }
-
-    /**
-     * This is used to get the dynamically set time out values from the
-     * message context. If the values are not available or invalid then
-     * the default values or the values set by the configuration will be used
-     *
-     * @param msgContext the active MessageContext
-     * @param httpMethod method
-     */
-    protected void setTimeouts(MessageContext msgContext, HttpMethod httpMethod) {
-        // If the SO_TIMEOUT of CONNECTION_TIMEOUT is set by dynamically the
-        // override the static config
-        Integer tempSoTimeoutProperty =
-                (Integer) msgContext.getProperty(HTTPConstants.SO_TIMEOUT);
-        Integer tempConnTimeoutProperty =
-                (Integer) msgContext
-                        .getProperty(HTTPConstants.CONNECTION_TIMEOUT);
-        long timeout = msgContext.getOptions().getTimeOutInMilliSeconds();
-
-        if (tempConnTimeoutProperty != null) {
-            // timeout for initial connection
-            httpMethod.getParams().setParameter("http.connection.timeout",
-                    tempConnTimeoutProperty);
-        }
-
-        if (tempSoTimeoutProperty != null) {
-            // SO_TIMEOUT -- timeout for blocking reads
-            httpMethod.getParams().setSoTimeout(tempSoTimeoutProperty);
-        } else {
-            // set timeout in client
-            if (timeout > 0) {
-                httpMethod.getParams().setSoTimeout((int) timeout);
-            }
-        }
-    }
+            throws IOException;   
 
     public void setFormat(OMOutputFormat format) {
         this.format = format;
-    }
-
-    protected HttpClient getHttpClient(MessageContext msgContext) {
-        ConfigurationContext configContext = msgContext.getConfigurationContext();
-
-        HttpClient httpClient = (HttpClient) msgContext.getProperty(
-                HTTPConstants.CACHED_HTTP_CLIENT);
-
-        if (httpClient == null) {
-            httpClient = (HttpClient) configContext.getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
-        }
-
-        if (httpClient != null) {
-            return httpClient;
-        }
-
-        synchronized (this) {
-            httpClient = (HttpClient) msgContext.getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
-
-            if (httpClient == null) {
-                httpClient = (HttpClient) configContext.getProperty(
-                        HTTPConstants.CACHED_HTTP_CLIENT);
-            }
-
-            if (httpClient != null) {
-                return httpClient;
-            }
-
-            HttpConnectionManager connManager =
-                    (HttpConnectionManager) msgContext.getProperty(
-                            HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
-            if (connManager == null) {
-                connManager =
-                        (HttpConnectionManager) msgContext.getProperty(
-                                HTTPConstants.MUTTITHREAD_HTTP_CONNECTION_MANAGER);
-            }
-            if (connManager == null) {
-                // reuse HttpConnectionManager
-                synchronized (configContext) {
-                    connManager = (HttpConnectionManager) configContext.getProperty(
-                            HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
-                    if (connManager == null) {
-                        log.trace("Making new ConnectionManager");
-                        connManager = new MultiThreadedHttpConnectionManager();
-                        configContext.setProperty(
-                                HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER, connManager);
-                    }
-                }
-            }
-            /*
-             * Create a new instance of HttpClient since the way
-             * it is used here it's not fully thread-safe.
-             */
-            httpClient = new HttpClient(connManager);
-
-            // Set the default timeout in case we have a connection pool starvation to 30sec
-            httpClient.getParams().setConnectionManagerTimeout(30000);
-
-            // Get the timeout values set in the runtime
-            initializeTimeouts(msgContext, httpClient);
-
-            return httpClient;
-        }
-    }
-
-    protected void executeMethod(HttpClient httpClient, MessageContext msgContext, URL url,
-                                 HttpMethod method) throws IOException {
-        HostConfiguration config = this.getHostConfiguration(httpClient, msgContext, url);
-
-        // set the custom headers, if available
-        addCustomHeaders(method, msgContext);
-
-        // add compression headers if needed
-        if (msgContext.isPropertyTrue(HTTPConstants.MC_ACCEPT_GZIP)) {
-            method.addRequestHeader(HTTPConstants.HEADER_ACCEPT_ENCODING,
-                    HTTPConstants.COMPRESSION_GZIP);
-        }
-
-        if (msgContext.isPropertyTrue(HTTPConstants.MC_GZIP_REQUEST)) {
-            method.addRequestHeader(HTTPConstants.HEADER_CONTENT_ENCODING,
-                    HTTPConstants.COMPRESSION_GZIP);
-        }
-        
-        if (msgContext.getProperty(HTTPConstants.HTTP_METHOD_PARAMS) != null) {
-            HttpMethodParams params = (HttpMethodParams)msgContext
-                    .getProperty(HTTPConstants.HTTP_METHOD_PARAMS);
-            method.setParams(params);
-        }
-
-        String cookiePolicy = (String) msgContext.getProperty(HTTPConstants.COOKIE_POLICY);
-        if (cookiePolicy != null) {
-            method.getParams().setCookiePolicy(cookiePolicy);   
-        }
-        HttpState httpState = (HttpState)msgContext.getProperty(HTTPConstants.CACHED_HTTP_STATE);
-
-        setTimeouts(msgContext, method);
-
-        httpClient.executeMethod(config, method, httpState);
-    }
-
-    public void addCustomHeaders(HttpMethod method, MessageContext msgContext) {
-
-        boolean isCustomUserAgentSet = false;
-        // set the custom headers, if available
-        Object httpHeadersObj = msgContext.getProperty(HTTPConstants.HTTP_HEADERS);
-        if (httpHeadersObj != null) {
-            if (httpHeadersObj instanceof List) {
-                List httpHeaders = (List) httpHeadersObj;
-                for (int i = 0; i < httpHeaders.size(); i++) {
-                    NamedValue nv = (NamedValue) httpHeaders.get(i);
-                    if (nv != null) {
-                        Header header = new Header(nv.getName(), nv.getValue());
-                        if (HTTPConstants.HEADER_USER_AGENT.equals(header.getName())) {
-                            isCustomUserAgentSet = true;
-                        }
-                        method.addRequestHeader(header);
-                    }
-                }
-    
-            }
-            if (httpHeadersObj instanceof Map) {
-                Map httpHeaders = (Map) httpHeadersObj;
-                for (Iterator iterator = httpHeaders.entrySet().iterator(); iterator.hasNext();) {
-                    Map.Entry entry  = (Map.Entry) iterator.next();
-                    String key = (String) entry.getKey();
-                    String value = (String) entry.getValue();
-                    if (HTTPConstants.HEADER_USER_AGENT.equals(key)) {
-                        isCustomUserAgentSet = true;
-                    }
-                    method.addRequestHeader(key, value);
-                }
-            }
-        }
-
-        // 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);
-        }
-
-    }
-
-
-    /**
-     * 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;
-        if (messageContext.getParameter(HTTPConstants.USER_AGENT) != null) {
-            OMElement userAgentElement =
-                    messageContext.getParameter(HTTPConstants.USER_AGENT).getParameterElement();
-            userAgentString = userAgentElement.getText().trim();
-            OMAttribute lockedAttribute = userAgentElement.getAttribute(new QName("locked"));
-            if (lockedAttribute != null) {
-                if (lockedAttribute.getAttributeValue().equalsIgnoreCase("true")) {
-                    locked = true;
-                }
-            }
-        }
-        // Runtime overing part
-        if (!locked) {
-            if (messageContext.getProperty(HTTPConstants.USER_AGENT) != null) {
-                userAgentString = (String) messageContext.getProperty(HTTPConstants.USER_AGENT);
-            }
-        }
-
-        return userAgentString;
-    }
+    }  
     
 }

Modified: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AxisRequestEntity.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AxisRequestEntity.java?rev=1230452&r1=1230451&r2=1230452&view=diff
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AxisRequestEntity.java (original)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AxisRequestEntity.java Thu Jan 12 09:33:53 2012
@@ -24,7 +24,6 @@ import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.transport.MessageFormatter;
 import org.apache.axis2.util.JavaUtils;
-import org.apache.commons.httpclient.methods.RequestEntity;
 
 import javax.xml.stream.FactoryConfigurationError;
 import java.io.IOException;
@@ -35,7 +34,7 @@ import java.util.zip.GZIPOutputStream;
  * This Request Entity is used by the HTTPCommonsTransportSender. This wraps the
  * Axis2 message formatter object.
  */
-public class AxisRequestEntity implements RequestEntity {
+public abstract class AxisRequestEntity  {
 
     private MessageFormatter messageFormatter;
 
@@ -114,7 +113,17 @@ public class AxisRequestEntity implement
         return bytes.length;
     }
 
-    public String getContentType() {
+    public String getContentTypeAsString() {
         return messageFormatter.getContentType(messageContext, format, soapAction);
     }
+
+    public boolean isChunked() {
+        return chunked;
+    }
+
+    public void setChunked(boolean chunked) {
+        this.chunked = chunked;
+    }
+    
+    
 }

Modified: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AxisServlet.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AxisServlet.java?rev=1230452&r1=1230451&r2=1230452&view=diff
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AxisServlet.java (original)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/AxisServlet.java Thu Jan 12 09:33:53 2012
@@ -555,7 +555,23 @@ public class AxisServlet extends HttpSer
         // AXIS2-4898: MultiThreadedHttpConnectionManager starts a thread that is not stopped by the
         // shutdown of the connection manager. If we want to avoid a resource leak, we need to call
         // shutdownAll here.
-        MultiThreadedHttpConnectionManager.shutdownAll();
+        // TODO - This action need be changed according to current HTTPClient.
+        String clientVersion = getHTTPClientVersion();
+        if (clientVersion != null
+                && HTTPTransportConstants.HTTP_CLIENT_4_X_VERSION.equals(clientVersion)) {
+            // TODO - Handle for HTTPClient 4
+        } else {
+            MultiThreadedHttpConnectionManager.shutdownAll();
+        }
+        
+    }
+
+    private String getHTTPClientVersion() {
+        Object version = configContext.getProperty(HTTPTransportConstants.HTTP_CLIENT_VERSION);
+        if (version != null) {
+            return String.valueOf(version);
+        }
+        return null;
     }
 
     /**

Modified: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java?rev=1230452&r1=1230451&r2=1230452&view=diff
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java (original)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java Thu Jan 12 09:33:53 2012
@@ -31,11 +31,10 @@ import org.apache.axis2.description.Tran
 import org.apache.axis2.handlers.AbstractHandler;
 import org.apache.axis2.transport.MessageFormatter;
 import org.apache.axis2.transport.OutTransportInfo;
-import org.apache.axis2.transport.TransportSender;
 import org.apache.axis2.transport.TransportUtils;
+import org.apache.axis2.transport.http.impl.httpclient3.HTTPSenderImpl;
 import org.apache.axis2.transport.http.server.AxisHttpResponse;
 import org.apache.axis2.util.JavaUtils;
-import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.HttpMethod;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -51,8 +50,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.zip.GZIPOutputStream;
 
-public class CommonsHTTPTransportSender extends AbstractHandler implements
-        TransportSender {
+public class CommonsHTTPTransportSender extends AbstractHandler implements HTTPTransportSender {
     /**
      * The {@link TransportOutDescription} object received by the call to
      * {@link #init(ConfigurationContext, TransportOutDescription)}.
@@ -80,20 +78,22 @@ public class CommonsHTTPTransportSender 
     private int connectionTimeout = HTTPConstants.DEFAULT_CONNECTION_TIMEOUT;
 
     public void cleanup(MessageContext msgContext) throws AxisFault {
-        HttpMethod httpMethod = (HttpMethod) msgContext.getProperty(HTTPConstants.HTTP_METHOD);
-
-        if (httpMethod != null) {
-            // TODO : Don't do this if we're not on the right thread! Can we confirm?
-            log.trace("cleanup() releasing connection for " + httpMethod);
-
-            httpMethod.releaseConnection();
-            msgContext.removeProperty(HTTPConstants.HTTP_METHOD); // guard against multiple calls
-        }
+        
+            HttpMethod httpMethod = (HttpMethod) msgContext.getProperty(HTTPConstants.HTTP_METHOD);
+            if (httpMethod != null) {
+                // TODO : Don't do this if we're not on the right thread! Can we confirm?
+                log.trace("cleanup() releasing connection for " + httpMethod);
+
+                httpMethod.releaseConnection();
+                msgContext.removeProperty(HTTPConstants.HTTP_METHOD); // guard against multiple calls
+            }        
     }
 
     public void init(ConfigurationContext confContext,
                      TransportOutDescription transportOut) throws AxisFault {
         this.transportOut = transportOut;
+        //Set HTTP client version
+        setHTTPClientVersion(confContext);
         
         // <parameter name="PROTOCOL">HTTP/1.0</parameter> or
         // <parameter name="PROTOCOL">HTTP/1.1</parameter> is
@@ -376,7 +376,7 @@ public class CommonsHTTPTransportSender 
             // select the Message Sender depending on the REST status
             AbstractHTTPSender sender;
 
-            sender = new HTTPSender();
+            sender = new HTTPSenderImpl();
 
             boolean chunked;
             if (messageContext.getProperty(HTTPConstants.CHUNKED) != null) {
@@ -403,10 +403,7 @@ public class CommonsHTTPTransportSender 
         } catch (MalformedURLException e) {
             log.debug(e);
             throw AxisFault.makeFault(e);
-        } catch (HttpException e) {
-            log.debug(e);
-            throw AxisFault.makeFault(e);
-        } catch (IOException e) {
+        }  catch (IOException e) {
             log.debug(e);
             throw AxisFault.makeFault(e);
         }
@@ -505,4 +502,10 @@ public class CommonsHTTPTransportSender 
 
         return soapActionString;
     }
+    
+    public void setHTTPClientVersion(ConfigurationContext configurationContext) {
+        configurationContext.setProperty(HTTPTransportConstants.HTTP_CLIENT_VERSION,
+                HTTPTransportConstants.HTTP_CLIENT_3_X_VERSION);
+    }
+    
 }

Modified: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/CommonsTransportHeaders.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/CommonsTransportHeaders.java?rev=1230452&r1=1230451&r2=1230452&view=diff
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/CommonsTransportHeaders.java (original)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/CommonsTransportHeaders.java Thu Jan 12 09:33:53 2012
@@ -19,30 +19,18 @@
 
 package org.apache.axis2.transport.http;
 
-import org.apache.commons.httpclient.Header;
 
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
-public class CommonsTransportHeaders implements Map {
-    private Header[] headers;
+public abstract class CommonsTransportHeaders implements Map {  
 
     HashMap headerMap = null;
-
-    public CommonsTransportHeaders(Header[] headers) {
-        this.headers = headers;
-    }
-
-    private void init() {
-        headerMap = new HashMap();
-
-        for (int i = 0; i < headers.length; i++) {
-            headerMap.put(headers[i].getName(), headers[i].getValue());
-        }
-    }
-
+   
+    protected abstract void init();
+    
     public int size() {
         if (headerMap == null) {
             init();
@@ -125,4 +113,14 @@ public class CommonsTransportHeaders imp
         }
         return headerMap.put(key, value);
     }
+
+    public HashMap getHeaderMap() {
+        return headerMap;
+    }
+
+    public void setHeaderMap(HashMap headerMap) {
+        this.headerMap = headerMap;
+    }
+    
+    
 }

Added: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPAuthenticator.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPAuthenticator.java?rev=1230452&view=auto
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPAuthenticator.java (added)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPAuthenticator.java Thu Jan 12 09:33:53 2012
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.transport.http;
+
+import java.util.List;
+
+public abstract class HTTPAuthenticator {
+
+    /* host that needed to be authenticated with */
+    private String host;
+    /* Domain needed by NTCredentials for NT Domain */
+    private String domain;
+    /* User for authenticate */
+    private String username;
+    /* Password of the user for authenticate */
+    private String password;
+    /* Switch to use preemptive authentication or not */
+    private boolean preemptive = false;
+    /* if Authentication scheme needs retry just turn on the following flag */
+    private boolean allowedRetry = false;
+    /* Changing the priorty or adding a custom AuthPolicy */
+    private List authSchemes;
+
+    public abstract int getPort();
+
+    public abstract void setPort(int port);
+
+    public abstract String getRealm();
+
+    public abstract void setRealm(String realm);
+
+    public abstract Object getAuthPolicyPref(String schema);
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(String host) {
+        this.host = host;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public void setPreemptiveAuthentication(boolean preemptive) {
+        this.preemptive = preemptive;
+    }
+
+    public boolean getPreemptiveAuthentication() {
+        return this.preemptive;
+    }
+
+    public String getDomain() {
+        return domain;
+    }
+
+    public void setDomain(String domain) {
+        this.domain = domain;
+    }
+
+    public void setAuthSchemes(List authSchemes) {
+        this.authSchemes = authSchemes;
+    }
+
+    public List getAuthSchemes() {
+        return this.authSchemes;
+    }
+
+    public void setAllowedRetry(boolean allowedRetry) {
+        this.allowedRetry = allowedRetry;
+    }
+
+    public boolean isAllowedRetry() {
+        return this.allowedRetry;
+    }
+
+}

Propchange: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPAuthenticator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java?rev=1230452&r1=1230451&r2=1230452&view=diff
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java (original)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java Thu Jan 12 09:33:53 2012
@@ -23,58 +23,17 @@ package org.apache.axis2.transport.http;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.i18n.Messages;
-import org.apache.axis2.transport.MessageFormatter;
-import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.commons.httpclient.Header;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.HttpMethodBase;
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.httpclient.methods.DeleteMethod;
-import org.apache.commons.httpclient.methods.GetMethod;
-import org.apache.commons.httpclient.methods.PostMethod;
-import org.apache.commons.httpclient.methods.PutMethod;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import java.io.IOException;
 import java.net.URL;
 
-public class HTTPSender extends AbstractHTTPSender {
+//TODO - It better if we can define these method in a interface move these into AbstractHTTPSender and get rid of this class.
+public abstract class HTTPSender extends AbstractHTTPSender {
 
     private static final Log log = LogFactory.getLog(HTTPSender.class);
-
-    public void send(MessageContext msgContext, URL url, String soapActionString)
-            throws IOException {
-
-        // execute the HtttpMethodBase - a connection manager can be given for
-        // handle multiple
-
-        String httpMethod =
-                (String) msgContext.getProperty(Constants.Configuration.HTTP_METHOD);
-
-        if ((httpMethod != null)) {
-
-            if (Constants.Configuration.HTTP_METHOD_GET.equalsIgnoreCase(httpMethod)) {
-                this.sendViaGet(msgContext, url, soapActionString);
-
-                return;
-            } else if (Constants.Configuration.HTTP_METHOD_DELETE.equalsIgnoreCase(httpMethod)) {
-                this.sendViaDelete(msgContext, url, soapActionString);
-
-                return;
-            } else if (Constants.Configuration.HTTP_METHOD_PUT.equalsIgnoreCase(httpMethod)) {
-                this.sendViaPut(msgContext, url, soapActionString);
-
-                return;
-            }
-        }
-
-        this.sendViaPost(msgContext, url, soapActionString);
-    }
-
+    
     /**
      * Used to send a request via HTTP Get method
      *
@@ -83,39 +42,9 @@ public class HTTPSender extends Abstract
      * @param soapActiionString - The soapAction string of the request
      * @throws AxisFault - Thrown in case an exception occurs
      */
-    private void sendViaGet(MessageContext msgContext, URL url, String soapActiionString)
-            throws AxisFault {
-
-        GetMethod getMethod = new GetMethod();
-        HttpClient httpClient = getHttpClient(msgContext);
-        MessageFormatter messageFormatter =
-                populateCommonProperties(msgContext, url, getMethod, httpClient, soapActiionString);
-
-        // Need to have this here because we can have soap action when using the soap response MEP
-        String soapAction =
-                messageFormatter.formatSOAPAction(msgContext, format, soapActiionString);
-
-        if (soapAction != null) {
-            getMethod.setRequestHeader(HTTPConstants.HEADER_SOAP_ACTION, soapAction);
-        }
-        try {
-            executeMethod(httpClient, msgContext, url, getMethod);
-            handleResponse(msgContext, getMethod);
-        } catch (IOException e) {
-            log.info("Unable to sendViaGet to url[" + url + "]", e);
-            throw AxisFault.makeFault(e);
-        } finally {
-            cleanup(msgContext, getMethod);
-        }
-    }
-
-    private void cleanup(MessageContext msgContext, HttpMethod method) {
-        if (msgContext.isPropertyTrue(HTTPConstants.AUTO_RELEASE_CONNECTION)) {
-            log.trace("AutoReleasing " + method);
-            method.releaseConnection();
-        }
-    }
-
+    protected abstract void sendViaGet(MessageContext msgContext, URL url, String soapActiionString)
+            throws AxisFault;
+    
     /**
      * Used to send a request via HTTP Delete Method
      *
@@ -124,24 +53,8 @@ public class HTTPSender extends Abstract
      * @param soapActiionString - The soapAction string of the request
      * @throws AxisFault - Thrown in case an exception occurs
      */
-    private void sendViaDelete(MessageContext msgContext, URL url, String soapActiionString)
-            throws AxisFault {
-
-        DeleteMethod deleteMethod = new DeleteMethod();
-        HttpClient httpClient = getHttpClient(msgContext);
-        populateCommonProperties(msgContext, url, deleteMethod, httpClient, soapActiionString);
-
-        try {
-            executeMethod(httpClient, msgContext, url, deleteMethod);
-            handleResponse(msgContext, deleteMethod);
-        } catch (IOException e) {
-            log.info("Unable to sendViaDelete to url[" + url + "]", e);
-            throw AxisFault.makeFault(e);
-        } finally {
-            cleanup(msgContext, deleteMethod);
-        }
-    }
-
+    protected abstract void sendViaDelete(MessageContext msgContext, URL url, String soapActiionString)
+            throws AxisFault; 
     /**
      * Used to send a request via HTTP Post Method
      *
@@ -150,55 +63,9 @@ public class HTTPSender extends Abstract
      * @param soapActionString - The soapAction string of the request
      * @throws AxisFault - Thrown in case an exception occurs
      */
-    private void sendViaPost(MessageContext msgContext, URL url,
-                             String soapActionString) throws AxisFault {
-
-
-        HttpClient httpClient = getHttpClient(msgContext);
-
-/*  What's up with this, it never gets used anywhere?? --Glen
-        String charEncoding =
-                (String) msgContext.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING);
-
-        if (charEncoding == null) {
-            charEncoding = MessageContext.DEFAULT_CHAR_SET_ENCODING;
-        }
-*/
-
-        PostMethod postMethod = new PostMethod();
-        if (log.isTraceEnabled()) {
-            log.trace(Thread.currentThread() + " PostMethod " + postMethod + " / " + httpClient);
-        }
-        MessageFormatter messageFormatter =
-                populateCommonProperties(msgContext, url, postMethod, httpClient, soapActionString);
+    protected abstract void sendViaPost(MessageContext msgContext, URL url,
+                             String soapActionString) throws AxisFault;
 
-        postMethod.setRequestEntity(new AxisRequestEntity(messageFormatter,
-                                                          msgContext, format, soapActionString,
-                                                          chunked, isAllowedRetry));
-
-        if (!httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10) && chunked) {
-            postMethod.setContentChunked(true);
-        }
-
-        String soapAction = messageFormatter.formatSOAPAction(msgContext, format, soapActionString);
-
-        if (soapAction != null) {
-            postMethod.setRequestHeader(HTTPConstants.HEADER_SOAP_ACTION, soapAction);
-        }
-
-        /*
-         *   main excecution takes place..
-         */
-        try {
-            executeMethod(httpClient, msgContext, url, postMethod);
-            handleResponse(msgContext, postMethod);
-        } catch (IOException e) {
-            log.info("Unable to sendViaPost to url[" + url + "]", e);
-            throw AxisFault.makeFault(e);
-        } finally {
-            cleanup(msgContext, postMethod);
-        }
-    }
 
     /**
      * Used to send a request via HTTP Put Method
@@ -208,51 +75,10 @@ public class HTTPSender extends Abstract
      * @param soapActionString - The soapAction string of the request
      * @throws AxisFault - Thrown in case an exception occurs
      */
-    private void sendViaPut(MessageContext msgContext, URL url,
-                            String soapActionString) throws AxisFault {
-
-
-        HttpClient httpClient = getHttpClient(msgContext);
-
-/*  Same deal - this value never gets used, why is it here? --Glen
-        String charEncoding =
-                (String) msgContext.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING);
-
-        if (charEncoding == null) {
-            charEncoding = MessageContext.DEFAULT_CHAR_SET_ENCODING;
-        }
-*/
+    protected abstract void sendViaPut(MessageContext msgContext, URL url,
+                            String soapActionString) throws AxisFault;
 
-        PutMethod putMethod = new PutMethod();
-        MessageFormatter messageFormatter =
-                populateCommonProperties(msgContext, url, putMethod, httpClient, soapActionString);
-
-        putMethod.setRequestEntity(new AxisRequestEntity(messageFormatter,
-                                                         msgContext, format, soapActionString,
-                                                         chunked, isAllowedRetry));
-
-        if (!httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10) && chunked) {
-            putMethod.setContentChunked(true);
-        }
-
-        String soapAction = messageFormatter.formatSOAPAction(msgContext, format, soapActionString);
-        if (soapAction != null) {
-            putMethod.setRequestHeader(HTTPConstants.HEADER_SOAP_ACTION, soapAction);
-        }
-
-        /*
-         *   main excecution takes place..
-         */
-        try {
-            executeMethod(httpClient, msgContext, url, putMethod);
-            handleResponse(msgContext, putMethod);
-        } catch (IOException e) {
-            log.info("Unable to sendViaPut to url[" + url + "]", e);
-            throw AxisFault.makeFault(e);
-        } finally {
-            cleanup(msgContext, putMethod);
-        }
-    }
+     
 
     /**
      * Used to handle the HTTP Response
@@ -261,55 +87,40 @@ public class HTTPSender extends Abstract
      * @param method     - The HTTP method used
      * @throws IOException - Thrown in case an exception occurs
      */
-    private void handleResponse(MessageContext msgContext,
-                                HttpMethodBase method) throws IOException {
-        int statusCode = method.getStatusCode();
-        log.trace("Handling response - " + statusCode);
-        if (statusCode == HttpStatus.SC_OK) {
-            // Save the HttpMethod so that we can release the connection when cleaning up
-            msgContext.setProperty(HTTPConstants.HTTP_METHOD, method);
-            processResponse(method, msgContext);
-        } else if (statusCode == HttpStatus.SC_ACCEPTED) {
-        	/* When an HTTP 202 Accepted code has been received, this will be the case of an execution 
-        	 * of an in-only operation. In such a scenario, the HTTP response headers should be returned,
-        	 * i.e. session cookies. */
-        	obtainHTTPHeaderInformation(method, msgContext);
-        	// Since we don't expect any content with a 202 response, we must release the connection
-        	method.releaseConnection();
-        } else if (statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR ||
-                statusCode == HttpStatus.SC_BAD_REQUEST) {
-            // Save the HttpMethod so that we can release the connection when cleaning up
-            msgContext.setProperty(HTTPConstants.HTTP_METHOD, method);
-            Header contenttypeHeader =
-                    method.getResponseHeader(HTTPConstants.HEADER_CONTENT_TYPE);
-            String value = null;
-            if (contenttypeHeader != null) {
-                value = contenttypeHeader.getValue();
-            }
-             OperationContext opContext = msgContext.getOperationContext();
-            if(opContext!=null){
-                MessageContext inMessageContext =
-                        opContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-                if(inMessageContext!=null){
-                    inMessageContext.setProcessingFault(true);
-                }
-            }
-            if (value != null) {
+    protected abstract void handleResponse(MessageContext msgContext,
+                                Object httpMethodBase) throws IOException;
+    
+    protected abstract void cleanup(MessageContext msgContext, Object httpMethod);
+    
+    
 
-                processResponse(method, msgContext);
-            }
-            
-            if (org.apache.axis2.util.Utils.isClientThreadNonBlockingPropertySet(msgContext)) {
-            	 throw new AxisFault(Messages.getMessage("transportError",
-                         String.valueOf(statusCode),
-                         method.getStatusText()));
+    public void send(MessageContext msgContext, URL url, String soapActionString)
+            throws IOException {
+
+        // execute the HtttpMethodBase - a connection manager can be given for
+        // handle multiple
+
+        String httpMethod =
+                (String) msgContext.getProperty(Constants.Configuration.HTTP_METHOD);
+
+        if ((httpMethod != null)) {
+
+            if (Constants.Configuration.HTTP_METHOD_GET.equalsIgnoreCase(httpMethod)) {
+                this.sendViaGet(msgContext, url, soapActionString);
+
+                return;
+            } else if (Constants.Configuration.HTTP_METHOD_DELETE.equalsIgnoreCase(httpMethod)) {
+                this.sendViaDelete(msgContext, url, soapActionString);
+
+                return;
+            } else if (Constants.Configuration.HTTP_METHOD_PUT.equalsIgnoreCase(httpMethod)) {
+                this.sendViaPut(msgContext, url, soapActionString);
+
+                return;
             }
-        } else {
-            // Since we don't process the response, we must release the connection immediately
-            method.releaseConnection();
-            throw new AxisFault(Messages.getMessage("transportError",
-                                                    String.valueOf(statusCode),
-                                                    method.getStatusText()));
         }
-    }
+
+        this.sendViaPost(msgContext, url, soapActionString);
+    }    
+       
 }

Added: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportConstants.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportConstants.java?rev=1230452&view=auto
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportConstants.java (added)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportConstants.java Thu Jan 12 09:33:53 2012
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.transport.http;
+
+public class HTTPTransportConstants {
+
+    //Settings for HTTP proxy configuration.
+    public static final String HTTP_PROXY_HOST = "http.proxyHost";
+    public static final String HTTP_PROXY_PORT = "http.proxyPort";
+    public static final String HTTP_NON_PROXY_HOSTS = "http.nonProxyHosts";
+
+    public static final String ATTR_PROXY = "Proxy";
+    public static final String PROXY_HOST_ELEMENT = "ProxyHost";
+    public static final String PROXY_PORT_ELEMENT = "ProxyPort";
+    public static final String PROXY_USER_ELEMENT = "ProxyUser";
+    public static final String PROXY_PASSWORD_ELEMENT = "ProxyPassword";
+
+    public static final String PROXY_CONFIGURATION_NOT_FOUND = "HTTP Proxy is enabled, but proxy configuration element is missing in axis2.xml";
+    public static final String PROXY_HOST_ELEMENT_NOT_FOUND = "HTTP Proxy is enabled, but proxy host element is missing in axis2.xml";
+    public static final String PROXY_PORT_ELEMENT_NOT_FOUND = "HTTP Proxy is enabled, but proxy port element is missing in axis2.xml";
+    public static final String PROXY_HOST_ELEMENT_WITH_EMPTY_VALUE = "HTTP Proxy is enabled, but proxy host value is empty.";
+    public static final String PROXY_PORT_ELEMENT_WITH_EMPTY_VALUE = "HTTP Proxy is enabled, but proxy port value is empty.";
+    
+    //Settings to define HTTPClient version
+    public static final String HTTP_CLIENT_VERSION = "http.client.version"; 
+    public static final String HTTP_CLIENT_3_X_VERSION = "http.client.version.3x";
+    public static final String HTTP_CLIENT_4_X_VERSION = "http.client.version.4x";  
+    
+    public static final String ANONYMOUS = "anonymous";
+    public static final String PROXY_HOST_NAME = "proxy_host";
+    public static final String PROXY_PORT = "proxy_port";
+    public static final String PROTOCOL_HTTP = "http";
+    public static final String PROTOCOL_HTTPS = "https";
+
+}

Propchange: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportConstants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportSender.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportSender.java?rev=1230452&view=auto
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportSender.java (added)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportSender.java Thu Jan 12 09:33:53 2012
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.transport.http;
+
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.transport.TransportSender;
+
+public interface HTTPTransportSender extends TransportSender {
+
+    void setHTTPClientVersion(ConfigurationContext configurationContext);
+
+}

Propchange: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportSender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HttpTransportProperties.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HttpTransportProperties.java?rev=1230452&r1=1230451&r2=1230452&view=diff
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HttpTransportProperties.java (original)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/HttpTransportProperties.java Thu Jan 12 09:33:53 2012
@@ -19,48 +19,36 @@
 
 package org.apache.axis2.transport.http;
 
-import org.apache.commons.httpclient.HttpVersion;
-import org.apache.commons.httpclient.auth.AuthPolicy;
-import org.apache.commons.httpclient.auth.AuthScope;
-
-import java.util.List;
 import java.util.Properties;
 
 /**
  * Utility bean for setting transport properties in runtime.
  */
-public class HttpTransportProperties {
-    protected boolean chunked;
-    protected HttpVersion httpVersion;
+public abstract class HttpTransportProperties {
+    
+    protected boolean chunked;    
     protected String protocol;
-
-    public HttpTransportProperties() {
-    }
+       
+    public abstract void setHttpVersion(Object httpVerion);
+    
+    public abstract Object getHttpVersion();
 
     public boolean getChunked() {
         return chunked;
     }
-
-    public HttpVersion getHttpVersion() {
-        return httpVersion;
-    }
-
+    
     public String getProtocol() {
         return protocol;
     }
 
     public void setChunked(boolean chunked) {
         this.chunked = chunked;
-    }
-
-    public void setHttpVersion(HttpVersion httpVerion) {
-        this.httpVersion = httpVerion;
-    }
+    }  
 
     public void setProtocol(String protocol) {
         this.protocol = protocol;
     }
-
+    
     public static class ProxyProperties {
         protected int proxyPort = -1;
         protected String domain = null;
@@ -112,109 +100,7 @@ public class HttpTransportProperties {
         }
     }
 
-    /*
-    This class is responsible for holding all the necessary information needed for NTML, Digest
-    and Basic Authentication. Authentication itself is handled by httpclient. User doesn't need to
-    warry about what authentication mechanism it uses. Axis2 uses httpclinet's default authentication
-    patterns.
-    */
-    public static class Authenticator {
-        /*host that needed to be authenticated with*/
-        private String host;
-        /*port of the host that needed to be authenticated with*/
-        private int port = AuthScope.ANY_PORT;
-        /*Realm for authentication scope*/
-        private String realm = AuthScope.ANY_REALM;
-        /*Domain needed by NTCredentials for NT Domain*/
-        private String domain;
-        /*User for authenticate*/
-        private String username;
-        /*Password of the user for authenticate*/
-        private String password;
-        /* Switch to use preemptive authentication or not*/
-        private boolean preemptive = false;
-        /* if Authentication scheme needs retry just turn on the following flag */
-        private boolean allowedRetry = false;
-        /* Changing the priorty or adding a custom AuthPolicy*/
-        private List authSchemes;
-
-        /* Default Auth Schems*/
-        public static final String NTLM = AuthPolicy.NTLM;
-        public static final String DIGEST = AuthPolicy.DIGEST;
-        public static final String BASIC = AuthPolicy.BASIC;
-
-        public String getHost() {
-            return host;
-        }
-
-        public void setHost(String host) {
-            this.host = host;
-        }
-
-        public int getPort() {
-            return port;
-        }
-
-        public void setPort(int port) {
-            this.port = port;
-        }
-
-        public String getRealm() {
-            return realm;
-        }
-
-        public void setRealm(String realm) {
-            this.realm = realm;
-        }
-
-        public String getUsername() {
-            return username;
-        }
-
-        public void setUsername(String username) {
-            this.username = username;
-        }
-
-        public String getPassword() {
-            return password;
-        }
-
-        public void setPassword(String password) {
-            this.password = password;
-        }
-
-        public void setPreemptiveAuthentication(boolean preemptive) {
-            this.preemptive = preemptive;
-        }
-
-        public boolean getPreemptiveAuthentication() {
-            return this.preemptive;
-        }
-
-        public String getDomain() {
-            return domain;
-        }
-
-        public void setDomain(String domain) {
-            this.domain = domain;
-        }
-
-        public void setAuthSchemes(List authSchemes) {
-            this.authSchemes = authSchemes;
-        }
-
-        public List getAuthSchemes() {
-            return this.authSchemes;
-        }
-
-        public void setAllowedRetry(boolean allowedRetry) {
-            this.allowedRetry = allowedRetry;
-        }
-
-        public boolean isAllowedRetry() {
-            return this.allowedRetry;
-        }
-    }
+   
 
     /**
      * @deprecated org.apache.axis2.transport.http.HttpTransportProperties.MailProperties has been

Modified: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/RESTRequestEntity.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/RESTRequestEntity.java?rev=1230452&r1=1230451&r2=1230452&view=diff
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/RESTRequestEntity.java (original)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/RESTRequestEntity.java Thu Jan 12 09:33:53 2012
@@ -23,7 +23,6 @@ import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMOutputFormat;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
-import org.apache.commons.httpclient.methods.RequestEntity;
 
 import javax.xml.stream.FactoryConfigurationError;
 import javax.xml.stream.XMLStreamException;
@@ -31,7 +30,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 
-public class RESTRequestEntity implements RequestEntity {
+public abstract class RESTRequestEntity {
     private byte[] bytes;
     private String charSetEnc;
     private boolean chunked;
@@ -115,7 +114,7 @@ public class RESTRequestEntity implement
         }
     }
 
-    public String getContentType() {
+    public String getContentTypeAsString() {
         String encoding = format.getCharSetEncoding();
         String contentType = format.getContentType();
         if (encoding != null) {
@@ -133,4 +132,61 @@ public class RESTRequestEntity implement
     public boolean isRepeatable() {
         return true;
     }
+
+    public byte[] getBytes() {
+        return bytes;
+    }
+
+    public void setBytes(byte[] bytes) {
+        this.bytes = bytes;
+    }
+
+    public String getCharSetEnc() {
+        return charSetEnc;
+    }
+
+    public void setCharSetEnc(String charSetEnc) {
+        this.charSetEnc = charSetEnc;
+    }
+
+    public boolean isChunked() {
+        return chunked;
+    }
+
+    public void setChunked(boolean chunked) {
+        this.chunked = chunked;
+    }
+
+    public OMElement getElement() {
+        return element;
+    }
+
+    public void setElement(OMElement element) {
+        this.element = element;
+    }
+
+    public MessageContext getMsgCtxt() {
+        return msgCtxt;
+    }
+
+    public void setMsgCtxt(MessageContext msgCtxt) {
+        this.msgCtxt = msgCtxt;
+    }
+
+    public String getSoapActionString() {
+        return soapActionString;
+    }
+
+    public void setSoapActionString(String soapActionString) {
+        this.soapActionString = soapActionString;
+    }
+
+    public OMOutputFormat getFormat() {
+        return format;
+    }
+
+    public void setFormat(OMOutputFormat format) {
+        this.format = format;
+    }    
+    
 }

Modified: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/RESTRequestEntity2.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/RESTRequestEntity2.java?rev=1230452&r1=1230451&r2=1230452&view=diff
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/RESTRequestEntity2.java (original)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/RESTRequestEntity2.java Thu Jan 12 09:33:53 2012
@@ -19,12 +19,10 @@
 
 package org.apache.axis2.transport.http;
 
-import org.apache.commons.httpclient.methods.RequestEntity;
-
 import java.io.IOException;
 import java.io.OutputStream;
 
-public class RESTRequestEntity2 implements RequestEntity {
+public abstract class RESTRequestEntity2 {
     private String contentType;
     private String postRequestBody;
 
@@ -41,11 +39,25 @@ public class RESTRequestEntity2 implemen
         return this.postRequestBody.getBytes().length;
     }
 
-    public String getContentType() {
+    public String getContentTypeAsString() {
         return this.contentType;
     }
 
     public boolean isRepeatable() {
         return true;
     }
+   
+
+    public void setContentType(String contentType) {
+        this.contentType = contentType;
+    }
+
+    public String getPostRequestBody() {
+        return postRequestBody;
+    }
+
+    public void setPostRequestBody(String postRequestBody) {
+        this.postRequestBody = postRequestBody;
+    }
+    
 }

Added: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/AxisRequestEntityImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/AxisRequestEntityImpl.java?rev=1230452&view=auto
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/AxisRequestEntityImpl.java (added)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/AxisRequestEntityImpl.java Thu Jan 12 09:33:53 2012
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.transport.http.impl.httpclient3;
+
+import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.transport.MessageFormatter;
+import org.apache.axis2.transport.http.AxisRequestEntity;
+
+import org.apache.commons.httpclient.methods.RequestEntity;
+
+/**
+ * This Request Entity is used by the HTTPCommonsTransportSender. This wraps the
+ * Axis2 message formatter object.
+ */
+public class AxisRequestEntityImpl extends AxisRequestEntity implements RequestEntity {
+
+    /**
+     * Method calls to this request entity are delegated to the following Axis2
+     * message formatter object.
+     * 
+     * @param messageFormatter
+     */
+    public AxisRequestEntityImpl(MessageFormatter messageFormatter, MessageContext msgContext,
+            OMOutputFormat format, String soapAction, boolean chunked, boolean isAllowedRetry) {
+        super(messageFormatter, msgContext, format, soapAction, chunked, isAllowedRetry);
+    }
+
+    public String getContentType() {
+        return getContentTypeAsString();
+    }
+
+}

Propchange: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/AxisRequestEntityImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPClient3TransportSender.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPClient3TransportSender.java?rev=1230452&view=auto
==============================================================================
--- axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPClient3TransportSender.java (added)
+++ axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPClient3TransportSender.java Thu Jan 12 09:33:53 2012
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.transport.http.impl.httpclient3;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.transport.http.CommonsHTTPTransportSender;
+import org.apache.axis2.transport.http.HTTPTransportConstants;
+import org.apache.axis2.transport.http.HTTPTransportSender;
+
+public class HTTPClient3TransportSender extends CommonsHTTPTransportSender implements
+        HTTPTransportSender {
+
+    public void setHTTPClientVersion(ConfigurationContext configurationContext) {
+        configurationContext.setProperty(HTTPTransportConstants.HTTP_CLIENT_VERSION,
+                HTTPTransportConstants.HTTP_CLIENT_3_X_VERSION);
+    }
+
+    @Override
+    public void cleanup(MessageContext msgContext) throws AxisFault {
+        super.cleanup(msgContext);
+    }
+
+}

Propchange: axis/axis2/java/core/branches/AXIS2-4318/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPClient3TransportSender.java
------------------------------------------------------------------------------
    svn:eol-style = native