You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by gg...@apache.org on 2022/09/27 15:06:49 UTC
[httpcomponents-client] branch master updated: Use Java 8 features and APIs
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-client.git
The following commit(s) were added to refs/heads/master by this push:
new 7ac0a028f Use Java 8 features and APIs
7ac0a028f is described below
commit 7ac0a028f811243c09f44871c0dddfbdb055dc7b
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Sep 27 11:06:42 2022 -0400
Use Java 8 features and APIs
---
.../http/cache/HttpAsyncCacheStorageAdaptor.java | 3 +-
.../hc/client5/http/cache/HttpCacheEntry.java | 5 +-
.../AbstractSerializingAsyncCacheStorage.java | 7 +--
.../cache/AbstractSerializingCacheStorage.java | 7 +--
.../http/impl/cache/BasicHttpAsyncCache.java | 6 +-
.../impl/cache/ByteArrayCacheEntrySerializer.java | 7 +--
.../hc/client5/http/impl/cache/CachingExec.java | 5 +-
.../impl/cache/DefaultAsyncCacheInvalidator.java | 10 +---
.../http/impl/cache/DefaultCacheInvalidator.java | 4 +-
.../cache/HttpByteArrayCacheEntrySerializer.java | 8 +--
.../http/impl/cache/ManagedHttpCacheStorage.java | 4 +-
.../impl/cache/ResponseProtocolCompliance.java | 4 +-
.../cache/ehcache/EhcacheHttpCacheStorage.java | 13 ++---
...HttpByteArrayCacheEntrySerializerTestUtils.java | 5 +-
.../org/apache/hc/client5/http/fluent/Request.java | 6 +-
.../client5/http/examples/fluent/FluentAsync.java | 37 ++++++------
.../org/apache/hc/client5/http/ContextBuilder.java | 4 +-
.../http/async/methods/SimpleHttpRequest.java | 6 +-
.../http/async/methods/SimpleHttpResponse.java | 7 +--
.../apache/hc/client5/http/config/TlsConfig.java | 18 +++---
.../hc/client5/http/cookie/BasicCookieStore.java | 66 ++++++++--------------
.../apache/hc/client5/http/cookie/CookieStore.java | 26 ++++++---
.../http/entity/mime/FormBodyPartBuilder.java | 4 +-
.../http/entity/mime/MultipartPartBuilder.java | 4 +-
.../apache/hc/client5/http/impl/RequestCopier.java | 7 +--
.../hc/client5/http/impl/RequestSupport.java | 4 +-
.../client5/http/impl/async/AsyncProtocolExec.java | 13 +----
.../hc/client5/http/impl/auth/BasicScheme.java | 4 +-
.../hc/client5/http/impl/auth/DigestScheme.java | 4 +-
.../client5/http/impl/auth/HttpAuthenticator.java | 8 +--
.../http/impl/classic/ClassicRequestCopier.java | 7 +--
.../http/impl/classic/HttpClientBuilder.java | 5 +-
.../hc/client5/http/impl/classic/ProtocolExec.java | 6 +-
.../client5/http/impl/cookie/CookieSpecBase.java | 7 +--
.../io/DefaultManagedHttpClientConnection.java | 12 +---
.../http/impl/routing/BasicRouteDirector.java | 2 +-
.../impl/routing/SystemDefaultRoutePlanner.java | 4 +-
.../client5/http/protocol/RequestAddCookies.java | 11 +---
.../http/protocol/RequestDefaultHeaders.java | 6 +-
.../hc/client5/http/psl/PublicSuffixMatcher.java | 42 ++++++--------
.../http/ssl/SSLConnectionSocketFactory.java | 7 +--
.../hc/client5/http/ssl/TlsSessionValidator.java | 4 +-
.../client5/http/examples/ClientCustomContext.java | 6 +-
43 files changed, 155 insertions(+), 270 deletions(-)
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/cache/HttpAsyncCacheStorageAdaptor.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/cache/HttpAsyncCacheStorageAdaptor.java
index 2178a62bb..df0650852 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/cache/HttpAsyncCacheStorageAdaptor.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/cache/HttpAsyncCacheStorageAdaptor.java
@@ -70,8 +70,7 @@ public final class HttpAsyncCacheStorageAdaptor implements HttpAsyncCacheStorage
Args.notEmpty(key, "Key");
Args.notNull(callback, "Callback");
try {
- final HttpCacheEntry entry = cacheStorage.getEntry(key);
- callback.completed(entry);
+ callback.completed(cacheStorage.getEntry(key));
} catch (final Exception ex) {
callback.failed(ex);
}
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/cache/HttpCacheEntry.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/cache/HttpCacheEntry.java
index 11432ac17..93df2b12a 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/cache/HttpCacheEntry.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/cache/HttpCacheEntry.java
@@ -243,12 +243,11 @@ public class HttpCacheEntry implements MessageHeaders, Serializable {
@Override
public Header[] getHeaders() {
final HeaderGroup filteredHeaders = new HeaderGroup();
- for (final Iterator<Header> iterator = responseHeaders.headerIterator(); iterator.hasNext();) {
- final Header header = iterator.next();
+ responseHeaders.headerIterator().forEachRemaining(header -> {
if (!REQUEST_METHOD_HEADER_NAME.equals(header.getName())) {
filteredHeaders.addHeader(header);
}
- }
+ });
return filteredHeaders.getHeaders();
}
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/AbstractSerializingAsyncCacheStorage.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/AbstractSerializingAsyncCacheStorage.java
index 126192b1f..7fe3f6db9 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/AbstractSerializingAsyncCacheStorage.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/AbstractSerializingAsyncCacheStorage.java
@@ -26,12 +26,12 @@
*/
package org.apache.hc.client5.http.impl.cache;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
import org.apache.hc.client5.http.cache.HttpAsyncCacheStorage;
import org.apache.hc.client5.http.cache.HttpCacheCASOperation;
@@ -239,10 +239,7 @@ public abstract class AbstractSerializingAsyncCacheStorage<T, CAS> implements Ht
Args.notNull(keys, "Storage keys");
Args.notNull(callback, "Callback");
try {
- final List<String> storageKeys = new ArrayList<>(keys.size());
- for (final String key: keys) {
- storageKeys.add(digestToStorageKey(key));
- }
+ final List<String> storageKeys = keys.stream().map(this::digestToStorageKey).collect(Collectors.toList());
return bulkRestore(storageKeys, new FutureCallback<Map<String, T>>() {
@Override
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/AbstractSerializingCacheStorage.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/AbstractSerializingCacheStorage.java
index c0b683a01..1b61396f5 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/AbstractSerializingCacheStorage.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/AbstractSerializingCacheStorage.java
@@ -26,11 +26,11 @@
*/
package org.apache.hc.client5.http.impl.cache;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
import org.apache.hc.client5.http.cache.HttpCacheCASOperation;
import org.apache.hc.client5.http.cache.HttpCacheEntry;
@@ -135,10 +135,7 @@ public abstract class AbstractSerializingCacheStorage<T, CAS> implements HttpCac
@Override
public final Map<String, HttpCacheEntry> getEntries(final Collection<String> keys) throws ResourceIOException {
Args.notNull(keys, "Storage keys");
- final List<String> storageKeys = new ArrayList<>(keys.size());
- for (final String key: keys) {
- storageKeys.add(digestToStorageKey(key));
- }
+ final List<String> storageKeys = keys.stream().map(this::digestToStorageKey).collect(Collectors.toList());
final Map<String, T> storageObjectMap = bulkRestore(storageKeys);
final Map<String, HttpCacheEntry> resultMap = new HashMap<>();
for (final String key: keys) {
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/BasicHttpAsyncCache.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/BasicHttpAsyncCache.java
index d89def8a5..36ffb7c00 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/BasicHttpAsyncCache.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/BasicHttpAsyncCache.java
@@ -537,14 +537,12 @@ class BasicHttpAsyncCache implements HttpAsyncCache {
@Override
public void completed(final Map<String, HttpCacheEntry> resultMap) {
- for (final Map.Entry<String, HttpCacheEntry> resultMapEntry : resultMap.entrySet()) {
- final String cacheKey = resultMapEntry.getKey();
- final HttpCacheEntry cacheEntry = resultMapEntry.getValue();
+ resultMap.forEach((cacheKey, cacheEntry) -> {
final Header etagHeader = cacheEntry.getFirstHeader(HeaderConstants.ETAG);
if (etagHeader != null) {
variants.put(etagHeader.getValue(), new Variant(cacheKey, cacheEntry));
}
- }
+ });
callback.completed(variants);
}
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ByteArrayCacheEntrySerializer.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ByteArrayCacheEntrySerializer.java
index 1bebc95a0..aba1dc87e 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ByteArrayCacheEntrySerializer.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ByteArrayCacheEntrySerializer.java
@@ -117,12 +117,7 @@ public final class ByteArrayCacheEntrySerializer implements HttpCacheEntrySerial
// visible for testing
static boolean isAllowedClassName(final String className) {
- for (final Pattern allowedClassPattern : ALLOWED_CLASS_PATTERNS) {
- if (allowedClassPattern.matcher(className).matches()) {
- return true;
- }
- }
- return false;
+ return ALLOWED_CLASS_PATTERNS.stream().anyMatch(pattern -> pattern.matcher(className).matches());
}
}
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/CachingExec.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/CachingExec.java
index 5b437eec3..2f3e8ad89 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/CachingExec.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/CachingExec.java
@@ -29,7 +29,6 @@ package org.apache.hc.client5.http.impl.cache;
import java.io.IOException;
import java.io.InputStream;
import java.time.Instant;
-import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
@@ -206,9 +205,7 @@ class CachingExec extends CachingExecBase implements ExecChainHandler {
return null;
}
final ClassicHttpResponse response = new BasicClassicHttpResponse(cacheResponse.getCode(), cacheResponse.getReasonPhrase());
- for (final Iterator<Header> it = cacheResponse.headerIterator(); it.hasNext(); ) {
- response.addHeader(it.next());
- }
+ cacheResponse.headerIterator().forEachRemaining(response::addHeader);
response.setVersion(cacheResponse.getVersion() != null ? cacheResponse.getVersion() : HttpVersion.DEFAULT);
final SimpleBody body = cacheResponse.getBody();
if (body != null) {
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/DefaultAsyncCacheInvalidator.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/DefaultAsyncCacheInvalidator.java
index 952659516..670441103 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/DefaultAsyncCacheInvalidator.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/DefaultAsyncCacheInvalidator.java
@@ -112,9 +112,7 @@ public class DefaultAsyncCacheInvalidator extends CacheInvalidatorBase implement
if (LOG.isDebugEnabled()) {
LOG.debug("Invalidating parentEntry cache entry with key {}", cacheKey);
}
- for (final String variantURI : parentEntry.getVariantMap().values()) {
- removeEntry(storage, variantURI);
- }
+ parentEntry.getVariantMap().values().forEach(variantURI -> removeEntry(storage, variantURI));
removeEntry(storage, cacheKey);
}
if (uri != null) {
@@ -233,15 +231,13 @@ public class DefaultAsyncCacheInvalidator extends CacheInvalidatorBase implement
@Override
public void completed(final Map<String, HttpCacheEntry> resultMap) {
- for (final Map.Entry<String, HttpCacheEntry> resultEntry: resultMap.entrySet()) {
+ resultMap.forEach((key, entry) -> {
// do not invalidate if response is strictly older than entry
// or if the etags match
- final String key = resultEntry.getKey();
- final HttpCacheEntry entry = resultEntry.getValue();
if (!responseDateOlderThanEntryDate(response, entry) && responseAndEntryEtagsDiffer(response, entry)) {
removeEntry(storage, key);
}
- }
+ });
callback.completed(Boolean.TRUE);
}
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/DefaultCacheInvalidator.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/DefaultCacheInvalidator.java
index 0ac340d91..b51a24110 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/DefaultCacheInvalidator.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/DefaultCacheInvalidator.java
@@ -96,9 +96,7 @@ public class DefaultCacheInvalidator extends CacheInvalidatorBase implements Htt
if (LOG.isDebugEnabled()) {
LOG.debug("Invalidating parent cache entry with key {}", cacheKey);
}
- for (final String variantURI : parent.getVariantMap().values()) {
- removeEntry(storage, variantURI);
- }
+ parent.getVariantMap().values().forEach(variantURI -> removeEntry(storage, variantURI));
removeEntry(storage, cacheKey);
}
if (uri != null) {
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/HttpByteArrayCacheEntrySerializer.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/HttpByteArrayCacheEntrySerializer.java
index ce82e73f1..bf2734334 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/HttpByteArrayCacheEntrySerializer.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/HttpByteArrayCacheEntrySerializer.java
@@ -261,11 +261,11 @@ public class HttpByteArrayCacheEntrySerializer implements HttpCacheEntrySerializ
// Encode these so map entries are stored in a pair of headers, one for key and one for value.
// Header keys look like: {Accept-Encoding=gzip}
// And header values like: {Accept-Encoding=gzip}https://example.com:1234/foo
- for (final Map.Entry<String, String> entry : httpCacheEntry.getContent().getVariantMap().entrySet()) {
+ httpCacheEntry.getContent().getVariantMap().forEach((k, v) -> {
// Headers are ordered
- httpResponse.addHeader(SC_HEADER_NAME_VARIANT_MAP_KEY, entry.getKey());
- httpResponse.addHeader(SC_HEADER_NAME_VARIANT_MAP_VALUE, entry.getValue());
- }
+ httpResponse.addHeader(SC_HEADER_NAME_VARIANT_MAP_KEY, k);
+ httpResponse.addHeader(SC_HEADER_NAME_VARIANT_MAP_VALUE, v);
+ });
}
/**
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ManagedHttpCacheStorage.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ManagedHttpCacheStorage.java
index 917e71d81..cdfc3cbb1 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ManagedHttpCacheStorage.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ManagedHttpCacheStorage.java
@@ -182,9 +182,7 @@ public class ManagedHttpCacheStorage implements HttpCacheStorage, Closeable {
if (compareAndSet()) {
synchronized (this) {
this.entries.clear();
- for (final ResourceReference ref: this.resources) {
- ref.getResource().dispose();
- }
+ this.resources.forEach(ref -> ref.getResource().dispose());
this.resources.clear();
while (this.morque.poll() != null) {
}
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ResponseProtocolCompliance.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ResponseProtocolCompliance.java
index cd051afc5..ce4465513 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ResponseProtocolCompliance.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ResponseProtocolCompliance.java
@@ -146,9 +146,7 @@ class ResponseProtocolCompliance {
return;
}
response.removeHeaders(HttpHeaders.CONTENT_ENCODING);
- for (final Header h : newHeaders) {
- response.addHeader(h);
- }
+ newHeaders.forEach(response::addHeader);
}
private void ensure206ContainsDateHeader(final HttpResponse response) {
diff --git a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ehcache/EhcacheHttpCacheStorage.java b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ehcache/EhcacheHttpCacheStorage.java
index 1053bdba2..2bf201920 100644
--- a/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ehcache/EhcacheHttpCacheStorage.java
+++ b/httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/ehcache/EhcacheHttpCacheStorage.java
@@ -27,8 +27,9 @@
package org.apache.hc.client5.http.impl.cache.ehcache;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
import org.apache.hc.client5.http.cache.HttpCacheEntrySerializer;
import org.apache.hc.client5.http.cache.HttpCacheStorageEntry;
@@ -137,14 +138,8 @@ public class EhcacheHttpCacheStorage<T> extends AbstractSerializingCacheStorage<
@Override
protected Map<String, T> bulkRestore(final Collection<String> storageKeys) throws ResourceIOException {
- final Map<String, T> resultMap = new HashMap<>();
- for (final String storageKey: storageKeys) {
- final T storageObject = cache.get(storageKey);
- if (storageObject != null) {
- resultMap.put(storageKey, storageObject);
- }
- }
- return resultMap;
+ return storageKeys.stream().filter(cache::containsKey)
+ .collect(Collectors.toMap(Function.identity(), cache::get));
}
}
diff --git a/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/HttpByteArrayCacheEntrySerializerTestUtils.java b/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/HttpByteArrayCacheEntrySerializerTestUtils.java
index 950585f17..e4be347a8 100644
--- a/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/HttpByteArrayCacheEntrySerializerTestUtils.java
+++ b/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/HttpByteArrayCacheEntrySerializerTestUtils.java
@@ -226,9 +226,8 @@ class HttpByteArrayCacheEntrySerializerTestUtils {
assertEquals(expectedContent.getStatus(), actualContent.getStatus());
assertArrayEquals(expectedContent.getVariantMap().keySet().toArray(), actualContent.getVariantMap().keySet().toArray());
- for (final String key : expectedContent.getVariantMap().keySet()) {
- assertEquals(expectedContent.getVariantMap().get(key), actualContent.getVariantMap().get(key), "Expected same variantMap values for key '" + key + "'");
- }
+ expectedContent.getVariantMap().keySet().forEach(key -> assertEquals(expectedContent.getVariantMap().get(key),
+ actualContent.getVariantMap().get(key), "Expected same variantMap values for key '" + key + "'"));
// Verify that the same headers are present on the expected and actual content.
for(final Header expectedHeader: expectedContent.getHeaders()) {
diff --git a/httpclient5-fluent/src/main/java/org/apache/hc/client5/http/fluent/Request.java b/httpclient5-fluent/src/main/java/org/apache/hc/client5/http/fluent/Request.java
index 8c06c6267..6f501b8e6 100644
--- a/httpclient5-fluent/src/main/java/org/apache/hc/client5/http/fluent/Request.java
+++ b/httpclient5-fluent/src/main/java/org/apache/hc/client5/http/fluent/Request.java
@@ -358,11 +358,9 @@ public class Request {
return this;
}
- public Request bodyForm(final Iterable <? extends NameValuePair> formParams, final Charset charset) {
+ public Request bodyForm(final Iterable<? extends NameValuePair> formParams, final Charset charset) {
final List<NameValuePair> paramList = new ArrayList<>();
- for (final NameValuePair param : formParams) {
- paramList.add(param);
- }
+ formParams.forEach(paramList::add);
final ContentType contentType = charset != null ?
ContentType.APPLICATION_FORM_URLENCODED.withCharset(charset) : ContentType.APPLICATION_FORM_URLENCODED;
final String s = WWWFormCodec.format(paramList, contentType.getCharset());
diff --git a/httpclient5-fluent/src/test/java/org/apache/hc/client5/http/examples/fluent/FluentAsync.java b/httpclient5-fluent/src/test/java/org/apache/hc/client5/http/examples/fluent/FluentAsync.java
index e73fa9abd..106680308 100644
--- a/httpclient5-fluent/src/test/java/org/apache/hc/client5/http/examples/fluent/FluentAsync.java
+++ b/httpclient5-fluent/src/test/java/org/apache/hc/client5/http/examples/fluent/FluentAsync.java
@@ -26,7 +26,9 @@
*/
package org.apache.hc.client5.http.examples.fluent;
+import java.util.Arrays;
import java.util.LinkedList;
+import java.util.List;
import java.util.Queue;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -49,38 +51,35 @@ public class FluentAsync {
final ExecutorService threadpool = Executors.newFixedThreadPool(2);
final Async async = Async.newInstance().use(threadpool);
- final Request[] requests = new Request[] {
+ final List<Request> requests = Arrays.asList(
Request.get("http://www.google.com/"),
Request.get("http://www.yahoo.com/"),
Request.get("http://www.apache.org/"),
Request.get("http://www.apple.com/")
- };
+ );
final Queue<Future<Content>> queue = new LinkedList<>();
// Execute requests asynchronously
- for (final Request request: requests) {
- final Future<Content> future = async.execute(request, new FutureCallback<Content>() {
+ requests.forEach(request -> queue.add(async.execute(request, new FutureCallback<Content>() {
- @Override
- public void failed(final Exception ex) {
- System.out.println(ex.getMessage() + ": " + request);
- }
+ @Override
+ public void failed(final Exception ex) {
+ System.out.println(ex.getMessage() + ": " + request);
+ }
- @Override
- public void completed(final Content content) {
- System.out.println("Request completed: " + request);
- }
+ @Override
+ public void completed(final Content content) {
+ System.out.println("Request completed: " + request);
+ }
- @Override
- public void cancelled() {
- }
+ @Override
+ public void cancelled() {
+ }
- });
- queue.add(future);
- }
+ })));
- while(!queue.isEmpty()) {
+ while (!queue.isEmpty()) {
final Future<Content> future = queue.remove();
try {
future.get();
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/ContextBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/ContextBuilder.java
index 7e57753a9..4d412facc 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/ContextBuilder.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/ContextBuilder.java
@@ -124,9 +124,7 @@ public class ContextBuilder {
context.setCredentialsProvider(credentialsProvider);
context.setAuthCache(authCache);
if (authSchemeMap != null) {
- for (final Map.Entry<HttpHost, AuthScheme> entry : authSchemeMap.entrySet()) {
- context.resetAuthExchange(entry.getKey(), entry.getValue());
- }
+ authSchemeMap.forEach(context::resetAuthExchange);
}
return context;
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpRequest.java b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpRequest.java
index 61d3a9f21..39a4f74d8 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpRequest.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpRequest.java
@@ -28,10 +28,8 @@
package org.apache.hc.client5.http.async.methods;
import java.net.URI;
-import java.util.Iterator;
import org.apache.hc.core5.http.ContentType;
-import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.Method;
@@ -100,9 +98,7 @@ public final class SimpleHttpRequest extends ConfigurableHttpRequest {
Args.notNull(original, "HTTP request");
final SimpleHttpRequest copy = new SimpleHttpRequest(original.getMethod(), original.getRequestUri());
copy.setVersion(original.getVersion());
- for (final Iterator<Header> it = original.headerIterator(); it.hasNext(); ) {
- copy.addHeader(it.next());
- }
+ original.headerIterator().forEachRemaining(copy::addHeader);
copy.setScheme(original.getScheme());
copy.setAuthority(original.getAuthority());
return copy;
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpResponse.java b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpResponse.java
index 78416a9e7..e2dcf4df0 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpResponse.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/async/methods/SimpleHttpResponse.java
@@ -27,10 +27,7 @@
package org.apache.hc.client5.http.async.methods;
-import java.util.Iterator;
-
import org.apache.hc.core5.http.ContentType;
-import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.message.BasicHttpResponse;
import org.apache.hc.core5.util.Args;
@@ -66,9 +63,7 @@ public final class SimpleHttpResponse extends BasicHttpResponse {
Args.notNull(original, "HTTP response");
final SimpleHttpResponse copy = new SimpleHttpResponse(original.getCode());
copy.setVersion(original.getVersion());
- for (final Iterator<Header> it = original.headerIterator(); it.hasNext(); ) {
- copy.addHeader(it.next());
- }
+ original.headerIterator().forEachRemaining(copy::addHeader);
return copy;
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/config/TlsConfig.java b/httpclient5/src/main/java/org/apache/hc/client5/http/config/TlsConfig.java
index 8aba28f22..6a497be69 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/config/TlsConfig.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/config/TlsConfig.java
@@ -28,7 +28,9 @@
package org.apache.hc.client5.http.config;
import java.util.Arrays;
+import java.util.Objects;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Stream;
import org.apache.hc.core5.annotation.Contract;
import org.apache.hc.core5.annotation.ThreadingBehavior;
@@ -174,13 +176,15 @@ public class TlsConfig implements Cloneable {
* </p>
*/
public Builder setSupportedProtocols(final TLS... supportedProtocols) {
- this.supportedProtocols = new String[supportedProtocols.length];
- for (int i = 0; i < supportedProtocols.length; i++) {
- final TLS protocol = supportedProtocols[i];
- if (protocol != null) {
- this.supportedProtocols[i] = protocol.id;
- }
- }
+// this.supportedProtocols = new String[supportedProtocols.length];
+// for (int i = 0; i < supportedProtocols.length; i++) {
+// final TLS protocol = supportedProtocols[i];
+// if (protocol != null) {
+// this.supportedProtocols[i] = protocol.id;
+// }
+// }
+ this.supportedProtocols = Stream.of(supportedProtocols).filter(Objects::nonNull).map(p -> p.id)
+ .toArray(String[]::new);
return this;
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/cookie/BasicCookieStore.java b/httpclient5/src/main/java/org/apache/hc/client5/http/cookie/BasicCookieStore.java
index 38b972c57..91945bc6a 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/cookie/BasicCookieStore.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/cookie/BasicCookieStore.java
@@ -32,11 +32,11 @@ import java.io.Serializable;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
-import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.stream.Stream;
import org.apache.hc.core5.annotation.Contract;
import org.apache.hc.core5.annotation.ThreadingBehavior;
@@ -60,13 +60,6 @@ public class BasicCookieStore implements CookieStore, Serializable {
this.lock = new ReentrantReadWriteLock();
}
- private void readObject(final ObjectInputStream stream) throws IOException, ClassNotFoundException {
- stream.defaultReadObject();
-
- /* Reinstantiate transient fields. */
- this.lock = new ReentrantReadWriteLock();
- }
-
/**
* Adds an {@link Cookie HTTP cookie}, replacing any existing equivalent cookies.
* If the given cookie has already expired it will not be added, but existing
@@ -105,26 +98,20 @@ public class BasicCookieStore implements CookieStore, Serializable {
*/
public void addCookies(final Cookie[] cookies) {
if (cookies != null) {
- for (final Cookie cookie : cookies) {
- this.addCookie(cookie);
- }
+ Stream.of(cookies).forEach(this::addCookie);
}
}
/**
- * Returns an immutable array of {@link Cookie cookies} that this HTTP
- * state currently contains.
- *
- * @return an array of {@link Cookie cookies}.
+ * Clears all cookies.
*/
@Override
- public List<Cookie> getCookies() {
- lock.readLock().lock();
+ public void clear() {
+ lock.writeLock().lock();
try {
- //create defensive copy so it won't be concurrently modified
- return new ArrayList<>(cookies);
+ cookies.clear();
} finally {
- lock.readLock().unlock();
+ lock.writeLock().unlock();
}
}
@@ -144,14 +131,7 @@ public class BasicCookieStore implements CookieStore, Serializable {
}
lock.writeLock().lock();
try {
- boolean removed = false;
- for (final Iterator<Cookie> it = cookies.iterator(); it.hasNext(); ) {
- if (it.next().isExpired(date)) {
- it.remove();
- removed = true;
- }
- }
- return removed;
+ return cookies.removeIf(c -> c.isExpired(date));
} finally {
lock.writeLock().unlock();
}
@@ -172,32 +152,36 @@ public class BasicCookieStore implements CookieStore, Serializable {
}
lock.writeLock().lock();
try {
- boolean removed = false;
- for (final Iterator<Cookie> it = cookies.iterator(); it.hasNext(); ) {
- if (it.next().isExpired(instant)) {
- it.remove();
- removed = true;
- }
- }
- return removed;
+ return cookies.removeIf(c -> c.isExpired(instant));
} finally {
lock.writeLock().unlock();
}
}
/**
- * Clears all cookies.
+ * Returns an immutable array of {@link Cookie cookies} that this HTTP
+ * state currently contains.
+ *
+ * @return an array of {@link Cookie cookies}.
*/
@Override
- public void clear() {
- lock.writeLock().lock();
+ public List<Cookie> getCookies() {
+ lock.readLock().lock();
try {
- cookies.clear();
+ //create defensive copy so it won't be concurrently modified
+ return new ArrayList<>(cookies);
} finally {
- lock.writeLock().unlock();
+ lock.readLock().unlock();
}
}
+ private void readObject(final ObjectInputStream stream) throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+
+ /* Reinstantiate transient fields. */
+ this.lock = new ReentrantReadWriteLock();
+ }
+
@Override
public String toString() {
lock.readLock().lock();
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/cookie/CookieStore.java b/httpclient5/src/main/java/org/apache/hc/client5/http/cookie/CookieStore.java
index 543e6c5b7..86292277e 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/cookie/CookieStore.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/cookie/CookieStore.java
@@ -28,6 +28,7 @@ package org.apache.hc.client5.http.cookie;
import java.time.Instant;
import java.util.Date;
+import java.util.Iterator;
import java.util.List;
/**
@@ -36,7 +37,7 @@ import java.util.List;
*
* @since 4.0
*/
-public interface CookieStore {
+public interface CookieStore extends Iterable<Cookie> {
/**
* Adds an {@link Cookie}, replacing any existing equivalent cookies.
@@ -48,11 +49,9 @@ public interface CookieStore {
void addCookie(Cookie cookie);
/**
- * Returns all cookies contained in this store.
- *
- * @return all cookies
+ * Clears all cookies.
*/
- List<Cookie> getCookies();
+ void clear();
/**
* Removes all of {@link Cookie}s in this store that have expired by
@@ -76,8 +75,21 @@ public interface CookieStore {
}
/**
- * Clears all cookies.
+ * Returns all cookies contained in this store.
+ *
+ * @return all cookies
*/
- void clear();
+ List<Cookie> getCookies();
+
+ /**
+ * Iterates all cookies in this store.
+ *
+ * @since 5.2
+ */
+ @Override
+ default Iterator<Cookie> iterator() {
+ return getCookies().iterator();
+ }
+
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/FormBodyPartBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/FormBodyPartBuilder.java
index 72405cfc8..ef2e290e6 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/FormBodyPartBuilder.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/FormBodyPartBuilder.java
@@ -107,9 +107,7 @@ public class FormBodyPartBuilder {
Asserts.notNull(this.body, "Content body");
final Header headerCopy = new Header();
final List<MimeField> fields = this.header.getFields();
- for (final MimeField field: fields) {
- headerCopy.addField(field);
- }
+ fields.forEach(headerCopy::addField);
if (headerCopy.getField(MimeConsts.CONTENT_DISPOSITION) == null) {
final List<NameValuePair> fieldParameters = new ArrayList<>();
fieldParameters.add(new BasicNameValuePair(MimeConsts.FIELD_PARAM_NAME, this.name));
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MultipartPartBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MultipartPartBuilder.java
index eeda5cdb8..85dc1ba64 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MultipartPartBuilder.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MultipartPartBuilder.java
@@ -94,9 +94,7 @@ public class MultipartPartBuilder {
Asserts.notNull(this.body, "Content body");
final Header headerCopy = new Header();
final List<MimeField> fields = this.header.getFields();
- for (final MimeField field: fields) {
- headerCopy.addField(field);
- }
+ fields.forEach(headerCopy::addField);
if (headerCopy.getField(MimeConsts.CONTENT_TYPE) == null) {
final ContentType contentType;
if (body instanceof AbstractContentBody) {
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/RequestCopier.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/RequestCopier.java
index 7364a92f1..f8498f167 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/RequestCopier.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/RequestCopier.java
@@ -26,9 +26,6 @@
*/
package org.apache.hc.client5.http.impl;
-import java.util.Iterator;
-
-import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.message.BasicHttpRequest;
@@ -53,9 +50,7 @@ public final class RequestCopier implements MessageCopier<HttpRequest> {
copy.setScheme(original.getScheme());
copy.setAuthority(original.getAuthority());
copy.setVersion(original.getVersion());
- for (final Iterator<Header> it = original.headerIterator(); it.hasNext(); ) {
- copy.addHeader(it.next());
- }
+ original.headerIterator().forEachRemaining(copy::addHeader);
return copy;
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/RequestSupport.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/RequestSupport.java
index 50e879f38..9fe318bc6 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/RequestSupport.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/RequestSupport.java
@@ -60,10 +60,10 @@ public final class RequestSupport {
} else {
final StringBuilder buf = new StringBuilder();
buf.append('/');
- for (final String pathSegment : pathSegments) {
+ pathSegments.forEach(pathSegment -> {
PercentCodec.encode(buf, pathSegment, StandardCharsets.US_ASCII);
buf.append('/');
- }
+ });
return buf.toString();
}
} catch (final URISyntaxException ex) {
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java
index 2f696bbd5..569e91ed1 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/AsyncProtocolExec.java
@@ -27,7 +27,6 @@
package org.apache.hc.client5.http.impl.async;
import java.io.IOException;
-import java.util.Iterator;
import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.hc.client5.http.AuthenticationStrategy;
@@ -49,7 +48,6 @@ import org.apache.hc.core5.annotation.Contract;
import org.apache.hc.core5.annotation.Internal;
import org.apache.hc.core5.annotation.ThreadingBehavior;
import org.apache.hc.core5.http.EntityDetails;
-import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpException;
import org.apache.hc.core5.http.HttpHeaders;
import org.apache.hc.core5.http.HttpHost;
@@ -265,9 +263,7 @@ public final class AsyncProtocolExec implements AsyncExecChainHandler {
// Reset request headers
final HttpRequest original = scope.originalRequest;
request.setHeaders();
- for (final Iterator<Header> it = original.headerIterator(); it.hasNext(); ) {
- request.addHeader(it.next());
- }
+ original.headerIterator().forEachRemaining(request::addHeader);
try {
if (entityProducer != null) {
entityProducer.releaseResources();
@@ -286,11 +282,8 @@ public final class AsyncProtocolExec implements AsyncExecChainHandler {
@Override
public void failed(final Exception cause) {
if (cause instanceof IOException || cause instanceof RuntimeException) {
- for (final AuthExchange authExchange : clientContext.getAuthExchanges().values()) {
- if (authExchange.isConnectionBased()) {
- authExchange.reset();
- }
- }
+ clientContext.getAuthExchanges().values().stream().filter(AuthExchange::isConnectionBased)
+ .forEach(AuthExchange::reset);
}
asyncExecCallback.failed(cause);
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/BasicScheme.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/BasicScheme.java
index 87d11448c..f518ee79e 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/BasicScheme.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/BasicScheme.java
@@ -133,9 +133,7 @@ public class BasicScheme implements AuthScheme, Serializable {
this.paramMap.clear();
final List<NameValuePair> params = authChallenge.getParams();
if (params != null) {
- for (final NameValuePair param: params) {
- this.paramMap.put(param.getName().toLowerCase(Locale.ROOT), param.getValue());
- }
+ params.forEach(param -> this.paramMap.put(param.getName().toLowerCase(Locale.ROOT), param.getValue()));
}
this.complete = true;
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/DigestScheme.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/DigestScheme.java
index ff98ab36a..4a9609340 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/DigestScheme.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/DigestScheme.java
@@ -162,9 +162,7 @@ public class DigestScheme implements AuthScheme, Serializable {
this.paramMap.clear();
final List<NameValuePair> params = authChallenge.getParams();
if (params != null) {
- for (final NameValuePair param: params) {
- this.paramMap.put(param.getName().toLowerCase(Locale.ROOT), param.getValue());
- }
+ params.forEach(param -> this.paramMap.put(param.getName().toLowerCase(Locale.ROOT), param.getValue()));
}
if (this.paramMap.isEmpty()) {
throw new MalformedChallengeException("Missing digest auth parameters");
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/HttpAuthenticator.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/HttpAuthenticator.java
index a5507fdd6..06a9097c8 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/HttpAuthenticator.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/HttpAuthenticator.java
@@ -190,12 +190,8 @@ public final class HttpAuthenticator {
}
continue;
}
- for (final AuthChallenge authChallenge: authChallenges) {
- final String schemeName = authChallenge.getSchemeName().toLowerCase(Locale.ROOT);
- if (!challengeMap.containsKey(schemeName)) {
- challengeMap.put(schemeName, authChallenge);
- }
- }
+ authChallenges.forEach(authChallenge -> challengeMap
+ .putIfAbsent(authChallenge.getSchemeName().toLowerCase(Locale.ROOT), authChallenge));
}
if (challengeMap.isEmpty()) {
if (LOG.isDebugEnabled()) {
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ClassicRequestCopier.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ClassicRequestCopier.java
index dfdfff06d..5a14d57ed 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ClassicRequestCopier.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ClassicRequestCopier.java
@@ -26,10 +26,7 @@
*/
package org.apache.hc.client5.http.impl.classic;
-import java.util.Iterator;
-
import org.apache.hc.core5.http.ClassicHttpRequest;
-import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.message.BasicClassicHttpRequest;
/**
@@ -53,9 +50,7 @@ public final class ClassicRequestCopier implements org.apache.hc.client5.http.im
copy.setScheme(original.getScheme());
copy.setAuthority(original.getAuthority());
copy.setVersion(original.getVersion());
- for (final Iterator<Header> it = original.headerIterator(); it.hasNext(); ) {
- copy.addHeader(it.next());
- }
+ original.headerIterator().forEachRemaining(copy::addHeader);
copy.setEntity(original.getEntity());
return copy;
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/HttpClientBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/HttpClientBuilder.java
index b8d0d1037..aa4e94342 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/HttpClientBuilder.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/HttpClientBuilder.java
@@ -34,7 +34,6 @@ import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
import org.apache.hc.client5.http.AuthenticationStrategy;
import org.apache.hc.client5.http.ConnectionKeepAliveStrategy;
@@ -878,9 +877,7 @@ public class HttpClientBuilder {
if (contentDecoderMap != null) {
final List<String> encodings = new ArrayList<>(contentDecoderMap.keySet());
final RegistryBuilder<InputStreamFactory> b2 = RegistryBuilder.create();
- for (final Map.Entry<String, InputStreamFactory> entry: contentDecoderMap.entrySet()) {
- b2.register(entry.getKey(), entry.getValue());
- }
+ contentDecoderMap.entrySet().forEach(entry -> b2.register(entry.getKey(), entry.getValue()));
final Registry<InputStreamFactory> decoderRegistry = b2.build();
execChainDefinition.addFirst(
new ContentCompressionExec(encodings, decoderRegistry, true),
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java
index 8ef37e4d0..f4d049f5f 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/classic/ProtocolExec.java
@@ -28,7 +28,6 @@
package org.apache.hc.client5.http.impl.classic;
import java.io.IOException;
-import java.util.Iterator;
import org.apache.hc.client5.http.AuthenticationStrategy;
import org.apache.hc.client5.http.HttpRoute;
@@ -49,7 +48,6 @@ import org.apache.hc.core5.annotation.Internal;
import org.apache.hc.core5.annotation.ThreadingBehavior;
import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ClassicHttpResponse;
-import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpEntity;
import org.apache.hc.core5.http.HttpException;
import org.apache.hc.core5.http.HttpHeaders;
@@ -236,9 +234,7 @@ public final class ProtocolExec implements ExecChainHandler {
// Reset request headers
final ClassicHttpRequest original = scope.originalRequest;
request.setHeaders();
- for (final Iterator<Header> it = original.headerIterator(); it.hasNext(); ) {
- request.addHeader(it.next());
- }
+ original.headerIterator().forEachRemaining(request::addHeader);
} else {
ResponseEntityProxy.enhance(response, execRuntime);
return response;
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/cookie/CookieSpecBase.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/cookie/CookieSpecBase.java
index af9782214..001f86409 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/cookie/CookieSpecBase.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/cookie/CookieSpecBase.java
@@ -132,12 +132,7 @@ public abstract class CookieSpecBase extends AbstractCookieSpec {
public boolean match(final Cookie cookie, final CookieOrigin origin) {
Args.notNull(cookie, "Cookie");
Args.notNull(origin, "Cookie origin");
- for (final CookieAttributeHandler handler: getAttribHandlers()) {
- if (!handler.match(cookie, origin)) {
- return false;
- }
- }
- return true;
+ return getAttribHandlers().stream().allMatch(handler -> handler.match(cookie, origin));
}
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/DefaultManagedHttpClientConnection.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/DefaultManagedHttpClientConnection.java
index a5f80a169..fcaae05e7 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/DefaultManagedHttpClientConnection.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/DefaultManagedHttpClientConnection.java
@@ -33,6 +33,7 @@ import java.net.Socket;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Stream;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
@@ -41,7 +42,6 @@ import org.apache.hc.client5.http.io.ManagedHttpClientConnection;
import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.ContentLengthStrategy;
-import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.config.Http1Config;
import org.apache.hc.core5.http.impl.io.DefaultBHttpClientConnection;
import org.apache.hc.core5.http.impl.io.SocketHolder;
@@ -187,10 +187,7 @@ final class DefaultManagedHttpClientConnection
protected void onResponseReceived(final ClassicHttpResponse response) {
if (response != null && HEADER_LOG.isDebugEnabled()) {
HEADER_LOG.debug("{} << {}", this.id, new StatusLine(response));
- final Header[] headers = response.getHeaders();
- for (final Header header : headers) {
- HEADER_LOG.debug("{} << {}", this.id, header);
- }
+ Stream.of(response.getHeaders()).forEach(header -> HEADER_LOG.debug("{} << {}", this.id, header));
}
}
@@ -198,10 +195,7 @@ final class DefaultManagedHttpClientConnection
protected void onRequestSubmitted(final ClassicHttpRequest request) {
if (request != null && HEADER_LOG.isDebugEnabled()) {
HEADER_LOG.debug("{} >> {}", this.id, new RequestLine(request));
- final Header[] headers = request.getHeaders();
- for (final Header header : headers) {
- HEADER_LOG.debug("{} >> {}", this.id, header);
- }
+ Stream.of(request.getHeaders()).forEach(header -> HEADER_LOG.debug("{} >> {}", this.id, header));
}
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/routing/BasicRouteDirector.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/routing/BasicRouteDirector.java
index 15b197d72..66d51a4d3 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/routing/BasicRouteDirector.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/routing/BasicRouteDirector.java
@@ -155,7 +155,7 @@ public class BasicRouteDirector implements HttpRouteDirector {
return UNREACHABLE;
}
- for (int i=0; i<fhc-1; i++) {
+ for (int i = 0; i < fhc - 1; i++) {
if (!plan.getHopTarget(i).equals(fact.getHopTarget(i))) {
return UNREACHABLE;
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/routing/SystemDefaultRoutePlanner.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/routing/SystemDefaultRoutePlanner.java
index b62cb7720..9a9d4f17f 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/routing/SystemDefaultRoutePlanner.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/routing/SystemDefaultRoutePlanner.java
@@ -106,7 +106,7 @@ public class SystemDefaultRoutePlanner extends DefaultRoutePlanner {
private Proxy chooseProxy(final List<Proxy> proxies) {
Proxy result = null;
// check the list for one we can use
- for (int i=0; (result == null) && (i < proxies.size()); i++) {
+ for (int i = 0; (result == null) && (i < proxies.size()); i++) {
final Proxy p = proxies.get(i);
switch (p.type()) {
@@ -122,7 +122,7 @@ public class SystemDefaultRoutePlanner extends DefaultRoutePlanner {
}
}
if (result == null) {
- //@@@ log as warning or info that only a socks proxy is available?
+ // @@@ log as warning or info that only a socks proxy is available?
// result can only be null if all proxies are socks proxies
// socks proxies are not handled on the route planning level
result = Proxy.NO_PROXY;
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/protocol/RequestAddCookies.java b/httpclient5/src/main/java/org/apache/hc/client5/http/protocol/RequestAddCookies.java
index 39d67977c..7a6b02dcf 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/protocol/RequestAddCookies.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/protocol/RequestAddCookies.java
@@ -33,17 +33,16 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.hc.client5.http.RouteInfo;
-import org.apache.hc.client5.http.cookie.StandardCookieSpec;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.cookie.Cookie;
import org.apache.hc.client5.http.cookie.CookieOrigin;
import org.apache.hc.client5.http.cookie.CookieSpec;
import org.apache.hc.client5.http.cookie.CookieSpecFactory;
import org.apache.hc.client5.http.cookie.CookieStore;
+import org.apache.hc.client5.http.cookie.StandardCookieSpec;
import org.apache.hc.core5.annotation.Contract;
import org.apache.hc.core5.annotation.ThreadingBehavior;
import org.apache.hc.core5.http.EntityDetails;
-import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.HttpException;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.HttpRequestInterceptor;
@@ -154,12 +153,11 @@ public class RequestAddCookies implements HttpRequestInterceptor {
}
final CookieSpec cookieSpec = factory.create(clientContext);
// Get all cookies available in the HTTP state
- final List<Cookie> cookies = cookieStore.getCookies();
// Find cookies matching the given origin
final List<Cookie> matchedCookies = new ArrayList<>();
final Instant now = Instant.now();
boolean expired = false;
- for (final Cookie cookie : cookies) {
+ for (final Cookie cookie : cookieStore) {
if (!cookie.isExpired(now)) {
if (cookieSpec.match(cookie, cookieOrigin)) {
if (LOG.isDebugEnabled()) {
@@ -182,10 +180,7 @@ public class RequestAddCookies implements HttpRequestInterceptor {
}
// Generate Cookie request headers
if (!matchedCookies.isEmpty()) {
- final List<Header> headers = cookieSpec.formatCookies(matchedCookies);
- for (final Header header : headers) {
- request.addHeader(header);
- }
+ cookieSpec.formatCookies(matchedCookies).forEach(request::addHeader);
}
// Stick the CookieSpec and CookieOrigin instances to the HTTP context
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/protocol/RequestDefaultHeaders.java b/httpclient5/src/main/java/org/apache/hc/client5/http/protocol/RequestDefaultHeaders.java
index 6293580a9..da05ced6e 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/protocol/RequestDefaultHeaders.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/protocol/RequestDefaultHeaders.java
@@ -81,11 +81,11 @@ public class RequestDefaultHeaders implements HttpRequestInterceptor {
}
if (this.defaultHeaders != null) {
- for (final Header defHeader : this.defaultHeaders) {
- if(!request.containsHeader(defHeader.getName())) {
+ this.defaultHeaders.forEach(defHeader -> {
+ if (!request.containsHeader(defHeader.getName())) {
request.addHeader(defHeader);
}
- }
+ });
}
}
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/psl/PublicSuffixMatcher.java b/httpclient5/src/main/java/org/apache/hc/client5/http/psl/PublicSuffixMatcher.java
index 191d4d5b5..854f946f2 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/psl/PublicSuffixMatcher.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/psl/PublicSuffixMatcher.java
@@ -30,7 +30,11 @@ import java.net.IDN;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.function.Function;
+import java.util.stream.Collectors;
import org.apache.hc.client5.http.utils.DnsUtils;
import org.apache.hc.core5.annotation.Contract;
@@ -51,8 +55,8 @@ import org.apache.hc.core5.util.Args;
@Contract(threading = ThreadingBehavior.SAFE)
public final class PublicSuffixMatcher {
- private final Map<String, DomainType> rules;
- private final Map<String, DomainType> exceptions;
+ private final ConcurrentMap<String, DomainType> rules;
+ private final ConcurrentMap<String, DomainType> exceptions;
public PublicSuffixMatcher(final Collection<String> rules, final Collection<String> exceptions) {
this(DomainType.UNKNOWN, rules, exceptions);
@@ -63,40 +67,30 @@ public final class PublicSuffixMatcher {
*/
public PublicSuffixMatcher(
final DomainType domainType, final Collection<String> rules, final Collection<String> exceptions) {
- Args.notNull(domainType, "Domain type");
- Args.notNull(rules, "Domain suffix rules");
- this.rules = new ConcurrentHashMap<>(rules.size());
- for (final String rule: rules) {
- this.rules.put(rule, domainType);
- }
- this.exceptions = new ConcurrentHashMap<>();
- if (exceptions != null) {
- for (final String exception: exceptions) {
- this.exceptions.put(exception, domainType);
- }
- }
+ Args.notNull(domainType, "Domain type");
+ Args.notNull(rules, "Domain suffix rules");
+ this.rules = rules.stream().filter(Objects::nonNull)
+ .collect(Collectors.toConcurrentMap(Function.identity(), k -> domainType));
+ this.exceptions = exceptions == null ? new ConcurrentHashMap<>()
+ : exceptions.stream().filter(Objects::nonNull)
+ .collect(Collectors.toConcurrentMap(Function.identity(), k -> domainType));
}
/**
* @since 4.5
*/
public PublicSuffixMatcher(final Collection<PublicSuffixList> lists) {
- Args.notNull(lists, "Domain suffix lists");
+ Args.notNull(lists, "Domain suffix lists");
this.rules = new ConcurrentHashMap<>();
this.exceptions = new ConcurrentHashMap<>();
- for (final PublicSuffixList list: lists) {
+ lists.forEach(list -> {
final DomainType domainType = list.getType();
- final List<String> rules = list.getRules();
- for (final String rule: rules) {
- this.rules.put(rule, domainType);
- }
+ list.getRules().forEach(rule -> this.rules.put(rule, domainType));
final List<String> exceptions = list.getExceptions();
if (exceptions != null) {
- for (final String exception: exceptions) {
- this.exceptions.put(exception, domainType);
- }
+ exceptions.forEach(exception -> this.exceptions.put(exception, domainType));
}
- }
+ });
}
private static DomainType findEntry(final Map<String, DomainType> map, final String rule) {
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/ssl/SSLConnectionSocketFactory.java b/httpclient5/src/main/java/org/apache/hc/client5/http/ssl/SSLConnectionSocketFactory.java
index 03a7aa6a5..12fce5c8d 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/ssl/SSLConnectionSocketFactory.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/ssl/SSLConnectionSocketFactory.java
@@ -115,12 +115,7 @@ public class SSLConnectionSocketFactory implements LayeredConnectionSocketFactor
}
static boolean isWeakCipherSuite(final String cipherSuite) {
- for (final Pattern pattern : WEAK_CIPHER_SUITE_PATTERNS) {
- if (pattern.matcher(cipherSuite).matches()) {
- return true;
- }
- }
- return false;
+ return WEAK_CIPHER_SUITE_PATTERNS.stream().anyMatch(pattern -> pattern.matcher(cipherSuite).matches());
}
private final javax.net.ssl.SSLSocketFactory socketFactory;
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/ssl/TlsSessionValidator.java b/httpclient5/src/main/java/org/apache/hc/client5/http/ssl/TlsSessionValidator.java
index 76541ff46..f5072f48c 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/ssl/TlsSessionValidator.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/ssl/TlsSessionValidator.java
@@ -74,7 +74,7 @@ final class TlsSessionValidator {
final List<String> altNames = new ArrayList<>();
for (final List<?> aC : altNames1) {
if (!aC.isEmpty()) {
- altNames.add(Objects.toString(aC.get(1), null));
+ altNames.add(Objects.toString(aC.get(1)));
}
}
log.debug(" peer alternative names: {}", altNames);
@@ -87,7 +87,7 @@ final class TlsSessionValidator {
final List<String> altNames = new ArrayList<>();
for (final List<?> aC : altNames2) {
if (!aC.isEmpty()) {
- altNames.add(Objects.toString(aC.get(1), null));
+ altNames.add(Objects.toString(aC.get(1)));
}
}
log.debug(" issuer alternative names: {}", altNames);
diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/examples/ClientCustomContext.java b/httpclient5/src/test/java/org/apache/hc/client5/http/examples/ClientCustomContext.java
index ce93914f8..b52fc4e1f 100644
--- a/httpclient5/src/test/java/org/apache/hc/client5/http/examples/ClientCustomContext.java
+++ b/httpclient5/src/test/java/org/apache/hc/client5/http/examples/ClientCustomContext.java
@@ -27,12 +27,9 @@
package org.apache.hc.client5.http.examples;
-import java.util.List;
-
import org.apache.hc.client5.http.ContextBuilder;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.cookie.BasicCookieStore;
-import org.apache.hc.client5.http.cookie.Cookie;
import org.apache.hc.client5.http.cookie.CookieStore;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
@@ -64,8 +61,7 @@ public class ClientCustomContext {
httpclient.execute(httpget, localContext, response -> {
System.out.println("----------------------------------------");
System.out.println(httpget + "->" + new StatusLine(response));
- final List<Cookie> cookies = cookieStore.getCookies();
- cookies.forEach(element -> System.out.println("Local cookie: " + element));
+ cookieStore.forEach(element -> System.out.println("Local cookie: " + element));
EntityUtils.consume(response.getEntity());
return null;
});