Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java Sun Dec 17 22:34:08 2017 @@ -19,786 +19,48 @@ package org.apache.axis2.transport.http.impl.httpclient4; - -import org.apache.axiom.om.OMAttribute; -import org.apache.axiom.om.OMElement; 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.NamedValue; -import org.apache.axis2.context.OperationContext; -import org.apache.axis2.i18n.Messages; -import org.apache.axis2.transport.MessageFormatter; -import org.apache.axis2.transport.http.HTTPAuthenticator; +import org.apache.axis2.transport.http.AxisRequestEntity; import org.apache.axis2.transport.http.HTTPConstants; import org.apache.axis2.transport.http.HTTPSender; -import org.apache.axis2.transport.http.HTTPTransportConstants; -import org.apache.axis2.util.MessageProcessorSelector; -import org.apache.axis2.wsdl.WSDLConstants; +import org.apache.axis2.transport.http.Request; 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.HttpHost; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.HttpVersion; -import org.apache.http.NameValuePair; -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.methods.HttpDelete; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; -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.auth.NTLMSchemeFactory; -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.protocol.BasicHttpContext; -import org.apache.http.protocol.HTTP; -import org.apache.http.protocol.HttpContext; -import org.apache.http.util.EntityUtils; - -import javax.xml.namespace.QName; -import java.io.IOException; -import java.io.InputStream; -import java.net.URISyntaxException; +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.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; +import javax.net.ssl.SSLContext; public class HTTPSenderImpl extends HTTPSender { private static final Log log = LogFactory.getLog(HTTPSenderImpl.class); - /** - * Used to send a request via HTTP Get method - * - * @param msgContext - The MessageContext of the message - * @param url - The target URL - * @param soapActionString - The soapAction string of the request - * @throws org.apache.axis2.AxisFault - Thrown in case an exception occurs - */ - protected void sendViaGet(MessageContext msgContext, URL url, String soapActionString) - throws AxisFault { - HttpGet httpGet = new HttpGet(); - AbstractHttpClient httpClient = getHttpClient(msgContext); - MessageFormatter messageFormatter = populateCommonProperties(msgContext, url, httpGet, - httpClient, soapActionString); - - // Need to have this here because we can have soap action when using the - // soap response MEP - String soapAction = messageFormatter - .formatSOAPAction(msgContext, format, soapActionString); - - if (soapAction != null && !msgContext.isDoingREST()) { - httpGet.setHeader(HTTPConstants.HEADER_SOAP_ACTION, soapAction); - } - - /* - * main execution takes place.. - */ - HttpResponse response = null; - try { - response = executeMethod(httpClient, msgContext, url, httpGet); - handleResponse(msgContext, response); - } catch (IOException e) { - log.info("Unable to sendViaGet to url[" + url + "]", e); - throw AxisFault.makeFault(e); - } finally { - cleanup(msgContext, response); - } - } - @Override - protected void cleanup(MessageContext msgContext, Object httpResponse) { - HttpResponse response; - if (httpResponse instanceof HttpResponse) { - response = (HttpResponse) httpResponse; - } else { - log.trace("HttpResponse expected, but found - " + httpResponse); - return; - } - if (msgContext.isPropertyTrue(HTTPConstants.CLEANUP_RESPONSE)) { - log.trace("Cleaning response : " + response); - HttpEntity entity = response.getEntity(); - if (entity != null) { - try { - EntityUtils.consume(entity); - } catch (IOException e) { - log.error("Error while cleaning response : " + response, e); - } - } - } - } - - /** - * Used to send a request via HTTP Delete Method - * - * @param msgContext - The MessageContext of the message - * @param url - The target URL - * @param soapActionString - The soapAction string of the request - * @throws org.apache.axis2.AxisFault - Thrown in case an exception occurs - */ - protected void sendViaDelete(MessageContext msgContext, URL url, String soapActionString) - throws AxisFault { - - HttpDelete deleteMethod = new HttpDelete(); - AbstractHttpClient httpClient = getHttpClient(msgContext); - populateCommonProperties(msgContext, url, deleteMethod, httpClient, soapActionString); - - /* - * main execution takes place.. - */ - HttpResponse response = null; - try { - response = executeMethod(httpClient, msgContext, url, deleteMethod); - handleResponse(msgContext, response); - } catch (IOException e) { - log.info("Unable to sendViaDelete to url[" + url + "]", e); - throw AxisFault.makeFault(e); - } finally { - cleanup(msgContext, response); - } - } - - /** - * Used to send a request via HTTP Post Method - * - * @param msgContext - The MessageContext of the message - * @param url - The target URL - * @param soapActionString - The soapAction string of the request - * @throws org.apache.axis2.AxisFault - Thrown in case an exception occurs - */ - protected void sendViaPost(MessageContext msgContext, URL url, String soapActionString) - throws AxisFault { - - AbstractHttpClient 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; } - */ - - HttpPost postMethod = new HttpPost(); - if (log.isTraceEnabled()) { - log.trace(Thread.currentThread() + " PostMethod " + postMethod + " / " + httpClient); - } - MessageFormatter messageFormatter = populateCommonProperties(msgContext, url, postMethod, - httpClient, soapActionString); - AxisRequestEntityImpl requestEntity = - new AxisRequestEntityImpl(messageFormatter, msgContext, format, - soapActionString, chunked, isAllowedRetry); - postMethod.setEntity(requestEntity); - - if (!httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10) && chunked) { - requestEntity.setChunked(chunked); - } - - String soapAction = messageFormatter.formatSOAPAction(msgContext, format, soapActionString); - - if (soapAction != null && !msgContext.isDoingREST()) { - postMethod.setHeader(HTTPConstants.HEADER_SOAP_ACTION, soapAction); - } - - /* - * main execution takes place.. - */ - HttpResponse response = null; - try { - response = executeMethod(httpClient, msgContext, url, postMethod); - handleResponse(msgContext, response); - } catch (IOException e) { - log.info("Unable to sendViaPost to url[" + url + "]", e); - throw AxisFault.makeFault(e); - } finally { - cleanup(msgContext, response); - } - } - - /** - * Used to send a request via HTTP Put Method - * - * @param msgContext - The MessageContext of the message - * @param url - The target URL - * @param soapActionString - The soapAction string of the request - * @throws org.apache.axis2.AxisFault - Thrown in case an exception occurs - */ - protected void sendViaPut(MessageContext msgContext, URL url, String soapActionString) - throws AxisFault { - - AbstractHttpClient 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; } - */ - - HttpPut putMethod = new HttpPut(); - MessageFormatter messageFormatter = populateCommonProperties(msgContext, url, putMethod, - httpClient, soapActionString); - AxisRequestEntityImpl requestEntity = - new AxisRequestEntityImpl(messageFormatter, msgContext, format, - soapActionString, chunked, isAllowedRetry); - putMethod.setEntity(requestEntity); - - if (!httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10) && chunked) { - requestEntity.setChunked(chunked); - } - - String soapAction = messageFormatter.formatSOAPAction(msgContext, format, soapActionString); - if (soapAction != null && !msgContext.isDoingREST()) { - putMethod.setHeader(HTTPConstants.HEADER_SOAP_ACTION, soapAction); - } - - /* - * main execution takes place.. - */ - HttpResponse response = null; - try { - response = executeMethod(httpClient, msgContext, url, putMethod); - handleResponse(msgContext, response); - } catch (IOException e) { - log.info("Unable to sendViaPut to url[" + url + "]", e); - throw AxisFault.makeFault(e); - } finally { - cleanup(msgContext, response); - } - } - - /** - * Used to handle the HTTP Response - * - * @param msgContext - The MessageContext of the message - * @param - The HTTP method used - * @throws java.io.IOException - Thrown in case an exception occurs - */ - protected void handleResponse(MessageContext msgContext, Object httpResponse) - throws IOException { - HttpResponse response; - if (httpResponse instanceof HttpResponse) { - response = (HttpResponse) httpResponse; - } else { - log.trace("HttpResponse expected, but found - " + httpResponse); - return; - } - int statusCode = response.getStatusLine().getStatusCode(); - HTTPStatusCodeFamily family = getHTTPStatusCodeFamily(statusCode); - log.trace("Handling response - " + statusCode); - if (statusCode == HttpStatus.SC_ACCEPTED) { - msgContext.setProperty(HTTPConstants.CLEANUP_RESPONSE, Boolean.TRUE); - /* - * 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(response, msgContext); - - } else if (HTTPStatusCodeFamily.SUCCESSFUL.equals(family)) { - // We don't clean the response here because the response will be used afterwards - msgContext.setProperty(HTTPConstants.CLEANUP_RESPONSE, Boolean.FALSE); - processResponse(response, msgContext); - - } else if (statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR - || statusCode == HttpStatus.SC_BAD_REQUEST) { - msgContext.setProperty(HTTPConstants.CLEANUP_RESPONSE, Boolean.TRUE); - Header contentTypeHeader = response.getFirstHeader(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) { - msgContext.setProperty(HTTPConstants.CLEANUP_RESPONSE, Boolean.FALSE); - processResponse(response, msgContext); - } - - if (org.apache.axis2.util.Utils.isClientThreadNonBlockingPropertySet(msgContext)) { - throw new AxisFault(Messages. - getMessage("transportError", - String.valueOf(statusCode), - response.getStatusLine().toString())); - } - } else { - msgContext.setProperty(HTTPConstants.CLEANUP_RESPONSE, Boolean.TRUE); - throw new AxisFault(Messages.getMessage("transportError", String.valueOf(statusCode), - response.getStatusLine().toString())); - } - } - - /** - * 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(Object httpResponse, MessageContext msgContext) - throws AxisFault { - HttpResponse response; - if (httpResponse instanceof HttpResponse) { - response = (HttpResponse) httpResponse; - } else { - return; - } - // 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 HTTPTransportHeaders(response.getAllHeaders()); - msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, transportHeaders); - msgContext.setProperty(HTTPConstants.MC_HTTP_STATUS_CODE, - new Integer(response.getStatusLine().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); - - // The following only check for JSESSIONID / axis_session / custom-cookie-id from the Set-Cookie header. - // But it will ignore if there are other Set-Cookie values, which may cause issues at client level, - // when invoking via a load-balancer, which expect some specific Cookie value. - // So the correct fix is to add whatever the value(s) in the Set-Cookie header as session cookie. - -// 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); -// } -// } -// } - - sessionCookie = processSetCookieHeaders(cookieHeaders); - - // 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 && !sessionCookie.equals("")) { - 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; - } - - private String processSetCookieHeaders(Header[] headers) { - String cookie = ""; - for (Header header : headers) { - if (!cookie.equals("")) { - cookie = cookie + ";"; - } - HeaderElement[] elements = header.getElements(); - for (HeaderElement element : elements) { - cookie = cookie + element.getName() + "=" + element.getValue(); - NameValuePair[] parameters = element.getParameters(); - for (NameValuePair parameter : parameters) { - cookie = cookie + "; " + parameter.getName() + "=" + parameter.getValue(); - } - } - } - return cookie; - } - - protected void processResponse(HttpResponse response, MessageContext msgContext) - throws IOException { - obtainHTTPHeaderInformation(response, msgContext); - - HttpEntity httpEntity = response.getEntity(); - InputStream in = httpEntity.getContent(); - if (in == null) { - throw new AxisFault(Messages.getMessage("canNotBeNull", "InputStream")); - } - 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"); - } - } - - OperationContext opContext = msgContext.getOperationContext(); - if (opContext != null) { - opContext.setProperty(MessageContext.TRANSPORT_IN, in); - } - } - - /** - * 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 org.apache.axis2.AxisFault if problems occur - */ - protected HttpHost getHostConfiguration(AbstractHttpClient client, MessageContext msgCtx, - URL targetURL) throws AxisFault { - - boolean isAuthenticationEnabled = isAuthenticationEnabled(msgCtx); - int port = targetURL.getPort(); - - String protocol = targetURL.getProtocol(); - if (port == -1) { - if (HTTPTransportConstants.PROTOCOL_HTTP.equals(protocol)) { - port = 80; - } else if (HTTPTransportConstants.PROTOCOL_HTTPS.equals(protocol)) { - port = 443; - } - } - // to see the host is a proxy and in the proxy list - available in - // axis2.xml - HttpHost hostConfig = new HttpHost(targetURL.getHost(), port, targetURL.getProtocol()); - - // TODO : one might need to set his own socket factory. We have to allow that case as well. - - if (isAuthenticationEnabled) { - // Basic, Digest, NTLM and custom authentications. - this.setAuthenticationInfo(client, msgCtx); - } - // proxy configuration - - if (HTTPProxyConfigurator.isProxyEnabled(msgCtx, targetURL)) { - if (log.isDebugEnabled()) { - log.debug("Configuring HTTP proxy."); - } - HTTPProxyConfigurator.configure(msgCtx, client); - } - - return hostConfig; - } - - 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(AbstractHttpClient agent, MessageContext msgCtx) - throws AxisFault { - HTTPAuthenticator authenticator; - Object obj = msgCtx.getProperty(HTTPConstants.AUTHENTICATE); - if (obj != null) { - if (obj instanceof HTTPAuthenticator) { - authenticator = (HTTPAuthenticator) 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; - - // TODO : Set preemptive authentication, but its not recommended in HC 4 - - if (host != null) { - if (domain != null) { - /* Credentials for NTLM Authentication */ - agent.getAuthSchemes().register("ntlm",new NTLMSchemeFactory()); - creds = new NTCredentials(username, password, host, domain); - } else { - /* Credentials for Digest and Basic Authentication */ - creds = new UsernamePasswordCredentials(username, password); - } - agent.getCredentialsProvider(). - setCredentials(new AuthScope(host, port, realm), creds); - } else { - if (domain != null) { - /* - * Credentials for NTLM Authentication when host is - * ANY_HOST - */ - agent.getAuthSchemes().register("ntlm",new NTLMSchemeFactory()); - creds = new NTCredentials(username, password, AuthScope.ANY_HOST, domain); - agent.getCredentialsProvider(). - setCredentials(new AuthScope(AuthScope.ANY_HOST, port, realm), - creds); - } else { - /* Credentials only for Digest and Basic Authentication */ - creds = new UsernamePasswordCredentials(username, password); - agent.getCredentialsProvider(). - 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); - authPrefs.add(authenticator.getAuthPolicyPref(scheme)); - - } - agent.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF, authPrefs); - } - - } else { - throw new AxisFault("HttpTransportProperties.Authenticator class cast exception"); - } - } - + protected Request createRequest(MessageContext msgContext, String methodName, URL url, + AxisRequestEntity requestEntity) throws AxisFault { + return new RequestImpl(getHttpClient(msgContext), msgContext, methodName, url, requestEntity); } - /** - * 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 org.apache.axis2.AxisFault - Thrown in case an exception occurs - */ - protected MessageFormatter populateCommonProperties(MessageContext msgContext, URL url, - HttpRequestBase httpMethod, - AbstractHttpClient httpClient, - String soapActionString) - throws AxisFault { - - if (isAuthenticationEnabled(msgContext)) { - httpMethod.getParams().setBooleanParameter(ClientPNames.HANDLE_AUTHENTICATION, true); - } - - MessageFormatter messageFormatter = MessageProcessorSelector.getMessageFormatter(msgContext); - - url = messageFormatter.getTargetAddress(msgContext, format, url); - - try { - httpMethod.setURI(url.toURI()); - } catch (URISyntaxException e) { - log.error("Error in URI : " + url, e); - } - - httpMethod.setHeader(HTTPConstants.HEADER_CONTENT_TYPE, - messageFormatter.getContentType(msgContext, format, soapActionString)); - - httpMethod.setHeader(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.setHeader(HTTPConstants.HEADER_COOKIE, buffer.toString()); - } - } - - if (httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)) { - httpClient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, - 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, 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); } @@ -807,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); } @@ -819,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); } @@ -850,176 +115,11 @@ 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; - } - } - - protected HttpResponse executeMethod(AbstractHttpClient httpClient, MessageContext msgContext, - URL url, - HttpRequestBase method) throws IOException { - HttpHost httpHost = 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.addHeader(HTTPConstants.HEADER_ACCEPT_ENCODING, - HTTPConstants.COMPRESSION_GZIP); + return HttpClientBuilder.create() + .setConnectionManager(connManager) + .setConnectionManagerShared(true) + .build(); } - - if (msgContext.isPropertyTrue(HTTPConstants.MC_GZIP_REQUEST)) { - method.addHeader(HTTPConstants.HEADER_CONTENT_ENCODING, - 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); - } - - setTimeouts(msgContext, method); - HttpContext localContext = new BasicHttpContext(); - // Why do we have add context here - return httpClient.execute(httpHost, method, localContext); - } - - public void addCustomHeaders(HttpRequestBase 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 BasicHeader(nv.getName(), nv.getValue()); - if (HTTPConstants.HEADER_USER_AGENT.equals(header.getName())) { - isCustomUserAgentSet = true; - } - method.addHeader(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.addHeader(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.getAllHeaders(); - - boolean headerAdded = false; - for (Header header : headers) { - if (header.getName() != null - && header.getName().equals(((Map.Entry) headerEntry).getKey())) { - headerAdded = true; - break; - } - } - - if (!headerAdded) { - method.addHeader(((Map.Entry) headerEntry).getKey().toString(), - ((Map.Entry) headerEntry).getValue().toString()); - } - } - } - } - - if (!isCustomUserAgentSet) { - String userAgentString = getUserAgent(msgContext); - method.setHeader(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-4091/modules/transport/http/src/org/apache/axis2/transport/http/server/SimpleHttpServer.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/src/org/apache/axis2/transport/http/server/SimpleHttpServer.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/src/org/apache/axis2/transport/http/server/SimpleHttpServer.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/src/org/apache/axis2/transport/http/server/SimpleHttpServer.java Sun Dec 17 22:34:08 2017 @@ -84,7 +84,9 @@ public class SimpleHttpServer { // Attempt to terminate the active processors nicely LOG.info("Shut down HTTP processors"); this.requestExecutor.shutdownNow(); - this.requestExecutor.awaitTermination(SHUTDOWN_GRACE_PERIOD, TimeUnit.MILLISECONDS); + if (!Boolean.parseBoolean(System.getProperty("org.apache.axis2.transport.http.server.fastShutdown", "false"))) { + this.requestExecutor.awaitTermination(SHUTDOWN_GRACE_PERIOD, TimeUnit.MILLISECONDS); + } if (!this.requestExecutor.isTerminated()) { // Terminate the active processors forcibly LOG.info("Force shut down HTTP processors"); Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java Sun Dec 17 22:34:08 2017 @@ -18,11 +18,13 @@ */ package org.apache.axis2.transport.http; +import static com.google.common.truth.Truth.assertAbout; +import static org.apache.axiom.truth.xml.XMLTruth.xml; + import java.io.IOException; import java.util.ArrayList; import java.util.List; -import javax.mail.MessagingException; import javax.servlet.http.HttpServletResponse; import javax.xml.namespace.QName; @@ -48,8 +50,6 @@ import org.apache.axis2.transport.Transp import org.apache.axis2.transport.http.mock.MockAxisHttpResponse; import org.apache.axis2.transport.http.mock.MockHttpServletResponse; import org.apache.axis2.transport.http.mock.MockHTTPResponse; -import org.apache.commons.httpclient.HttpMethod; -import org.apache.commons.httpclient.methods.GetMethod; import org.apache.http.ProtocolVersion; import org.apache.http.RequestLine; import org.apache.http.message.BasicRequestLine; @@ -69,8 +69,9 @@ public abstract class CommonsHTTPTranspo .get("Content-Type")); assertEquals("Not the expected Header value", "custom-value", httpResponse.getHeaders() .get("Custom-header")); - assertEquals("Not the expected body content", envelope.toString().replace("utf", "UTF"), - new String(httpResponse.getByteArrayOutputStream().toByteArray())); + assertAbout(xml()) + .that(new String(httpResponse.getByteArrayOutputStream().toByteArray())) + .hasSameContentAs(envelope.toString()); } public void testInvokeWithAxisHttpResponseImpl() throws Exception { @@ -84,22 +85,11 @@ public abstract class CommonsHTTPTranspo .get("Content-Type")); assertEquals("Not the expected Header value", "custom-value", httpResponse.getHeaders() .get("Custom-header")); - assertEquals("Not the expected body content", envelope.toString().replace("utf", "UTF"), - new String(httpResponse.getByteArrayOutputStream().toByteArray())); + assertAbout(xml()) + .that(new String(httpResponse.getByteArrayOutputStream().toByteArray())) + .hasSameContentAs(envelope.toString()); } - public void testCleanup() throws AxisFault { - TransportSender sender = getTransportSender(); - MessageContext msgContext = new MessageContext(); - HttpMethod httpMethod = new GetMethod(); - msgContext.setProperty(HTTPConstants.HTTP_METHOD, httpMethod); - assertNotNull("HttpMethod can not be null", - msgContext.getProperty(HTTPConstants.HTTP_METHOD)); - sender.cleanup(msgContext); - assertNull("HttpMethod should be null", msgContext.getProperty(HTTPConstants.HTTP_METHOD)); - - } - public void testInit() throws AxisFault { ConfigurationContext confContext = ConfigurationContextFactory .createEmptyConfigurationContext(); @@ -144,7 +134,7 @@ public abstract class CommonsHTTPTranspo } - static SOAPEnvelope getEnvelope() throws IOException, MessagingException { + static SOAPEnvelope getEnvelope() throws IOException { SOAPFactory soapFac = OMAbstractFactory.getSOAP11Factory(); OMFactory omFac = OMAbstractFactory.getOMFactory(); SOAPEnvelope enp = soapFac.createSOAPEnvelope(); Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPClient4SenderTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPClient4SenderTest.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPClient4SenderTest.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPClient4SenderTest.java Sun Dec 17 22:34:08 2017 @@ -19,156 +19,12 @@ package org.apache.axis2.transport.http; -import org.apache.axis2.Constants; import org.apache.axis2.transport.http.impl.httpclient4.HTTPSenderImpl; -import javax.ws.rs.core.HttpHeaders; - public class HTTPClient4SenderTest extends HTTPSenderTest { @Override protected HTTPSender getHTTPSender() { return new HTTPSenderImpl(); } - - @Override - public void testSendViaGet() throws Exception { - int port = getBasicHttpServer().getPort(); - sendViaHTTP(Constants.Configuration.HTTP_METHOD_GET, "urn:getService", "http://localhost:" - + port + "/getService", true); - assertEquals("Not the expected HTTP Method", Constants.Configuration.HTTP_METHOD_GET, - getHTTPMethod()); - assertEquals("Not the expected content", "/getService?part=sample%20data", - getStringContent()); - assertNull("Not the expected HTTP Header value", getHeaders().get("SOAPAction")); - assertEquals("Not the expected HTTP Header value", - "application/x-www-form-urlencoded;action=\"urn:getService\";", - getHeaders().get(HttpHeaders.CONTENT_TYPE)); - assertEquals("Not the expected HTTP Header value", "localhost", - getHeaders().get(HttpHeaders.HOST)); - assertEquals("Not the expected HTTP Header value", "Axis2", - getHeaders().get(HttpHeaders.USER_AGENT)); - } - - @Override - public void testSendViaPost() throws Exception { - // test with REST payload - int port = getBasicHttpServer().getPort(); - sendViaHTTP(Constants.Configuration.HTTP_METHOD_POST, "urn:postService", - "http://localhost:" + port + "/postService", true); - assertEquals("Not the expected HTTP Method", Constants.Configuration.HTTP_METHOD_POST, - getHTTPMethod()); - assertEquals("Not the expected content", getEnvelope().getFirstElement().getFirstElement() - .toString(), getStringContent()); - assertNull("Not the expected HTTP Header value", getHeaders().get("SOAPAction")); - assertEquals("Not the expected HTTP Header value", "application/xml", - getHeaders().get(HttpHeaders.CONTENT_TYPE)); - assertEquals("Not the expected HTTP Header value", "localhost", - getHeaders().get(HttpHeaders.HOST)); - assertEquals("Not the expected HTTP Header value", "Axis2", - getHeaders().get(HttpHeaders.USER_AGENT)); - - // test with SOAP payload. - sendViaHTTP(Constants.Configuration.HTTP_METHOD_POST, "urn:postService", - "http://localhost:" + port + "/postService", false); - assertEquals("Not the expected HTTP Method", Constants.Configuration.HTTP_METHOD_POST, - getHTTPMethod()); - assertEquals("Not the expected content", getEnvelope().toString(), getStringContent()); - assertEquals("Not the expected HTTP Header value", "urn:postService", - getHeaders().get("SOAPAction").replace("\"", "")); - assertEquals("Not the expected HTTP Header value", "text/xml", - getHeaders().get(HttpHeaders.CONTENT_TYPE)); - assertEquals("Not the expected HTTP Header value", "localhost", - getHeaders().get(HttpHeaders.HOST)); - assertEquals("Not the expected HTTP Header value", "Axis2", - getHeaders().get(HttpHeaders.USER_AGENT)); - } - - @Override - public void testSendViaPut() throws Exception { - // test with REST payload - int port = getBasicHttpServer().getPort(); - sendViaHTTP(Constants.Configuration.HTTP_METHOD_PUT, "urn:putService", "http://localhost:" - + port + "/putService", true); - assertEquals("Not the expected HTTP Method", Constants.Configuration.HTTP_METHOD_PUT, - getHTTPMethod()); - assertEquals("Not the expected content", getEnvelope().getFirstElement().getFirstElement() - .toString(), getStringContent()); - assertNull("Not the expected HTTP Header value", getHeaders().get("SOAPAction")); - assertEquals("Not the expected HTTP Header value", "application/xml", - getHeaders().get(HttpHeaders.CONTENT_TYPE)); - assertEquals("Not the expected HTTP Header value", "localhost", - getHeaders().get(HttpHeaders.HOST)); - assertEquals("Not the expected HTTP Header value", "Axis2", - getHeaders().get(HttpHeaders.USER_AGENT)); - - // test with SOAP payload. - sendViaHTTP(Constants.Configuration.HTTP_METHOD_PUT, "urn:putService", "http://localhost:" - + port + "/putService", false); - assertEquals("Not the expected HTTP Method", Constants.Configuration.HTTP_METHOD_PUT, - getHTTPMethod()); - assertEquals("Not the expected content", getEnvelope().toString(), getStringContent()); - assertEquals("Not the expected HTTP Header value", "urn:putService", - getHeaders().get("SOAPAction").replace("\"", "")); - assertEquals("Not the expected HTTP Header value", "text/xml", - getHeaders().get(HttpHeaders.CONTENT_TYPE)); - assertEquals("Not the expected HTTP Header value", "localhost", - getHeaders().get(HttpHeaders.HOST)); - assertEquals("Not the expected HTTP Header value", "Axis2", - getHeaders().get(HttpHeaders.USER_AGENT)); - } - - @Override - public void testSendViaDelete() throws Exception { - // test with REST payload - int port = getBasicHttpServer().getPort(); - sendViaHTTP(Constants.Configuration.HTTP_METHOD_DELETE, "urn:deleteService", - "http://localhost:" + port + "/deleteService", true); - assertEquals("Not the expected HTTP Method", Constants.Configuration.HTTP_METHOD_DELETE, - getHTTPMethod()); - assertEquals("Not the expected content", "/deleteService?part=sample%20data", - getStringContent()); - assertEquals("Not the expected HTTP Header value", - "application/x-www-form-urlencoded;action=\"urn:deleteService\";", getHeaders() - .get(HttpHeaders.CONTENT_TYPE)); - assertEquals("Not the expected HTTP Header value", "localhost", - getHeaders().get(HttpHeaders.HOST)); - assertEquals("Not the expected HTTP Header value", "Axis2", - getHeaders().get(HttpHeaders.USER_AGENT)); - } - - @Override - public void testSendViaHead() throws Exception { - int port = getBasicHttpServer().getPort(); - sendViaHTTP(Constants.Configuration.HTTP_METHOD_HEAD, "urn:deleteService", - "http://localhost:" + port + "/deleteService", true); - assertEquals("Not the expected HTTP Method", Constants.Configuration.HTTP_METHOD_POST, - getHTTPMethod()); - assertEquals("Not the expected content", getEnvelope().getFirstElement().getFirstElement() - .toString(), getStringContent()); - assertEquals("Not the expected HTTP Header value", "application/xml", - getHeaders().get(HttpHeaders.CONTENT_TYPE)); - assertEquals("Not the expected HTTP Header value", "localhost", - getHeaders().get(HttpHeaders.HOST)); - assertEquals("Not the expected HTTP Header value", "Axis2", - getHeaders().get(HttpHeaders.USER_AGENT)); - - } - - @Override - public void testSendNOHTTPMethod() throws Exception { - int port = getBasicHttpServer().getPort(); - sendViaHTTP(null, "urn:noService", "http://localhost:" + port + "/noService", true); - assertEquals("Not the expected HTTP Method", Constants.Configuration.HTTP_METHOD_POST, - getHTTPMethod()); - assertEquals("Not the expected content", getEnvelope().getFirstElement().getFirstElement() - .toString(), getStringContent()); - assertNull("Not the expected HTTP Header value", getHeaders().get("SOAPAction")); - assertEquals("Not the expected HTTP Header value", "application/xml", - getHeaders().get(HttpHeaders.CONTENT_TYPE)); - assertEquals("Not the expected HTTP Header value", "localhost", - getHeaders().get(HttpHeaders.HOST)); - assertEquals("Not the expected HTTP Header value", "Axis2", - getHeaders().get(HttpHeaders.USER_AGENT)); - } } Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPClient4TransportSenderTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPClient4TransportSenderTest.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPClient4TransportSenderTest.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPClient4TransportSenderTest.java Sun Dec 17 22:34:08 2017 @@ -33,7 +33,6 @@ public class HTTPClient4TransportSenderT return new HTTPClient4TransportSender(); } - @Override public void testCleanup() throws AxisFault { TransportSender sender = getTransportSender(); MessageContext msgContext = new MessageContext(); Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPSenderTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPSenderTest.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPSenderTest.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HTTPSenderTest.java Sun Dec 17 22:34:08 2017 @@ -27,8 +27,11 @@ import org.apache.axis2.context.Operatio import org.apache.axis2.transport.http.mock.server.AbstractHTTPServerTest; import org.apache.axis2.transport.http.mock.server.BasicHttpServer; -import javax.mail.MessagingException; import javax.ws.rs.core.HttpHeaders; + +import static com.google.common.truth.Truth.assertAbout; +import static org.apache.axiom.truth.xml.XMLTruth.xml; + import java.io.IOException; import java.net.URL; @@ -54,11 +57,9 @@ public abstract class HTTPSenderTest ext * the rest * @throws IOException * Signals that an I/O exception has occurred. - * @throws MessagingException - * the messaging exception */ protected void sendViaHTTP(String httpMethod, String soapAction, String address, boolean rest) - throws IOException, MessagingException { + throws IOException { httpSender = getHTTPSender(); MessageContext msgContext = new MessageContext(); ConfigurationContext configContext = ConfigurationContextFactory @@ -127,7 +128,7 @@ public abstract class HTTPSenderTest ext "http://localhost:" + port + "/postService", false); assertEquals("Not the expected HTTP Method", Constants.Configuration.HTTP_METHOD_POST, getHTTPMethod()); - assertEquals("Not the expected content", getEnvelope().toString(), getStringContent()); + assertAbout(xml()).that(getStringContent()).hasSameContentAs(getEnvelope().toString()); assertEquals("Not the expected HTTP Header value", "urn:postService", getHeaders().get("SOAPAction").replace("\"", "")); assertEquals("Not the expected HTTP Header value", "text/xml", @@ -169,7 +170,7 @@ public abstract class HTTPSenderTest ext + port + "/putService", false); assertEquals("Not the expected HTTP Method", Constants.Configuration.HTTP_METHOD_PUT, getHTTPMethod()); - assertEquals("Not the expected content", getEnvelope().toString(), getStringContent()); + assertAbout(xml()).that(getStringContent()).hasSameContentAs(getEnvelope().toString()); assertEquals("Not the expected HTTP Header value", "urn:putService", getHeaders().get("SOAPAction").replace("\"", "")); assertEquals("Not the expected HTTP Header value", "text/xml", @@ -211,7 +212,8 @@ public abstract class HTTPSenderTest ext * @throws Exception * the exception */ - public void testSendViaHead() throws Exception { + // This is test is bullshit; if we send a HEAD request, we shouldn't expect the method to be POST + public void _testSendViaHead() throws Exception { int port = getBasicHttpServer().getPort(); sendViaHTTP(Constants.Configuration.HTTP_METHOD_HEAD, "urn:deleteService", @@ -252,7 +254,7 @@ public abstract class HTTPSenderTest ext getHeaders().get(HttpHeaders.USER_AGENT)); sendViaHTTP(null, "urn:noService", "http://localhost:" + port + "/noService", false); - assertEquals("Not the expected content", getEnvelope().toString(), getStringContent()); + assertAbout(xml()).that(getStringContent()).hasSameContentAs(getEnvelope().toString()); assertEquals("Not the expected HTTP Header value", "urn:noService", getHeaders().get("SOAPAction").replace("\"", "")); assertEquals("Not the expected HTTP Header value", "text/xml", Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HttpTransportDescriptionFactory.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HttpTransportDescriptionFactory.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HttpTransportDescriptionFactory.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/HttpTransportDescriptionFactory.java Sun Dec 17 22:34:08 2017 @@ -22,6 +22,7 @@ package org.apache.axis2.transport.http; import org.apache.axis2.description.Parameter; import org.apache.axis2.description.TransportInDescription; import org.apache.axis2.description.TransportOutDescription; +import org.apache.axis2.transport.http.impl.httpclient4.HTTPClient4TransportSender; import org.apache.axis2.transport.testkit.axis2.TransportDescriptionFactory; import org.apache.axis2.transport.testkit.http.HttpTestEnvironment; import org.apache.axis2.transport.testkit.tests.Setup; @@ -44,7 +45,7 @@ public class HttpTransportDescriptionFac public TransportOutDescription createTransportOutDescription() throws Exception { TransportOutDescription desc = new TransportOutDescription("http"); - desc.setSender(new CommonsHTTPTransportSender()); + desc.setSender(new HTTPClient4TransportSender()); return desc; } } Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/mock/server/AbstractHTTPServerTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/mock/server/AbstractHTTPServerTest.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/mock/server/AbstractHTTPServerTest.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/http/test/org/apache/axis2/transport/http/mock/server/AbstractHTTPServerTest.java Sun Dec 17 22:34:08 2017 @@ -22,7 +22,6 @@ package org.apache.axis2.transport.http. import java.io.IOException; import java.util.Map; -import javax.mail.MessagingException; import javax.xml.namespace.QName; import org.apache.axiom.om.OMAbstractFactory; @@ -144,10 +143,8 @@ public abstract class AbstractHTTPServer * @return the envelope * @throws IOException * Signals that an I/O exception has occurred. - * @throws MessagingException - * the messaging exception */ - public static SOAPEnvelope getEnvelope() throws IOException, MessagingException { + public static SOAPEnvelope getEnvelope() throws IOException { SOAPFactory soapFac = OMAbstractFactory.getSOAP11Factory(); OMFactory omFac = OMAbstractFactory.getOMFactory(); SOAPEnvelope enp = soapFac.createSOAPEnvelope(); Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/pom.xml URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/pom.xml?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/pom.xml (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/pom.xml Sun Dec 17 22:34:08 2017 @@ -22,9 +22,9 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.axis2</groupId> - <artifactId>axis2-parent</artifactId> - <version>1.7.0-SNAPSHOT</version> - <relativePath>../../parent/pom.xml</relativePath> + <artifactId>axis2</artifactId> + <version>1.8.0-SNAPSHOT</version> + <relativePath>../../../pom.xml</relativePath> </parent> <groupId>org.apache.axis2</groupId> @@ -82,7 +82,6 @@ <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> - <version>1.4.0</version> <extensions>true</extensions> <configuration> <instructions> @@ -167,6 +166,16 @@ <artifactId>junit</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>com.google.truth</groupId> + <artifactId>truth</artifactId> + <scope>test</scope> + </dependency> </dependencies> <properties> Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java Sun Dec 17 22:34:08 2017 @@ -20,7 +20,6 @@ import org.apache.axiom.om.OMElement; import org.apache.axis2.AxisFault; import org.apache.axis2.Constants; import org.apache.axis2.builder.Builder; -import org.apache.axis2.builder.BuilderUtil; import org.apache.axis2.builder.SOAPBuilder; import org.apache.axis2.context.MessageContext; import org.apache.axis2.util.MessageProcessorSelector; @@ -431,9 +430,17 @@ public class JMSUtils extends BaseUtils throws JMSException { if (dest instanceof Queue) { - return ((QueueSession) session).createReceiver((Queue) dest, messageSelector); + if (session instanceof QueueSession) { + return ((QueueSession) session).createReceiver((Queue) dest, messageSelector); + } else { + return session.createConsumer(dest, messageSelector); + } } else { - return ((TopicSession) session).createSubscriber((Topic) dest, messageSelector, false); + if (session instanceof TopicSession) { + return ((TopicSession) session).createSubscriber((Topic) dest, messageSelector, false); + } else { + return session.createConsumer(dest, messageSelector); + } } } @@ -714,7 +721,10 @@ public class JMSUtils extends BaseUtils "dynamicTopics/" : "dynamicQueues/") + destinationName); } catch (NamingException x) { log.warn("Cannot locate destination : " + destinationName); - throw x; + // Rethrow the original exception. If we get here this most likely means that + // the JMS provider doesn't support dynamic(Queues|Topics) and we should simply + // report the original lookup failure. + throw e; } } catch (NamingException e) { log.warn("Cannot locate destination : " + destinationName, e); Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/package.html URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/package.html?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/package.html (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/main/java/org/apache/axis2/transport/jms/package.html Sun Dec 17 22:34:08 2017 @@ -2,6 +2,8 @@ <title>JMS Transport Configuration</title> <body> +Transport implementation for JMS. + <h2>JMS Listener Configuration (axis2.xml)</h2> e.g: Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSAsyncClient.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSAsyncClient.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSAsyncClient.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSAsyncClient.java Sun Dec 17 22:34:08 2017 @@ -19,8 +19,7 @@ package org.apache.axis2.transport.jms; -import javax.mail.internet.ContentType; - +import org.apache.axiom.mime.ContentType; import org.apache.axis2.transport.testkit.client.AsyncTestClient; import org.apache.axis2.transport.testkit.client.ClientOptions; Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSClient.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSClient.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSClient.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSClient.java Sun Dec 17 22:34:08 2017 @@ -25,8 +25,8 @@ import javax.jms.Destination; import javax.jms.Message; import javax.jms.MessageProducer; import javax.jms.Session; -import javax.mail.internet.ContentType; +import org.apache.axiom.mime.ContentType; import org.apache.axis2.transport.base.BaseConstants; import org.apache.axis2.transport.testkit.client.ClientOptions; import org.apache.axis2.transport.testkit.client.TestClient; Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSRequestResponseClient.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSRequestResponseClient.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSRequestResponseClient.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/JMSRequestResponseClient.java Sun Dec 17 22:34:08 2017 @@ -25,8 +25,8 @@ import javax.jms.Destination; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.Session; -import javax.mail.internet.ContentType; +import org.apache.axiom.mime.ContentType; import org.apache.axis2.transport.testkit.client.ClientOptions; import org.apache.axis2.transport.testkit.client.RequestResponseTestClient; import org.apache.axis2.transport.testkit.message.IncomingMessage; Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/ctype/ContentTypeRuleTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/ctype/ContentTypeRuleTest.java?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/ctype/ContentTypeRuleTest.java (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/jms/src/test/java/org/apache/axis2/transport/jms/ctype/ContentTypeRuleTest.java Sun Dec 17 22:34:08 2017 @@ -22,7 +22,7 @@ import javax.jms.Message; import junit.framework.TestCase; import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.impl.builder.StAXOMBuilder; +import org.apache.axiom.om.OMXMLBuilderFactory; import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.deployment.ServiceBuilder; import org.apache.axis2.description.AxisService; @@ -42,7 +42,7 @@ public class ContentTypeRuleTest extends InputStream in = ContentTypeRuleTest.class.getResourceAsStream(getName() + ".xml"); try { - OMElement element = new StAXOMBuilder(in).getDocumentElement(); + OMElement element = OMXMLBuilderFactory.createOMBuilder(in).getDocumentElement(); new ServiceBuilder(cfgCtx, service).populateService(element); } finally { in.close(); Modified: axis/axis2/java/core/branches/AXIS2-4091/modules/transport/local/pom.xml URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/AXIS2-4091/modules/transport/local/pom.xml?rev=1818518&r1=1818517&r2=1818518&view=diff ============================================================================== --- axis/axis2/java/core/branches/AXIS2-4091/modules/transport/local/pom.xml (original) +++ axis/axis2/java/core/branches/AXIS2-4091/modules/transport/local/pom.xml Sun Dec 17 22:34:08 2017 @@ -23,9 +23,9 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.axis2</groupId> - <artifactId>axis2-parent</artifactId> - <version>1.7.0-SNAPSHOT</version> - <relativePath>../../parent/pom.xml</relativePath> + <artifactId>axis2</artifactId> + <version>1.8.0-SNAPSHOT</version> + <relativePath>../../../pom.xml</relativePath> </parent> <artifactId>axis2-transport-local</artifactId> <name>Apache Axis2 - Transport - Local</name>
