merging httpclient-4.3 branch from Oleg
Project: http://git-wip-us.apache.org/repos/asf/maven-wagon/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-wagon/commit/1c04f0a4 Tree: http://git-wip-us.apache.org/repos/asf/maven-wagon/tree/1c04f0a4 Diff: http://git-wip-us.apache.org/repos/asf/maven-wagon/diff/1c04f0a4 Branch: refs/heads/master Commit: 1c04f0a4a32bc11fd5e69740f1a346d80d33d4cf Parents: 5b987be d4a6064 Author: Olivier Lamy <ol...@apache.org> Authored: Tue Oct 22 13:57:02 2013 +1100 Committer: Olivier Lamy <ol...@apache.org> Committed: Tue Oct 22 13:57:02 2013 +1100 ---------------------------------------------------------------------- .../providers/http/AbstractHttpClientWagon.java | 241 ++++++++------- .../providers/http/ConfigurationUtils.java | 231 +++++++++++++++ .../wagon/providers/http/HttpConfiguration.java | 6 +- .../providers/http/HttpMethodConfiguration.java | 297 +------------------ .../maven/wagon/providers/http/HttpWagon.java | 14 +- .../providers/http/RelaxedTrustStrategy.java | 85 ++++++ .../providers/http/RelaxedX509TrustManager.java | 132 --------- .../providers/http/HttpClientWagonTest.java | 4 +- 8 files changed, 467 insertions(+), 543 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/1c04f0a4/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java ---------------------------------------------------------------------- diff --cc wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java index 0b683ae,fea72b4..268f2f1 --- a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java +++ b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java @@@ -227,28 -227,28 +227,28 @@@ public abstract class AbstractHttpClien * <b>enabled by default</b> */ private final static boolean PERSISTENT_POOL = -- Boolean.valueOf( System.getProperty( "maven.wagon.http.pool", "true" ) ); ++ Boolean.valueOf( System.getProperty( "maven.wagon.http.pool", "true" ) ); /** * skip failure on certificate validity checks. * <b>disabled by default</b> */ private final static boolean SSL_INSECURE = -- Boolean.valueOf( System.getProperty( "maven.wagon.http.ssl.insecure", "false" ) ); ++ Boolean.valueOf( System.getProperty( "maven.wagon.http.ssl.insecure", "false" ) ); /** * if using sslInsecure, certificate date issues will be ignored * <b>disabled by default</b> */ private final static boolean IGNORE_SSL_VALIDITY_DATES = -- Boolean.valueOf( System.getProperty( "maven.wagon.http.ssl.ignore.validity.dates", "false" ) ); ++ Boolean.valueOf( System.getProperty( "maven.wagon.http.ssl.ignore.validity.dates", "false" ) ); /** * If enabled, ssl hostname verifier does not check hostname. Disable this will use a browser compat hostname verifier * <b>disabled by default</b> */ private final static boolean SSL_ALLOW_ALL = -- Boolean.valueOf( System.getProperty( "maven.wagon.http.ssl.allowall", "false" ) ); ++ Boolean.valueOf( System.getProperty( "maven.wagon.http.ssl.allowall", "false" ) ); /** @@@ -256,14 -256,14 +256,14 @@@ * <b>20 by default</b> */ private final static int MAX_CONN_PER_ROUTE = -- Integer.parseInt( System.getProperty( "maven.wagon.httpconnectionManager.maxPerRoute", "20" ) ); ++ Integer.parseInt( System.getProperty( "maven.wagon.httpconnectionManager.maxPerRoute", "20" ) ); /** * Maximum conncurrent connections in total. * <b>40 by default</b> */ private final static int MAX_CONN_TOTAL = -- Integer.parseInt( System.getProperty( "maven.wagon.httpconnectionManager.maxTotal", "40" ) ); ++ Integer.parseInt( System.getProperty( "maven.wagon.httpconnectionManager.maxTotal", "40" ) ); /** * Internal connection manager @@@ -273,44 -273,94 +273,93 @@@ private static PoolingHttpClientConnectionManager createConnManager() { -- String sslProtocolsStr = System.getProperty("https.protocols"); -- String cipherSuitesStr = System.getProperty("https.cipherSuites"); -- String[] sslProtocols = sslProtocolsStr != null ? sslProtocolsStr.split(" *, *") : null; -- String[] cipherSuites = cipherSuitesStr != null ? cipherSuitesStr.split(" *, *") : null; ++ String sslProtocolsStr = System.getProperty( "https.protocols" ); ++ String cipherSuitesStr = System.getProperty( "https.cipherSuites" ); ++ String[] sslProtocols = sslProtocolsStr != null ? sslProtocolsStr.split( " *, *" ) : null; ++ String[] cipherSuites = cipherSuitesStr != null ? cipherSuitesStr.split( " *, *" ) : null; SSLConnectionSocketFactory sslConnectionSocketFactory; if ( SSL_INSECURE ) { - sslConnectionSocketFactory = new SSLConnectionSocketFactory( - RelaxedX509TrustManager.createRelaxedSSLContext(IGNORE_SSL_VALIDITY_DATES), - sslProtocols, - cipherSuites, - SSL_ALLOW_ALL ? SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER : SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER ); - try { - SSLContext sslContext = new SSLContextBuilder() - .useSSL() - .loadTrustMaterial(null, new RelaxedTrustStrategy(IGNORE_SSL_VALIDITY_DATES)) - .build(); - sslConnectionSocketFactory = new SSLConnectionSocketFactory( - sslContext, - sslProtocols, - cipherSuites, - SSL_ALLOW_ALL ? SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER : SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER ); ++ try ++ { ++ SSLContext sslContext = new SSLContextBuilder().useSSL().loadTrustMaterial( null, ++ new RelaxedTrustStrategy( ++ IGNORE_SSL_VALIDITY_DATES ) ).build(); ++ sslConnectionSocketFactory = new SSLConnectionSocketFactory( sslContext, sslProtocols, cipherSuites, ++ SSL_ALLOW_ALL ++ ? SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER ++ : SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER ); + } - catch (Exception ex) ++ catch ( Exception ex ) + { - throw new SSLInitializationException(ex.getMessage(), ex); ++ throw new SSLInitializationException( ex.getMessage(), ex ); + } } else { -- sslConnectionSocketFactory = new SSLConnectionSocketFactory( -- HttpsURLConnection.getDefaultSSLSocketFactory(), -- sslProtocols, -- cipherSuites, -- SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER ); ++ sslConnectionSocketFactory = ++ new SSLConnectionSocketFactory( HttpsURLConnection.getDefaultSSLSocketFactory(), sslProtocols, ++ cipherSuites, ++ SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER ); } -- Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create() -- .register("http", PlainConnectionSocketFactory.INSTANCE) -- .register("https", sslConnectionSocketFactory) -- .build(); ++ Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register( "http", ++ PlainConnectionSocketFactory.INSTANCE ).register( ++ "https", sslConnectionSocketFactory ).build(); PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager( registry ); -- if (PERSISTENT_POOL) { ++ if ( PERSISTENT_POOL ) ++ { connManager.setDefaultMaxPerRoute( MAX_CONN_PER_ROUTE ); connManager.setMaxTotal( MAX_CONN_TOTAL ); -- } else { ++ } ++ else ++ { connManager.setMaxTotal( 1 ); } return connManager; } + private static CloseableHttpClient CLIENT = createClient(); + - private static CloseableHttpClient createClient() { - return HttpClientBuilder.create() - .useSystemProperties() - .disableConnectionState() - .setConnectionManager(CONN_MAN) - .build(); ++ private static CloseableHttpClient createClient() ++ { ++ return HttpClientBuilder.create().useSystemProperties().disableConnectionState().setConnectionManager( ++ CONN_MAN ).build(); + } + + private static String DEFAULT_USER_AGENT = getDefaultUserAgent(); + + private static String getDefaultUserAgent() + { + Properties props = new Properties(); + - InputStream is = AbstractHttpClientWagon.class.getResourceAsStream("/META-INF/maven/org.apache.maven.wagon/wagon-http/pom.properties"); ++ InputStream is = AbstractHttpClientWagon.class.getResourceAsStream( ++ "/META-INF/maven/org.apache.maven.wagon/wagon-http/pom.properties" ); + if ( is != null ) + { + try + { + props.load( is ); + } + catch ( IOException ignore ) + { + } + finally + { + IOUtil.close( is ); + } + } + + String ver = props.getProperty( "version", "unknown-version" ); + return "Apache-Maven-Wagon/" + ver + " (Java " + System.getProperty( "java.version" ) + "; "; + } + + private HttpClientContext localContext; + + private Closeable closeable; + /** * @plexus.configuration * @deprecated Use httpConfiguration instead. @@@ -341,7 -391,7 +390,7 @@@ String host = getRepository().getHost(); int port = getRepository().getPort() > -1 ? getRepository().getPort() : AuthScope.ANY_PORT; -- credentialsProvider.setCredentials(new AuthScope(host, port), creds); ++ credentialsProvider.setCredentials( new AuthScope( host, port ), creds ); // preemptive off by default /* AuthCache authCache = new BasicAuthCache(); @@@ -385,27 -431,20 +430,20 @@@ int port = proxyInfo.getPort() > -1 ? proxyInfo.getPort() : AuthScope.ANY_PORT; AuthScope authScope = new AuthScope( proxyHost, port ); -- credentialsProvider.setCredentials(authScope, creds); ++ credentialsProvider.setCredentials( authScope, creds ); } } } localContext = HttpClientContext.create(); - - client = HttpClientBuilder.create() - .useSystemProperties() - .disableConnectionState() - .setConnectionManager(connManager) - .setProxy(proxy) - .setDefaultCredentialsProvider(credentialsProvider) - .build(); - localContext.setCredentialsProvider(credentialsProvider); ++ localContext.setCredentialsProvider( credentialsProvider ); } public void closeConnection() { -- if ( !PERSISTENT_POOL) ++ if ( !PERSISTENT_POOL ) { - connManager.closeIdleConnections(0, TimeUnit.MILLISECONDS); - CONN_MAN.closeIdleConnections(0, TimeUnit.MILLISECONDS); ++ CONN_MAN.closeIdleConnections( 0, TimeUnit.MILLISECONDS ); } } @@@ -510,7 -549,7 +548,7 @@@ { int statusCode = response.getStatusLine().getStatusCode(); String reasonPhrase = ", ReasonPhrase: " + response.getStatusLine().getReasonPhrase() + "."; -- fireTransferDebug(url + " - Status code: " + statusCode + reasonPhrase); ++ fireTransferDebug( url + " - Status code: " + statusCode + reasonPhrase ); // Check that we didn't run out of retries. switch ( statusCode ) @@@ -544,7 -583,9 +582,9 @@@ } } -- firePutCompleted(resource, source); ++ firePutCompleted( resource, source ); + - EntityUtils.consume(response.getEntity()); ++ EntityUtils.consume( response.getEntity() ); } finally { @@@ -588,9 -629,10 +628,11 @@@ try { CloseableHttpResponse response = execute( headMethod ); -- try { ++ try ++ { int statusCode = response.getStatusLine().getStatusCode(); String reasonPhrase = ", ReasonPhrase: " + response.getStatusLine().getReasonPhrase() + "."; + boolean result; switch ( statusCode ) { case HttpStatus.SC_OK: @@@ -616,6 -659,8 +659,8 @@@ "Failed to transfer file: " + url + ". Return code is: " + statusCode + reasonPhrase ); } - EntityUtils.consume(response.getEntity()); ++ EntityUtils.consume( response.getEntity() ); + return result; } finally { @@@ -632,20 -677,32 +677,33 @@@ } } -- protected CloseableHttpResponse execute( HttpUriRequest httpMethod) ++ protected CloseableHttpResponse execute( HttpUriRequest httpMethod ) throws HttpException, IOException { setHeaders( httpMethod ); String userAgent = getUserAgent( httpMethod ); -- if (userAgent != null) { -- httpMethod.setHeader(HTTP.USER_AGENT, userAgent); ++ if ( userAgent != null ) ++ { ++ httpMethod.setHeader( HTTP.USER_AGENT, userAgent ); + } + + RequestConfig.Builder requestConfigBuilder = RequestConfig.custom(); + // WAGON-273: default the cookie-policy to browser compatible - requestConfigBuilder.setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY); ++ requestConfigBuilder.setCookieSpec( CookieSpecs.BROWSER_COMPATIBILITY ); + + ProxyInfo proxyInfo = getProxyInfo( getRepository().getProtocol(), getRepository().getHost() ); + if ( proxyInfo != null ) + { + HttpHost proxy = new HttpHost( proxyInfo.getHost(), proxyInfo.getPort() ); + requestConfigBuilder.setProxy( proxy ); } HttpMethodConfiguration config = - httpConfiguration == null ? null : httpConfiguration.getMethodConfiguration(httpMethod); + httpConfiguration == null ? null : httpConfiguration.getMethodConfiguration( httpMethod ); + if ( config != null ) { - localContext.setRequestConfig( config.asRequestConfig() ); - ConfigurationUtils.copyConfig(config, requestConfigBuilder ); ++ ConfigurationUtils.copyConfig( config, requestConfigBuilder ); if ( config.isUsePreemptive() && authenticationInfo != null ) { @@@ -890,16 -912,16 +913,18 @@@ Header lastModifiedHeader = response.getFirstHeader( "Last-Modified" ); if ( lastModifiedHeader != null ) { -- Date lastModified = DateUtils.parseDate(lastModifiedHeader.getValue()); -- if ( lastModified != null ) { ++ Date lastModified = DateUtils.parseDate( lastModifiedHeader.getValue() ); ++ if ( lastModified != null ) ++ { resource.setLastModified( lastModified.getTime() ); fireTransferDebug( "last-modified = " + lastModifiedHeader.getValue() + -- " (" + lastModified.getTime() + ")" ); ++ " (" + lastModified.getTime() + ")" ); } } HttpEntity entity = response.getEntity(); -- if ( entity != null ) { ++ if ( entity != null ) ++ { inputData.setInputStream( entity.getContent() ); } } @@@ -925,7 -947,7 +950,7 @@@ { closeable.close(); } -- catch (IOException ignore) ++ catch ( IOException ignore ) { } @@@ -964,4 -986,4 +989,4 @@@ // no needed in this implementation but throw an Exception if used throw new IllegalStateException( "this wagon http client must not use fillOutputData" ); } --} ++}