Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http-hc3/src/main/java/org/apache/axis2/transport/http/impl/httpclient3/HTTPSenderImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http-hc3/src/main/java/org/apache/axis2/transport/http/impl/httpclient3/HTTPSenderImpl.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http-hc3/src/main/java/org/apache/axis2/transport/http/impl/httpclient3/HTTPSenderImpl.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http-hc3/src/main/java/org/apache/axis2/transport/http/impl/httpclient3/HTTPSenderImpl.java
 Mon May  1 11:36:09 2017
@@ -19,33 +19,18 @@
 
 package org.apache.axis2.transport.http.impl.httpclient3;
 
-import java.io.IOException;
-import java.io.InputStream;
 import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.zip.GZIPInputStream;
 
 import org.apache.axis2.AxisFault;
-import org.apache.axis2.Constants;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.transport.http.AxisRequestEntity;
-import org.apache.axis2.transport.http.CommonsTransportHeaders;
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.transport.http.HTTPSender;
 import org.apache.axis2.transport.http.Request;
-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.HeaderElement;
 import org.apache.commons.httpclient.HttpConnectionManager;
 import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.httpclient.NameValuePair;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -53,232 +38,13 @@ public class HTTPSenderImpl extends HTTP
 
     private static final Log log = LogFactory.getLog(HTTPSenderImpl.class);
 
-    boolean isChunked() {
-        return chunked;
-    }
-
-    String getHttpVersion() {
-        return httpVersion;
-    }
-
     @Override
     protected Request createRequest(MessageContext msgContext, String 
methodName, URL url,
             AxisRequestEntity requestEntity) throws AxisFault {
-        return new RequestImpl(this, msgContext, methodName, url, 
requestEntity);
-    }
-
-    /**
-     * 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(Request request, HttpMethod 
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(request.getResponseHeaders());
-        msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, 
transportHeaders);
-        msgContext.setProperty(HTTPConstants.MC_HTTP_STATUS_CODE,
-                new Integer(request.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(Request request, HttpMethodBase httpMethod, 
MessageContext msgContext)
-            throws IOException {
-        obtainHTTPHeaderInformation(request, 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);
-        }
+        return new RequestImpl(getHttpClient(msgContext), msgContext, 
methodName, url, requestEntity);
     }
 
-    /**
-     * 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);
-            }
-        }
-    }
-
-    protected HttpClient getHttpClient(MessageContext msgContext) {
+    private HttpClient getHttpClient(MessageContext msgContext) {
         ConfigurationContext configContext = 
msgContext.getConfigurationContext();
 
         HttpClient httpClient = (HttpClient) msgContext
@@ -333,9 +99,6 @@ public class HTTPSenderImpl extends HTTP
             // starvation to 30sec
             httpClient.getParams().setConnectionManagerTimeout(30000);
 
-            // Get the timeout values set in the runtime
-            initializeTimeouts(msgContext, httpClient);
-
             return httpClient;
         }
     }

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http-hc3/src/main/java/org/apache/axis2/transport/http/impl/httpclient3/RequestImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http-hc3/src/main/java/org/apache/axis2/transport/http/impl/httpclient3/RequestImpl.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http-hc3/src/main/java/org/apache/axis2/transport/http/impl/httpclient3/RequestImpl.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http-hc3/src/main/java/org/apache/axis2/transport/http/impl/httpclient3/RequestImpl.java
 Mon May  1 11:36:09 2017
@@ -19,27 +19,27 @@
 package org.apache.axis2.transport.http.impl.httpclient3;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.axiom.mime.Header;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.transport.http.AxisRequestEntity;
 import org.apache.axis2.transport.http.HTTPAuthenticator;
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.transport.http.HTTPTransportConstants;
 import org.apache.axis2.transport.http.Request;
-import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.httpclient.Credentials;
+import org.apache.commons.httpclient.HeaderElement;
 import org.apache.commons.httpclient.HostConfiguration;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpMethodBase;
 import org.apache.commons.httpclient.HttpState;
-import org.apache.commons.httpclient.HttpStatus;
 import org.apache.commons.httpclient.HttpVersion;
 import org.apache.commons.httpclient.NTCredentials;
 import org.apache.commons.httpclient.UsernamePasswordCredentials;
@@ -52,21 +52,21 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 final class RequestImpl implements Request {
+    private static final String[] COOKIE_HEADER_NAMES = { 
HTTPConstants.HEADER_SET_COOKIE, HTTPConstants.HEADER_SET_COOKIE2 };
+
     private static final Log log = LogFactory.getLog(RequestImpl.class);
 
-    protected final HTTPSenderImpl sender;
-    protected final MessageContext msgContext;
-    protected final URL url;
-    protected final HttpMethodBase method;
-    protected final HttpClient httpClient;
+    private final HttpClient httpClient;
+    private final MessageContext msgContext;
+    private final URL url;
+    private final HttpMethodBase method;
     private final HostConfiguration config;
 
-    RequestImpl(HTTPSenderImpl sender, MessageContext msgContext, final String 
methodName, URL url,
+    RequestImpl(HttpClient httpClient, MessageContext msgContext, final String 
methodName, URL url,
             AxisRequestEntity requestEntity) throws AxisFault {
-        this.sender = sender;
+        this.httpClient = httpClient;
         this.msgContext = msgContext;
         this.url = url;
-        httpClient = sender.getHttpClient(msgContext);
         if (requestEntity == null) {
             method = new HttpMethodBase() {
                 @Override
@@ -86,9 +86,7 @@ final class RequestImpl implements Reque
                 }
             };
             entityEnclosingMethod.setRequestEntity(new 
AxisRequestEntityImpl(requestEntity));
-            if 
(!sender.getHttpVersion().equals(HTTPConstants.HEADER_PROTOCOL_10) && 
sender.isChunked()) {
-                entityEnclosingMethod.setContentChunked(true);
-            }
+            entityEnclosingMethod.setContentChunked(requestEntity.isChunked());
             method = entityEnclosingMethod;
         }
         method.setPath(url.getPath());
@@ -130,6 +128,16 @@ final class RequestImpl implements Reque
     }
 
     @Override
+    public void setConnectionTimeout(int timeout) {
+        method.getParams().setParameter("http.connection.timeout", timeout);
+    }
+
+    @Override
+    public void setSocketTimeout(int timeout) {
+        method.getParams().setSoTimeout(timeout);
+    }
+
+    @Override
     public int getStatusCode() {
         return method.getStatusCode();
     }
@@ -140,24 +148,39 @@ final class RequestImpl implements Reque
     }
 
     @Override
+    public String getResponseHeader(String name) {
+        org.apache.commons.httpclient.Header header = 
method.getResponseHeader(name);
+        return header == null ? null : header.getValue();
+    }
+
+    @Override
     public Header[] getResponseHeaders() {
         return convertHeaders(method.getResponseHeaders());
     }
 
     @Override
-    public void execute() throws AxisFault {
-        try {
-            executeMethod();
-            handleResponse();
-        } catch (IOException e) {
-            log.info("Unable to send to url[" + url + "]", e);
-            throw AxisFault.makeFault(e);
-        } finally {
-            cleanup();
+    public Map<String,String> getCookies() {
+        Map<String,String> cookies = null;
+        for (String name : COOKIE_HEADER_NAMES) {
+            for (org.apache.commons.httpclient.Header header : 
method.getResponseHeaders(name)) {
+                for (HeaderElement element : header.getElements()) {
+                    if (cookies == null) {
+                        cookies = new HashMap<String,String>();
+                    }
+                    cookies.put(element.getName(), element.getValue());
+                }
+            }
         }
+        return cookies;
+    }
+
+    @Override
+    public InputStream getResponseContent() throws IOException {
+        return method.getResponseBodyAsStream();
     }
 
-    private void executeMethod() throws IOException {
+    @Override
+    public void execute() throws IOException {
         populateHostConfiguration();
 
         // add compression headers if needed
@@ -178,66 +201,12 @@ final class RequestImpl implements Reque
         }
         HttpState httpState = (HttpState) 
msgContext.getProperty(HTTPConstants.CACHED_HTTP_STATE);
 
-        sender.setTimeouts(msgContext, method);
-
         httpClient.executeMethod(config, method, httpState);
     }
 
-    private void handleResponse() throws IOException {
-        int statusCode = getStatusCode();
-        log.trace("Handling response - " + statusCode);
-        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. */
-            sender.obtainHTTPHeaderInformation(this, method, msgContext);
-            // Since we don't expect any content with a 202 response, we must 
release the connection
-            method.releaseConnection();            
-        } else if (statusCode >= 200 && statusCode < 300) {
-            // Save the HttpMethod so that we can release the connection when 
cleaning up
-            msgContext.setProperty(HTTPConstants.HTTP_METHOD, method);
-            sender.processResponse(this, method, msgContext);
-        } 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);
-            org.apache.commons.httpclient.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) {
-
-                sender.processResponse(this, method, msgContext);
-            }
-
-            if 
(org.apache.axis2.util.Utils.isClientThreadNonBlockingPropertySet(msgContext)) {
-                throw new AxisFault(Messages.getMessage("transportError",
-                        String.valueOf(statusCode), getStatusText()));
-            }
-        } 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),
-                    getStatusText()));
-        }
-    }
-
-    private void cleanup() {
-        if (msgContext.isPropertyTrue(HTTPConstants.AUTO_RELEASE_CONNECTION)) {
-            log.trace("AutoReleasing " + method);
-            method.releaseConnection();
-        }
+    @Override
+    public void releaseConnection() {
+        method.releaseConnection();
     }
 
     /**
@@ -248,7 +217,7 @@ final class RequestImpl implements Reque
      * @throws AxisFault
      *             if problems occur
      */
-    protected void populateHostConfiguration() throws AxisFault {
+    private void populateHostConfiguration() throws AxisFault {
 
         int port = url.getPort();
 

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPTransportSender.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPTransportSender.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPTransportSender.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/AbstractHTTPTransportSender.java
 Mon May  1 11:36:09 2017
@@ -356,7 +356,7 @@ public abstract class AbstractHTTPTransp
             URL url = new URL(toEPR.getAddress());
 
             // select the Message Sender depending on the REST status
-            AbstractHTTPSender sender = createHTTPSender();
+            HTTPSender sender = createHTTPSender();
 
             String httpVersion;
             if 
(messageContext.getProperty(HTTPConstants.HTTP_PROTOCOL_VERSION) != null) {
@@ -392,7 +392,7 @@ public abstract class AbstractHTTPTransp
         }
     }
 
-    protected abstract AbstractHTTPSender createHTTPSender();
+    protected abstract HTTPSender createHTTPSender();
 
     /**
      * @param actionString

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java
 Mon May  1 11:36:09 2017
@@ -20,33 +20,74 @@
 package org.apache.axis2.transport.http;
 
 
+import org.apache.axiom.mime.ContentType;
 import org.apache.axiom.mime.Header;
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
+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.description.TransportOutDescription;
+import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.transport.MessageFormatter;
 import org.apache.axis2.util.MessageProcessorSelector;
+import org.apache.axis2.util.Utils;
+import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.http.HttpStatus;
 import org.apache.http.protocol.HTTP;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.URL;
+import java.text.ParseException;
+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;
 
 import javax.xml.namespace.QName;
 
 //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 {
+public abstract class HTTPSender {
 
     private static final Log log = LogFactory.getLog(HTTPSender.class);
     
+    private boolean chunked = false;
+    private String httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
+    protected TransportOutDescription proxyOutSetting = null;
+    protected OMOutputFormat format = new OMOutputFormat();
+    
+    public void setChunked(boolean chunked) {
+        this.chunked = chunked;
+    }
+
+    public void setHttpVersion(String version) throws AxisFault {
+        if (version != null) {
+            if (HTTPConstants.HEADER_PROTOCOL_11.equals(version)) {
+                this.httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
+            } else if (HTTPConstants.HEADER_PROTOCOL_10.equals(version)) {
+                this.httpVersion = HTTPConstants.HEADER_PROTOCOL_10;
+                // chunked is not possible with HTTP/1.0
+                this.chunked = false;
+            } else {
+                throw new AxisFault(
+                        "Parameter " + HTTPConstants.PROTOCOL_VERSION
+                                + " Can have values only HTTP/1.0 or 
HTTP/1.1");
+            }
+        }
+    }       
+
+    public void setFormat(OMOutputFormat format) {
+        this.format = format;
+    }
+
     /**
      * Start a new HTTP request.
      *
@@ -146,7 +187,83 @@ public abstract class HTTPSender extends
             request.enableAuthentication(authenticator);
         }
 
-        request.execute();
+        setTimeouts(msgContext, request);
+
+        try {
+            request.execute();
+            boolean cleanup = true;
+            try {
+                int statusCode = request.getStatusCode();
+                log.trace("Handling response - " + statusCode);
+                boolean processResponse;
+                boolean fault;
+                if (statusCode == HttpStatus.SC_ACCEPTED) {
+                    processResponse = false;
+                    fault = false;
+                } else if (statusCode >= 200 && statusCode < 300) {
+                    processResponse = true;
+                    fault = false;
+                } else if (statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR
+                           || statusCode == HttpStatus.SC_BAD_REQUEST) {
+                    processResponse = true;
+                    fault = true;
+                } else {
+                    throw new AxisFault(Messages.getMessage("transportError", 
String.valueOf(statusCode),
+                                                            
request.getStatusText()));
+                }
+                obtainHTTPHeaderInformation(request, msgContext);
+                if (processResponse) {
+                    OperationContext opContext = 
msgContext.getOperationContext();
+                    MessageContext inMessageContext = opContext == null ? null
+                            : 
opContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+                    if (opContext != null) {
+                        InputStream in = request.getResponseContent();
+                        if (in != null) {
+                            String contentEncoding = 
request.getResponseHeader(HTTPConstants.HEADER_CONTENT_ENCODING);
+                            if (contentEncoding != null) {
+                                if 
(contentEncoding.equalsIgnoreCase(HTTPConstants.COMPRESSION_GZIP)) {
+                                    in = new GZIPInputStream(in);
+                                    // If the content-encoding is identity we 
can basically ignore
+                                    // it.
+                                } else if 
(!"identity".equalsIgnoreCase(contentEncoding)) {
+                                    throw new AxisFault("HTTP :" + 
"unsupported content-encoding of '"
+                                                        + contentEncoding + "' 
found");
+                                }
+                            }
+                            opContext.setProperty(MessageContext.TRANSPORT_IN, 
in);
+                            // This implements the behavior of the HTTPClient 
3.x based transport in
+                            // Axis2 1.7: if AUTO_RELEASE_CONNECTION is 
enabled, we set the input stream
+                            // in the message context, but we nevertheless 
release the connection.
+                            // It is unclear in which situation this would 
actually be the right thing
+                            // to do.
+                            if 
(msgContext.isPropertyTrue(HTTPConstants.AUTO_RELEASE_CONNECTION)) {
+                                log.debug("AUTO_RELEASE_CONNECTION enabled; 
are you sure that you really want that?");
+                            } else {
+                                cleanup = false;
+                            }
+                        }
+                    }
+                    if (fault) {
+                        if (inMessageContext != null) {
+                            inMessageContext.setProcessingFault(true);
+                        }
+                        if 
(Utils.isClientThreadNonBlockingPropertySet(msgContext)) {
+                            throw new AxisFault(Messages.
+                                    getMessage("transportError",
+                                               String.valueOf(statusCode),
+                                               request.getStatusText()));
+                        }
+                    }
+                }
+            } finally {
+                if (cleanup) {
+                    request.releaseConnection();
+                }
+            }
+        } catch (IOException e) {
+            log.info("Unable to send to url[" + url + "]", e);
+            throw AxisFault.makeFault(e);
+        }
     }   
 
     private void addCustomHeaders(MessageContext msgContext, Request request) {
@@ -270,4 +387,100 @@ public abstract class HTTPSender extends
     
         return userAgentString;
     }
+
+    /**
+     * 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 request
+     *            request
+     */
+    private void setTimeouts(MessageContext msgContext, Request request) {
+        // 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
+            request.setConnectionTimeout(tempConnTimeoutProperty);
+        }
+
+        if (tempSoTimeoutProperty != null) {
+            // SO_TIMEOUT -- timeout for blocking reads
+            request.setSocketTimeout(tempSoTimeoutProperty);
+        } else {
+            // set timeout in client
+            if (timeout > 0) {
+                request.setSocketTimeout((int) timeout);
+            }
+        }
+    }
+
+    private void obtainHTTPHeaderInformation(Request request, 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.
+        msgContext.setProperty(
+                MessageContext.TRANSPORT_HEADERS,
+                new CommonsTransportHeaders(request.getResponseHeaders()));
+        msgContext.setProperty(
+                HTTPConstants.MC_HTTP_STATUS_CODE,
+                new Integer(request.getStatusCode()));
+        
+        String contentTypeString = 
request.getResponseHeader(HTTPConstants.HEADER_CONTENT_TYPE);
+        if (contentTypeString != null) {
+            ContentType contentType;
+            try {
+                contentType = new ContentType(contentTypeString);
+            } catch (ParseException ex) {
+                throw AxisFault.makeFault(ex);
+            }
+            String charSetEnc = 
contentType.getParameter(HTTPConstants.CHAR_SET_ENCODING);
+            MessageContext inMessageContext = 
msgContext.getOperationContext().getMessageContext(
+                    WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+            if (inMessageContext != null) {
+                
inMessageContext.setProperty(Constants.Configuration.CONTENT_TYPE, 
contentTypeString);
+                
inMessageContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, 
charSetEnc);
+            } else {
+                // Transport details will be stored in a HashMap so that 
anybody
+                // interested can
+                // retrieve them
+                Map<String,String> transportInfoMap = new 
HashMap<String,String>();
+                transportInfoMap.put(Constants.Configuration.CONTENT_TYPE, 
contentTypeString);
+                
transportInfoMap.put(Constants.Configuration.CHARACTER_SET_ENCODING, 
charSetEnc);
+                // the HashMap is stored in the outgoing message.
+                
msgContext.setProperty(Constants.Configuration.TRANSPORT_INFO_MAP, 
transportInfoMap);
+            }
+        }
+
+        Map<String,String> cookies = request.getCookies();
+        if (cookies != null) {
+            String customCookieId = (String) 
msgContext.getProperty(Constants.CUSTOM_COOKIE_ID);
+            String cookieString = null;
+            if (customCookieId != null) {
+                cookieString = buildCookieString(cookies, customCookieId);
+            }
+            if (cookieString == null) {
+                cookieString = buildCookieString(cookies, 
Constants.SESSION_COOKIE);
+            }
+            if (cookieString == null) {
+                cookieString = buildCookieString(cookies, 
Constants.SESSION_COOKIE_JSESSIONID);
+            }
+            if (cookieString != null) {
+                
msgContext.getServiceContext().setProperty(HTTPConstants.COOKIE_STRING, 
cookieString);
+            }
+        }
+    }
+
+    private String buildCookieString(Map<String,String> cookies, String name) {
+        String value = cookies.get(name);
+        return value == null ? null : name + "=" + value;
+    }
 }

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportUtils.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportUtils.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportUtils.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPTransportUtils.java
 Mon May  1 11:36:09 2017
@@ -54,6 +54,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.SocketException;
+import java.net.URL;
+import java.net.URLClassLoader;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.zip.GZIPInputStream;
@@ -382,4 +384,20 @@ public class HTTPTransportUtils {
         epr.append('/');
         return new EndpointReference[]{new EndpointReference(epr.toString())};
     }
+
+    static InputStream getMetaInfResourceAsStream(AxisService service, String 
name) {
+        ClassLoader classLoader = service.getClassLoader();
+        if (classLoader instanceof URLClassLoader) {
+            // Only search the service class loader and skip searching the 
ancestors to
+            // avoid local file inclusion vulnerabilities such as AXIS2-5846.
+            URL url = ((URLClassLoader)classLoader).findResource("META-INF/" + 
name);
+            try {
+                return url == null ? null : url.openStream();
+            } catch (IOException ex) {
+                return null;
+            }
+        } else {
+            return null;
+        }
+    }
 }

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPWorker.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPWorker.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPWorker.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/HTTPWorker.java
 Mon May  1 11:36:09 2017
@@ -22,7 +22,6 @@ package org.apache.axis2.transport.http;
 import org.apache.axis2.Constants;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.deployment.DeploymentConstants;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.engine.Handler.InvocationResponse;
@@ -100,8 +99,7 @@ public class HTTPWorker implements Worke
                             Iterator i = services.values().iterator();
                             while (i.hasNext()) {
                                 AxisService service = (AxisService) i.next();
-                                InputStream stream = service.getClassLoader().
-                                getResourceAsStream("META-INF/" + file);
+                                InputStream stream = 
HTTPTransportUtils.getMetaInfResourceAsStream(service, file);
                                 if (stream != null) {
                                     OutputStream out = 
response.getOutputStream();
                                     response.setContentType("text/xml");
@@ -205,8 +203,7 @@ public class HTTPWorker implements Worke
                         schema.write(response.getOutputStream());
                         return;
                     } else {
-                        InputStream instream = service.getClassLoader()
-                            .getResourceAsStream(DeploymentConstants.META_INF 
+ "/" + schemaName);
+                        InputStream instream = 
HTTPTransportUtils.getMetaInfResourceAsStream(service, schemaName);
                         
                         if (instream != null) {
                             response.setStatus(HttpStatus.SC_OK);

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/ListingAgent.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/ListingAgent.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/ListingAgent.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/ListingAgent.java
 Mon May  1 11:36:09 2017
@@ -125,7 +125,7 @@ public class ListingAgent extends Abstra
             Iterator<AxisService> i = services.values().iterator();
             while (i.hasNext()) {
                 AxisService service = (AxisService) i.next();
-                InputStream stream = 
service.getClassLoader().getResourceAsStream("META-INF/" + schema);
+                InputStream stream = 
HTTPTransportUtils.getMetaInfResourceAsStream(service, schema);
                 if (stream != null) {
                     OutputStream out = res.getOutputStream();
                     res.setContentType("text/xml");

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/Request.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/Request.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/Request.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/Request.java
 Mon May  1 11:36:09 2017
@@ -18,8 +18,11 @@
  */
 package org.apache.axis2.transport.http;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
 import org.apache.axiom.mime.Header;
-import org.apache.axis2.AxisFault;
 
 /**
  * Interface to prepare and execute an HTTP request.
@@ -30,8 +33,14 @@ public interface Request {
     void addHeader(String name, String value);
     Header[] getRequestHeaders();
     void enableAuthentication(HTTPAuthenticator authenticator);
-    void execute() throws AxisFault;
+    void setConnectionTimeout(int timeout);
+    void setSocketTimeout(int timeout);
+    void execute() throws IOException;
     int getStatusCode();
     String getStatusText();
+    String getResponseHeader(String name);
     Header[] getResponseHeaders();
+    Map<String,String> getCookies();
+    InputStream getResponseContent() throws IOException;
+    void releaseConnection();
 }

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPClient4TransportSender.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPClient4TransportSender.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPClient4TransportSender.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPClient4TransportSender.java
 Mon May  1 11:36:09 2017
@@ -26,9 +26,9 @@ import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.transport.http.AbstractHTTPSender;
 import org.apache.axis2.transport.http.AbstractHTTPTransportSender;
 import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.axis2.transport.http.HTTPSender;
 import org.apache.axis2.transport.http.HTTPTransportConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -68,7 +68,7 @@ public class HTTPClient4TransportSender
 
 
     @Override
-    protected AbstractHTTPSender createHTTPSender() {
+    protected HTTPSender createHTTPSender() {
         return new HTTPSenderImpl();
     }
 

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java
 Mon May  1 11:36:09 2017
@@ -33,9 +33,12 @@ import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.Credentials;
 import org.apache.http.auth.NTCredentials;
 import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.params.ClientPNames;
-import org.apache.http.conn.params.ConnRoutePNames;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.protocol.HttpClientContext;
 import org.apache.http.impl.client.AbstractHttpClient;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.CloseableHttpClient;
 
 import javax.xml.namespace.QName;
 import java.net.URL;
@@ -58,12 +61,14 @@ public class HTTPProxyConfigurator {
      *
      * @param messageContext
      *            in message context for
-     * @param httpClient
-     *            instance
+     * @param requestConfig
+     *            the request configuration to fill in
+     * @param clientContext
+     *            the HTTP client context
      * @throws org.apache.axis2.AxisFault
      *             if Proxy settings are invalid
      */
-    public static void configure(MessageContext messageContext, 
AbstractHttpClient httpClient)
+    public static void configure(MessageContext messageContext, 
RequestConfig.Builder requestConfig, HttpClientContext clientContext)
             throws AxisFault {
 
         Credentials proxyCredentials = null;
@@ -136,17 +141,21 @@ public class HTTPProxyConfigurator {
         }
 
         String port = 
System.getProperty(HTTPTransportConstants.HTTP_PROXY_PORT);
-        if (port != null) {
+        if (port != null && !port.isEmpty()) {
             proxyPort = Integer.parseInt(port);
         }
 
         if (proxyCredentials != null) {
             // TODO : Set preemptive authentication, but its not recommended 
in HC 4
-            
httpClient.getParams().setParameter(ClientPNames.HANDLE_AUTHENTICATION, true);
-
-            httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY, 
proxyCredentials);
+            requestConfig.setAuthenticationEnabled(true);
+            CredentialsProvider credsProvider = 
clientContext.getCredentialsProvider();
+            if (credsProvider == null) {
+                credsProvider = new BasicCredentialsProvider();
+                clientContext.setCredentialsProvider(credsProvider);
+            }
+            credsProvider.setCredentials(AuthScope.ANY, proxyCredentials);
             HttpHost proxy = new HttpHost(proxyHost, proxyPort);
-            httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, 
proxy);
+            requestConfig.setProxy(proxy);
 
         }
     }

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java
 Mon May  1 11:36:09 2017
@@ -20,252 +20,47 @@
 package org.apache.axis2.transport.http.impl.httpclient4;
 
 import org.apache.axis2.AxisFault;
-import org.apache.axis2.Constants;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.transport.http.AxisRequestEntity;
-import org.apache.axis2.transport.http.CommonsTransportHeaders;
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.transport.http.HTTPSender;
 import org.apache.axis2.transport.http.Request;
-import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.http.Header;
-import org.apache.http.HeaderElement;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.NameValuePair;
-import org.apache.http.client.methods.HttpRequestBase;
-import org.apache.http.client.params.AuthPolicy;
-import org.apache.http.client.params.ClientPNames;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.scheme.PlainSocketFactory;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.impl.client.AbstractHttpClient;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.conn.PoolingClientConnectionManager;
-import org.apache.http.message.BasicHeader;
-import org.apache.http.params.BasicHttpParams;
-import org.apache.http.params.CoreConnectionPNames;
-import org.apache.http.params.CoreProtocolPNames;
-import org.apache.http.params.HttpParams;
+import org.apache.http.client.HttpClient;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.HttpClientConnectionManager;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.ssl.SSLContexts;
 
-import java.io.IOException;
-import java.io.InputStream;
 import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.zip.GZIPInputStream;
+
+import javax.net.ssl.SSLContext;
 
 public class HTTPSenderImpl extends HTTPSender {
 
     private static final Log log = LogFactory.getLog(HTTPSenderImpl.class);
 
-    boolean isChunked() {
-        return chunked;
-    }
-
-    String getHttpVersion() {
-        return httpVersion;
-    }
-
     @Override
     protected Request createRequest(MessageContext msgContext, String 
methodName, URL url,
             AxisRequestEntity requestEntity) throws AxisFault {
-        return new RequestImpl(this, msgContext, methodName, url, 
requestEntity);
+        return new RequestImpl(getHttpClient(msgContext), msgContext, 
methodName, url, requestEntity);
     }
 
-    /**
-     * Collect the HTTP header information and set them in the message context
-     *
-     * @param httpResponse which holds the header information
-     * @param msgContext the MessageContext in which to place the 
information... OR
-     *                   NOT!
-     * @throws AxisFault if problems occur
-     */
-    protected void obtainHTTPHeaderInformation(Request request, HttpResponse 
response, 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(request.getResponseHeaders());
-        msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, 
transportHeaders);
-        msgContext.setProperty(HTTPConstants.MC_HTTP_STATUS_CODE,
-                               new Integer(request.getStatusCode()));
-        Header header = 
response.getFirstHeader(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 = 
response.getHeaders(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 = response.getHeaders(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;
-    }
-
-    /**
-     * 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, 
AbstractHttpClient 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.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,
-                                                connectionTimeout);
-        } else {
-            // set timeout in client
-            if (timeout > 0) {
-                
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,
-                                                    (int) timeout);
-            }
-        }
-
-        if (tempSoTimeoutProperty != null) {
-            int soTimeout = tempSoTimeoutProperty.intValue();
-            // SO_TIMEOUT -- timeout for blocking reads
-            
httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, soTimeout);
-        } else {
-            // set timeout in client
-            if (timeout > 0) {
-                
httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, (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, HttpRequestBase 
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(CoreConnectionPNames.CONNECTION_TIMEOUT,
-                                                tempConnTimeoutProperty);
-        }
-
-        if (tempSoTimeoutProperty != null) {
-            // SO_TIMEOUT -- timeout for blocking reads
-            
httpMethod.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,
-                                                tempSoTimeoutProperty);
-        } else {
-            // set timeout in client
-            if (timeout > 0) {
-                
httpMethod.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, (int) 
timeout);
-            }
-        }
-    }
-
-    protected AbstractHttpClient getHttpClient(MessageContext msgContext) {
+    private HttpClient getHttpClient(MessageContext msgContext) {
         ConfigurationContext configContext = 
msgContext.getConfigurationContext();
 
-        AbstractHttpClient httpClient = (AbstractHttpClient) msgContext
+        HttpClient httpClient = (HttpClient) msgContext
                 .getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
 
         if (httpClient == null) {
-            httpClient = (AbstractHttpClient) configContext.
+            httpClient = (HttpClient) configContext.
                     getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
         }
 
@@ -274,11 +69,11 @@ public class HTTPSenderImpl extends HTTP
         }
 
         synchronized (this) {
-            httpClient = (AbstractHttpClient) msgContext.
+            httpClient = (HttpClient) msgContext.
                     getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
 
             if (httpClient == null) {
-                httpClient = (AbstractHttpClient) configContext
+                httpClient = (HttpClient) configContext
                         .getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
             }
 
@@ -286,28 +81,31 @@ public class HTTPSenderImpl extends HTTP
                 return httpClient;
             }
 
-            ClientConnectionManager connManager = (ClientConnectionManager) 
msgContext
+            HttpClientConnectionManager connManager = 
(HttpClientConnectionManager) msgContext
                     
.getProperty(HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
             if (connManager == null) {
-                connManager = (ClientConnectionManager) msgContext
+                connManager = (HttpClientConnectionManager) msgContext
                         
.getProperty(HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
             }
             if (connManager == null) {
                 // reuse HttpConnectionManager
                 synchronized (configContext) {
-                    connManager = (ClientConnectionManager) configContext
+                    connManager = (HttpClientConnectionManager) configContext
                             
.getProperty(HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
                     if (connManager == null) {
                         log.trace("Making new ConnectionManager");
-                        SchemeRegistry schemeRegistry = new SchemeRegistry();
-                        schemeRegistry.register(
-                                new Scheme("http", 80, 
PlainSocketFactory.getSocketFactory()));
-                        schemeRegistry.register(
-                                new Scheme("https", 443, 
SSLSocketFactory.getSocketFactory()));
-
-                        connManager = new 
PoolingClientConnectionManager(schemeRegistry);
-                        
((PoolingClientConnectionManager)connManager).setMaxTotal(200);
-                        
((PoolingClientConnectionManager)connManager).setDefaultMaxPerRoute(200);
+                        SSLContext sslContext = 
(SSLContext)configContext.getProperty(SSLContext.class.getName());
+                        if (sslContext == null) {
+                            sslContext = SSLContexts.createDefault();
+                        }
+                        Registry<ConnectionSocketFactory> 
socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+                                .register("http", 
PlainConnectionSocketFactory.getSocketFactory())
+                                .register("https", new 
SSLConnectionSocketFactory(sslContext))
+                                .build();
+
+                        connManager = new 
PoolingHttpClientConnectionManager(socketFactoryRegistry);
+                        
((PoolingHttpClientConnectionManager)connManager).setMaxTotal(200);
+                        
((PoolingHttpClientConnectionManager)connManager).setDefaultMaxPerRoute(200);
                         configContext.setProperty(
                                 
HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER, connManager);
                     }
@@ -317,17 +115,10 @@ public class HTTPSenderImpl extends HTTP
              * Create a new instance of HttpClient since the way it is used 
here
              * it's not fully thread-safe.
              */
-            HttpParams clientParams = new BasicHttpParams();
-            clientParams.setParameter(CoreProtocolPNames.HTTP_ELEMENT_CHARSET, 
"UTF-8");
-            httpClient = new DefaultHttpClient(connManager, clientParams);
-
-            //We don't need to set timeout for connection manager, since we 
are doing it below
-            // and its enough
-
-            // Get the timeout values set in the runtime
-            initializeTimeouts(msgContext, httpClient);
-
-            return httpClient;
+            return HttpClientBuilder.create()
+                    .setConnectionManager(connManager)
+                    .setConnectionManagerShared(true)
+                    .build();
         }
     }
 

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java
 Mon May  1 11:36:09 2017
@@ -23,62 +23,58 @@ import java.io.InputStream;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
-import java.util.zip.GZIPInputStream;
+import java.util.Map;
 
 import org.apache.axiom.mime.Header;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.transport.http.AxisRequestEntity;
 import org.apache.axis2.transport.http.HTTPAuthenticator;
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.transport.http.HTTPTransportConstants;
 import org.apache.axis2.transport.http.Request;
-import org.apache.axis2.util.Utils;
-import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.http.HeaderElement;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
 import org.apache.http.HttpVersion;
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.Credentials;
 import org.apache.http.auth.NTCredentials;
 import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.auth.params.AuthPNames;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
 import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.client.params.AuthPolicy;
-import org.apache.http.client.params.ClientPNames;
-import org.apache.http.impl.auth.NTLMSchemeFactory;
-import org.apache.http.impl.client.AbstractHttpClient;
-import org.apache.http.params.CoreProtocolPNames;
-import org.apache.http.params.HttpParams;
-import org.apache.http.protocol.BasicHttpContext;
-import org.apache.http.protocol.HttpContext;
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.util.EntityUtils;
 
 final class RequestImpl implements Request {
+    private static final String[] COOKIE_HEADER_NAMES = { 
HTTPConstants.HEADER_SET_COOKIE, HTTPConstants.HEADER_SET_COOKIE2 };
+    
     private static final Log log = LogFactory.getLog(RequestImpl.class);
     
-    protected final HTTPSenderImpl sender;
-    protected final MessageContext msgContext;
-    protected final URL url;
-    protected final HttpRequestBase method;
-    protected final AbstractHttpClient httpClient;
+    private final HttpClient httpClient;
+    private final MessageContext msgContext;
+    private final URL url;
+    private final HttpRequestBase method;
     private final HttpHost httpHost;
+    private final RequestConfig.Builder requestConfig = RequestConfig.custom();
+    private final HttpClientContext clientContext = HttpClientContext.create();
     private HttpResponse response;
 
-    RequestImpl(HTTPSenderImpl sender, MessageContext msgContext, final String 
methodName, URL url,
+    RequestImpl(HttpClient httpClient, MessageContext msgContext, final String 
methodName, URL url,
             AxisRequestEntity requestEntity) throws AxisFault {
-        this.sender = sender;
+        this.httpClient = httpClient;
         this.msgContext = msgContext;
         this.url = url;
-        httpClient = sender.getHttpClient(msgContext);
         if (requestEntity == null) {
             method = new HttpRequestBase() {
                 @Override
@@ -115,8 +111,7 @@ final class RequestImpl implements Reque
 
     @Override
     public void enableHTTP10() {
-        
httpClient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION,
-                HttpVersion.HTTP_1_0);
+        method.setProtocolVersion(HttpVersion.HTTP_1_0);
     }
 
     @Override
@@ -143,6 +138,16 @@ final class RequestImpl implements Reque
     }
 
     @Override
+    public void setConnectionTimeout(int timeout) {
+        requestConfig.setConnectTimeout(timeout);
+    }
+
+    @Override
+    public void setSocketTimeout(int timeout) {
+        requestConfig.setSocketTimeout(timeout);
+    }
+
+    @Override
     public int getStatusCode() {
         return response.getStatusLine().getStatusCode();
     }
@@ -153,22 +158,40 @@ final class RequestImpl implements Reque
     }
 
     @Override
+    public String getResponseHeader(String name) {
+        org.apache.http.Header header = response.getFirstHeader(name);
+        return header == null ? null : header.getValue();
+    }
+
+    @Override
     public Header[] getResponseHeaders() {
         return convertHeaders(response.getAllHeaders());
     }
 
     @Override
-    public void execute() throws AxisFault {
-        try {
-            executeMethod();
-            handleResponse();
-        } catch (IOException e) {
-            log.info("Unable to send to url[" + url + "]", e);
-            throw AxisFault.makeFault(e);
+    public Map<String,String> getCookies() {
+        Map<String,String> cookies = null;
+        for (String name : COOKIE_HEADER_NAMES) {
+            for (org.apache.http.Header header : response.getHeaders(name)) {
+                for (HeaderElement element : header.getElements()) {
+                    if (cookies == null) {
+                        cookies = new HashMap<String,String>();
+                    }
+                    cookies.put(element.getName(), element.getValue());
+                }
+            }
         }
+        return cookies;
+    }
+
+    @Override
+    public InputStream getResponseContent() throws IOException {
+        HttpEntity entity = response.getEntity();
+        return entity == null ? null : entity.getContent();
     }
 
-    private void executeMethod() throws IOException {
+    @Override
+    public void execute() throws IOException {
         populateHostConfiguration();
 
         // add compression headers if needed
@@ -177,89 +200,18 @@ final class RequestImpl implements Reque
                              HTTPConstants.COMPRESSION_GZIP);
         }
 
-        if (msgContext.getProperty(HTTPConstants.HTTP_METHOD_PARAMS) != null) {
-            HttpParams params = (HttpParams) msgContext
-                    .getProperty(HTTPConstants.HTTP_METHOD_PARAMS);
-            method.setParams(params);
-        }
-
         String cookiePolicy = (String) 
msgContext.getProperty(HTTPConstants.COOKIE_POLICY);
         if (cookiePolicy != null) {
-            method.getParams().setParameter(ClientPNames.COOKIE_POLICY, 
cookiePolicy);
+            requestConfig.setCookieSpec(cookiePolicy);
         }
 
-        sender.setTimeouts(msgContext, method);
-        HttpContext localContext = new BasicHttpContext();
-        // Why do we have add context here
-        response = httpClient.execute(httpHost, method, localContext);
-    }
-
-    private void handleResponse() throws IOException {
-        boolean cleanup = true;
-        try {
-            int statusCode = getStatusCode();
-            log.trace("Handling response - " + statusCode);
-            boolean processResponse;
-            boolean fault;
-            if (statusCode == HttpStatus.SC_ACCEPTED) {
-                processResponse = false;
-                fault = false;
-            } else if (statusCode >= 200 && statusCode < 300) {
-                processResponse = true;
-                fault = false;
-            } else if (statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR
-                       || statusCode == HttpStatus.SC_BAD_REQUEST) {
-                processResponse = true;
-                fault = true;
-            } else {
-                throw new AxisFault(Messages.getMessage("transportError", 
String.valueOf(statusCode),
-                                                        getStatusText()));
-            }
-            sender.obtainHTTPHeaderInformation(this, response, msgContext);
-            if (processResponse) {
-                OperationContext opContext = msgContext.getOperationContext();
-                MessageContext inMessageContext = opContext == null ? null
-                        : 
opContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-                if (opContext != null) {
-                    HttpEntity httpEntity = response.getEntity();
-                    if (httpEntity != null) {
-                        InputStream in = httpEntity.getContent();
-                        org.apache.http.Header contentEncoding = 
httpEntity.getContentEncoding();
-                        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");
-                            }
-                        }
-                        opContext.setProperty(MessageContext.TRANSPORT_IN, in);
-                        cleanup = false;
-                    }
-                }
-                if (fault) {
-                    if (inMessageContext != null) {
-                        inMessageContext.setProcessingFault(true);
-                    }
-                    if 
(Utils.isClientThreadNonBlockingPropertySet(msgContext)) {
-                        throw new AxisFault(Messages.
-                                getMessage("transportError",
-                                           String.valueOf(statusCode),
-                                           getStatusText()));
-                    }
-                }
-            }
-        } finally {
-            if (cleanup) {
-                cleanup(response);
-            }
-        }
+        method.setConfig(requestConfig.build());
 
+        response = httpClient.execute(httpHost, method, clientContext);
     }
 
-    private void cleanup(HttpResponse response) {
+    @Override
+    public void releaseConnection() {
         log.trace("Cleaning response : " + response);
         HttpEntity entity = response.getEntity();
         if (entity != null) {
@@ -285,7 +237,7 @@ final class RequestImpl implements Reque
             if (log.isDebugEnabled()) {
                 log.debug("Configuring HTTP proxy.");
             }
-            HTTPProxyConfigurator.configure(msgContext, httpClient);
+            HTTPProxyConfigurator.configure(msgContext, requestConfig, 
clientContext);
         }
     }
 
@@ -296,7 +248,7 @@ final class RequestImpl implements Reque
      */
     @Override
     public void enableAuthentication(HTTPAuthenticator authenticator) {
-        
method.getParams().setBooleanParameter(ClientPNames.HANDLE_AUTHENTICATION, 
true);
+        requestConfig.setAuthenticationEnabled(true);
 
         String username = authenticator.getUsername();
         String password = authenticator.getPassword();
@@ -310,35 +262,35 @@ final class RequestImpl implements Reque
 
         // TODO : Set preemptive authentication, but its not recommended in HC 
4
 
+        CredentialsProvider credsProvider = 
clientContext.getCredentialsProvider();
+        if (credsProvider == null) {
+            credsProvider = new BasicCredentialsProvider();
+            clientContext.setCredentialsProvider(credsProvider);
+        }
         if (host != null) {
             if (domain != null) {
                 /* Credentials for NTLM Authentication */
-                httpClient.getAuthSchemes().register("ntlm",new 
NTLMSchemeFactory());
                 creds = new NTCredentials(username, password, host, domain);
             } else {
                 /* Credentials for Digest and Basic Authentication */
                 creds = new UsernamePasswordCredentials(username, password);
             }
-            httpClient.getCredentialsProvider().
-                    setCredentials(new AuthScope(host, port, realm), creds);
+            credsProvider.setCredentials(new AuthScope(host, port, realm), 
creds);
         } else {
             if (domain != null) {
                 /*
                  * Credentials for NTLM Authentication when host is
                  * ANY_HOST
                  */
-                httpClient.getAuthSchemes().register("ntlm",new 
NTLMSchemeFactory());
                 creds = new NTCredentials(username, password, 
AuthScope.ANY_HOST, domain);
-                httpClient.getCredentialsProvider().
-                        setCredentials(new AuthScope(AuthScope.ANY_HOST, port, 
realm),
-                                       creds);
+                credsProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, 
port, realm), creds);
             } else {
                 /* Credentials only for Digest and Basic Authentication */
                 creds = new UsernamePasswordCredentials(username, password);
-                httpClient.getCredentialsProvider().
-                        setCredentials(new AuthScope(AuthScope.ANY), creds);
+                credsProvider.setCredentials(new AuthScope(AuthScope.ANY), 
creds);
             }
         }
+        
         /* Customizing the priority Order */
         List schemes = authenticator.getAuthSchemes();
         if (schemes != null && schemes.size() > 0) {
@@ -352,7 +304,7 @@ final class RequestImpl implements Reque
                 authPrefs.add(authenticator.getAuthPolicyPref(scheme));
 
             }
-            httpClient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF, 
authPrefs);
+            requestConfig.setTargetPreferredAuthSchemes(authPrefs);
         }
     }
 }

Modified: 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/package.html
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/branches/hermetic-tests/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/package.html?rev=1793311&r1=1793310&r2=1793311&view=diff
==============================================================================
--- 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/package.html
 (original)
+++ 
axis/axis2/java/core/branches/hermetic-tests/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/package.html
 Mon May  1 11:36:09 2017
@@ -2,6 +2,8 @@
 <title>JMS Transport Configuration</title>
 <body>
 
+Transport implementation for JMS.
+
 <h2>JMS Listener Configuration (axis2.xml)</h2>
 
 e.g:


Reply via email to